diff --git a/pkg/proxy/topology.go b/pkg/proxy/topology.go index 0e0e85461a2..c66c721b72a 100644 --- a/pkg/proxy/topology.go +++ b/pkg/proxy/topology.go @@ -32,7 +32,7 @@ func FilterEndpoints(endpoints []Endpoint, svcInfo ServicePort, nodeLabels map[s } if utilfeature.DefaultFeatureGate.Enabled(features.ServiceInternalTrafficPolicy) && svcInfo.NodeLocalInternal() { - return filterEndpointsInternalTrafficPolicy(svcInfo.InternalTrafficPolicy(), endpoints) + return FilterLocalEndpoint(endpoints) } if utilfeature.DefaultFeatureGate.Enabled(features.TopologyAwareHints) { @@ -85,20 +85,8 @@ func filterEndpointsWithHints(endpoints []Endpoint, hintsAnnotation string, node return filteredEndpoints } -// filterEndpointsInternalTrafficPolicy returns the node local endpoints based -// on configured InternalTrafficPolicy. -// -// If ServiceInternalTrafficPolicy feature gate is off, returns the original -// EndpointSlice. -// Otherwise, if InternalTrafficPolicy is Local, only return the node local endpoints. -func filterEndpointsInternalTrafficPolicy(internalTrafficPolicy *v1.ServiceInternalTrafficPolicyType, endpoints []Endpoint) []Endpoint { - if !utilfeature.DefaultFeatureGate.Enabled(features.ServiceInternalTrafficPolicy) { - return endpoints - } - if internalTrafficPolicy == nil || *internalTrafficPolicy == v1.ServiceInternalTrafficPolicyCluster { - return endpoints - } - +// FilterLocalEndpoint returns the node local endpoints +func FilterLocalEndpoint(endpoints []Endpoint) []Endpoint { var filteredEndpoints []Endpoint // Get all the local endpoints @@ -108,7 +96,5 @@ func filterEndpointsInternalTrafficPolicy(internalTrafficPolicy *v1.ServiceInter } } - // When internalTrafficPolicy is Local, only return the node local - // endpoints return filteredEndpoints } diff --git a/pkg/proxy/topology_test.go b/pkg/proxy/topology_test.go index 8c207cfdd9e..7d686cf2a47 100644 --- a/pkg/proxy/topology_test.go +++ b/pkg/proxy/topology_test.go @@ -335,93 +335,50 @@ func Test_filterEndpointsWithHints(t *testing.T) { } } -func Test_filterEndpointsInternalTrafficPolicy(t *testing.T) { - cluster := v1.ServiceInternalTrafficPolicyCluster - local := v1.ServiceInternalTrafficPolicyLocal - +func TestFilterLocalEndpoint(t *testing.T) { testCases := []struct { - name string - internalTrafficPolicy *v1.ServiceInternalTrafficPolicyType - endpoints []Endpoint - expected []Endpoint - featureGateOn bool + name string + endpoints []Endpoint + expected []Endpoint }{ { - name: "no internalTrafficPolicy with empty endpoints", - internalTrafficPolicy: nil, - endpoints: []Endpoint{}, - expected: []Endpoint{}, - featureGateOn: true, + name: "with empty endpoints", + endpoints: []Endpoint{}, + expected: nil, }, { - name: "no internalTrafficPolicy with non-empty endpoints", - internalTrafficPolicy: nil, - endpoints: []Endpoint{ - &BaseEndpointInfo{Endpoint: "10.0.0.0:80", IsLocal: true}, - &BaseEndpointInfo{Endpoint: "10.0.0.1:80", IsLocal: false}, - }, - expected: []Endpoint{ - &BaseEndpointInfo{Endpoint: "10.0.0.0:80", IsLocal: true}, - &BaseEndpointInfo{Endpoint: "10.0.0.1:80", IsLocal: false}, - }, - featureGateOn: true, - }, - { - name: "internalTrafficPolicy is cluster", - internalTrafficPolicy: &cluster, - endpoints: []Endpoint{ - &BaseEndpointInfo{Endpoint: "10.0.0.0:80", IsLocal: true}, - &BaseEndpointInfo{Endpoint: "10.0.0.1:80", IsLocal: false}, - }, - expected: []Endpoint{ - &BaseEndpointInfo{Endpoint: "10.0.0.0:80", IsLocal: true}, - &BaseEndpointInfo{Endpoint: "10.0.0.1:80", IsLocal: false}, - }, - featureGateOn: true, - }, - { - name: "internalTrafficPolicy is local with non-zero local endpoints", - internalTrafficPolicy: &local, - endpoints: []Endpoint{ - &BaseEndpointInfo{Endpoint: "10.0.0.0:80", IsLocal: true}, - &BaseEndpointInfo{Endpoint: "10.0.0.1:80", IsLocal: false}, - }, - expected: []Endpoint{ - &BaseEndpointInfo{Endpoint: "10.0.0.0:80", IsLocal: true}, - }, - featureGateOn: true, - }, - { - name: "internalTrafficPolicy is local with zero local endpoints", - internalTrafficPolicy: &local, + name: "all endpoints not local", endpoints: []Endpoint{ &BaseEndpointInfo{Endpoint: "10.0.0.0:80", IsLocal: false}, &BaseEndpointInfo{Endpoint: "10.0.0.1:80", IsLocal: false}, - &BaseEndpointInfo{Endpoint: "10.0.0.2:80", IsLocal: false}, }, - expected: nil, - featureGateOn: true, + expected: nil, }, { - name: "feature gate is off, internalTrafficPolicy is local with non-empty endpoints", - internalTrafficPolicy: &local, + name: "all endpoints are local", endpoints: []Endpoint{ &BaseEndpointInfo{Endpoint: "10.0.0.0:80", IsLocal: true}, - &BaseEndpointInfo{Endpoint: "10.0.0.1:80", IsLocal: false}, - &BaseEndpointInfo{Endpoint: "10.0.0.2:80", IsLocal: false}, + &BaseEndpointInfo{Endpoint: "10.0.0.1:80", IsLocal: true}, + }, + expected: []Endpoint{ + &BaseEndpointInfo{Endpoint: "10.0.0.0:80", IsLocal: true}, + &BaseEndpointInfo{Endpoint: "10.0.0.1:80", IsLocal: true}, + }, + }, + { + name: "some endpoints are local", + endpoints: []Endpoint{ + &BaseEndpointInfo{Endpoint: "10.0.0.0:80", IsLocal: true}, + &BaseEndpointInfo{Endpoint: "10.0.0.1:80", IsLocal: false}, }, expected: []Endpoint{ &BaseEndpointInfo{Endpoint: "10.0.0.0:80", IsLocal: true}, - &BaseEndpointInfo{Endpoint: "10.0.0.1:80", IsLocal: false}, - &BaseEndpointInfo{Endpoint: "10.0.0.2:80", IsLocal: false}, }, - featureGateOn: false, }, } for _, tc := range testCases { - defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.ServiceInternalTrafficPolicy, tc.featureGateOn)() t.Run(tc.name, func(t *testing.T) { - filteredEndpoint := filterEndpointsInternalTrafficPolicy(tc.internalTrafficPolicy, tc.endpoints) + filteredEndpoint := FilterLocalEndpoint(tc.endpoints) if !reflect.DeepEqual(filteredEndpoint, tc.expected) { t.Errorf("expected %v, got %v", tc.expected, filteredEndpoint) }