mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 19:56:01 +00:00
Updating kube-proxy to ignore unready endpoints for Topology Hints
This commit is contained in:
parent
1367cca8fd
commit
1983f41065
@ -68,6 +68,9 @@ func filterEndpointsWithHints(endpoints []Endpoint, hintsAnnotation string, node
|
|||||||
filteredEndpoints := []Endpoint{}
|
filteredEndpoints := []Endpoint{}
|
||||||
|
|
||||||
for _, endpoint := range endpoints {
|
for _, endpoint := range endpoints {
|
||||||
|
if !endpoint.IsReady() {
|
||||||
|
continue
|
||||||
|
}
|
||||||
if endpoint.GetZoneHints().Len() == 0 {
|
if endpoint.GetZoneHints().Len() == 0 {
|
||||||
klog.InfoS("Skipping topology aware endpoint filtering since one or more endpoints is missing a zone hint")
|
klog.InfoS("Skipping topology aware endpoint filtering since one or more endpoints is missing a zone hint")
|
||||||
return endpoints
|
return endpoints
|
||||||
|
@ -31,6 +31,7 @@ func TestFilterEndpoints(t *testing.T) {
|
|||||||
type endpoint struct {
|
type endpoint struct {
|
||||||
ip string
|
ip string
|
||||||
zoneHints sets.String
|
zoneHints sets.String
|
||||||
|
unready bool
|
||||||
}
|
}
|
||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
name string
|
name string
|
||||||
@ -138,12 +139,12 @@ func TestFilterEndpoints(t *testing.T) {
|
|||||||
|
|
||||||
endpoints := []Endpoint{}
|
endpoints := []Endpoint{}
|
||||||
for _, ep := range tc.endpoints {
|
for _, ep := range tc.endpoints {
|
||||||
endpoints = append(endpoints, &BaseEndpointInfo{Endpoint: ep.ip, ZoneHints: ep.zoneHints})
|
endpoints = append(endpoints, &BaseEndpointInfo{Endpoint: ep.ip, ZoneHints: ep.zoneHints, Ready: !ep.unready})
|
||||||
}
|
}
|
||||||
|
|
||||||
expectedEndpoints := []Endpoint{}
|
expectedEndpoints := []Endpoint{}
|
||||||
for _, ep := range tc.expectedEndpoints {
|
for _, ep := range tc.expectedEndpoints {
|
||||||
expectedEndpoints = append(expectedEndpoints, &BaseEndpointInfo{Endpoint: ep.ip, ZoneHints: ep.zoneHints})
|
expectedEndpoints = append(expectedEndpoints, &BaseEndpointInfo{Endpoint: ep.ip, ZoneHints: ep.zoneHints, Ready: !ep.unready})
|
||||||
}
|
}
|
||||||
|
|
||||||
filteredEndpoints := FilterEndpoints(endpoints, tc.serviceInfo, tc.nodeLabels)
|
filteredEndpoints := FilterEndpoints(endpoints, tc.serviceInfo, tc.nodeLabels)
|
||||||
@ -161,6 +162,7 @@ func Test_filterEndpointsWithHints(t *testing.T) {
|
|||||||
type endpoint struct {
|
type endpoint struct {
|
||||||
ip string
|
ip string
|
||||||
zoneHints sets.String
|
zoneHints sets.String
|
||||||
|
unready bool
|
||||||
}
|
}
|
||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
name string
|
name string
|
||||||
@ -200,6 +202,35 @@ func Test_filterEndpointsWithHints(t *testing.T) {
|
|||||||
{ip: "10.1.2.3", zoneHints: sets.NewString("zone-a")},
|
{ip: "10.1.2.3", zoneHints: sets.NewString("zone-a")},
|
||||||
{ip: "10.1.2.6", zoneHints: sets.NewString("zone-a")},
|
{ip: "10.1.2.6", zoneHints: sets.NewString("zone-a")},
|
||||||
},
|
},
|
||||||
|
}, {
|
||||||
|
name: "unready endpoint",
|
||||||
|
nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-a"},
|
||||||
|
hintsAnnotation: "auto",
|
||||||
|
endpoints: []endpoint{
|
||||||
|
{ip: "10.1.2.3", zoneHints: sets.NewString("zone-a")},
|
||||||
|
{ip: "10.1.2.4", zoneHints: sets.NewString("zone-b")},
|
||||||
|
{ip: "10.1.2.5", zoneHints: sets.NewString("zone-c")},
|
||||||
|
{ip: "10.1.2.6", zoneHints: sets.NewString("zone-a"), unready: true},
|
||||||
|
},
|
||||||
|
expectedEndpoints: []endpoint{
|
||||||
|
{ip: "10.1.2.3", zoneHints: sets.NewString("zone-a")},
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
name: "only unready endpoints in same zone (should not filter)",
|
||||||
|
nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-a"},
|
||||||
|
hintsAnnotation: "auto",
|
||||||
|
endpoints: []endpoint{
|
||||||
|
{ip: "10.1.2.3", zoneHints: sets.NewString("zone-a"), unready: true},
|
||||||
|
{ip: "10.1.2.4", zoneHints: sets.NewString("zone-b")},
|
||||||
|
{ip: "10.1.2.5", zoneHints: sets.NewString("zone-c")},
|
||||||
|
{ip: "10.1.2.6", zoneHints: sets.NewString("zone-a"), unready: true},
|
||||||
|
},
|
||||||
|
expectedEndpoints: []endpoint{
|
||||||
|
{ip: "10.1.2.3", zoneHints: sets.NewString("zone-a"), unready: true},
|
||||||
|
{ip: "10.1.2.4", zoneHints: sets.NewString("zone-b")},
|
||||||
|
{ip: "10.1.2.5", zoneHints: sets.NewString("zone-c")},
|
||||||
|
{ip: "10.1.2.6", zoneHints: sets.NewString("zone-a"), unready: true},
|
||||||
|
},
|
||||||
}, {
|
}, {
|
||||||
name: "normal endpoint filtering, Auto annotation",
|
name: "normal endpoint filtering, Auto annotation",
|
||||||
nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-a"},
|
nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-a"},
|
||||||
@ -291,12 +322,12 @@ func Test_filterEndpointsWithHints(t *testing.T) {
|
|||||||
t.Run(tc.name, func(t *testing.T) {
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
endpoints := []Endpoint{}
|
endpoints := []Endpoint{}
|
||||||
for _, ep := range tc.endpoints {
|
for _, ep := range tc.endpoints {
|
||||||
endpoints = append(endpoints, &BaseEndpointInfo{Endpoint: ep.ip, ZoneHints: ep.zoneHints})
|
endpoints = append(endpoints, &BaseEndpointInfo{Endpoint: ep.ip, ZoneHints: ep.zoneHints, Ready: !ep.unready})
|
||||||
}
|
}
|
||||||
|
|
||||||
expectedEndpoints := []Endpoint{}
|
expectedEndpoints := []Endpoint{}
|
||||||
for _, ep := range tc.expectedEndpoints {
|
for _, ep := range tc.expectedEndpoints {
|
||||||
expectedEndpoints = append(expectedEndpoints, &BaseEndpointInfo{Endpoint: ep.ip, ZoneHints: ep.zoneHints})
|
expectedEndpoints = append(expectedEndpoints, &BaseEndpointInfo{Endpoint: ep.ip, ZoneHints: ep.zoneHints, Ready: !ep.unready})
|
||||||
}
|
}
|
||||||
|
|
||||||
filteredEndpoints := filterEndpointsWithHints(endpoints, tc.hintsAnnotation, tc.nodeLabels)
|
filteredEndpoints := filterEndpointsWithHints(endpoints, tc.hintsAnnotation, tc.nodeLabels)
|
||||||
|
Loading…
Reference in New Issue
Block a user