diff options
author | 2020-10-30 08:14:30 -0400 | |
---|---|---|
committer | 2020-10-30 08:14:30 -0400 | |
commit | 272ccb195d31cd1622d48f961f3a189ce3abb937 (patch) | |
tree | b5db771e2371b2e4ede772dff2c2c4217188115c /plugin/kubernetes/reverse_test.go | |
parent | c840caf1ef77d8f86ee7d11f644e0d6ea42c469a (diff) | |
download | coredns-272ccb195d31cd1622d48f961f3a189ce3abb937.tar.gz coredns-272ccb195d31cd1622d48f961f3a189ce3abb937.tar.zst coredns-272ccb195d31cd1622d48f961f3a189ce3abb937.zip |
plugin/kubernetes: Watch EndpointSlices (#4209)
* initial commit
Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
* convert endpointslices to object.endpoints
Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
* add opt hard coded for now
Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
* check that server supports endpointslice
Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
* fix import grouping
Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
* dont use endpoint slice in 1.17 or 1.18
Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
* bump kind/k8s in circle ci to latest
Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
* drop k8s to latest supported by kind
Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
* use endpointslice name as endoint Name; index by Service name
Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
* use index key comparison in nsAddrs()
Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
* add Index to object.Endpoint fixtures; fix direct endpoint name compares
Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
* add slice dup check and test
Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
* todo
Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
* add ep-slice skew dup test for reverse
Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
* nsaddrs: de-dup ep-slice skew dups; add test
Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
* remove todo
Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
* address various feedback
Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
* consolidate endpoint/slice informer code
Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
* fix endpoint informer consolidation; use clearer func name
Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
* log info; use major/minor fields
Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
* fix nsAddr and unit test
Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
* add latency tracking for endpointslices
Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
* endpointslice latency unit test & fix
Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
* code shuffling
Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
* rename endpointslices in tests
Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
* remove de-dup from nsAddrs and test
Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
* remove de-dup from findServices / test
Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
Diffstat (limited to 'plugin/kubernetes/reverse_test.go')
-rw-r--r-- | plugin/kubernetes/reverse_test.go | 49 |
1 files changed, 40 insertions, 9 deletions
diff --git a/plugin/kubernetes/reverse_test.go b/plugin/kubernetes/reverse_test.go index 5869d34bc..3b3b6872b 100644 --- a/plugin/kubernetes/reverse_test.go +++ b/plugin/kubernetes/reverse_test.go @@ -56,23 +56,53 @@ func (APIConnReverseTest) SvcIndexReverse(ip string) []*object.Service { } func (APIConnReverseTest) EpIndexReverse(ip string) []*object.Endpoints { - ep1 := object.Endpoints{ + ep1s1 := object.Endpoints{ Subsets: []object.EndpointSubset{ { Addresses: []object.EndpointAddress{ {IP: "10.0.0.100", Hostname: "ep1a"}, + {IP: "10.0.0.99", Hostname: "double-ep"}, // this endpoint is used by two services + }, + Ports: []object.EndpointPort{ + {Port: 80, Protocol: "tcp", Name: "http"}, + }, + }, + }, + Name: "svc1-slice1", + Namespace: "testns", + Index: object.EndpointsKey("svc1", "testns"), + } + ep1s2 := object.Endpoints{ + Subsets: []object.EndpointSubset{ + { + Addresses: []object.EndpointAddress{ {IP: "1234:abcd::1", Hostname: "ep1b"}, {IP: "fd00:77:30::a", Hostname: "ip6svc1ex"}, {IP: "fd00:77:30::2:9ba6", Hostname: "ip6svc1in"}, - {IP: "10.0.0.99", Hostname: "double-ep"}, // this endpoint is used by two services }, Ports: []object.EndpointPort{ {Port: 80, Protocol: "tcp", Name: "http"}, }, }, }, - Name: "svc1", + Name: "svc1-slice2", Namespace: "testns", + Index: object.EndpointsKey("svc1", "testns"), + } + ep1s3 := object.Endpoints{ + Subsets: []object.EndpointSubset{ + { + Addresses: []object.EndpointAddress{ + {IP: "10.0.0.100", Hostname: "ep1a"}, // duplicate endpointslice address + }, + Ports: []object.EndpointPort{ + {Port: 80, Protocol: "tcp", Name: "http"}, + }, + }, + }, + Name: "svc1-ccccc", + Namespace: "testns", + Index: object.EndpointsKey("svc1", "testns"), } ep2 := object.Endpoints{ Subsets: []object.EndpointSubset{ @@ -85,20 +115,21 @@ func (APIConnReverseTest) EpIndexReverse(ip string) []*object.Endpoints { }, }, }, - Name: "svc2", + Name: "svc2-slice1", Namespace: "testns", + Index: object.EndpointsKey("svc2", "testns"), } switch ip { - case "10.0.0.100": - fallthrough case "1234:abcd::1": fallthrough case "fd00:77:30::a": fallthrough case "fd00:77:30::2:9ba6": - return []*object.Endpoints{&ep1} - case "10.0.0.99": - return []*object.Endpoints{&ep1, &ep2} + return []*object.Endpoints{&ep1s2} + case "10.0.0.100": // two EndpointSlices for a Service contain this IP (EndpointSlice skew) + return []*object.Endpoints{&ep1s1, &ep1s3} + case "10.0.0.99": // two different Services select this IP + return []*object.Endpoints{&ep1s1, &ep2} } return nil } |