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>
This commit is contained in:
parent
c840caf1ef
commit
272ccb195d
16 changed files with 374 additions and 182 deletions
|
@ -56,14 +56,11 @@ 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: "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{
|
||||
|
@ -71,8 +68,41 @@ func (APIConnReverseTest) EpIndexReverse(ip string) []*object.Endpoints {
|
|||
},
|
||||
},
|
||||
},
|
||||
Name: "svc1",
|
||||
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"},
|
||||
},
|
||||
Ports: []object.EndpointPort{
|
||||
{Port: 80, Protocol: "tcp", Name: "http"},
|
||||
},
|
||||
},
|
||||
},
|
||||
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
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue