mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	proxier: simplify toplogy FilterLocalEndpoint function
Signed-off-by: Andrew Sy Kim <kim.andrewsy@gmail.com>
This commit is contained in:
		@@ -32,7 +32,7 @@ func FilterEndpoints(endpoints []Endpoint, svcInfo ServicePort, nodeLabels map[s
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if utilfeature.DefaultFeatureGate.Enabled(features.ServiceInternalTrafficPolicy) && svcInfo.NodeLocalInternal() {
 | 
						if utilfeature.DefaultFeatureGate.Enabled(features.ServiceInternalTrafficPolicy) && svcInfo.NodeLocalInternal() {
 | 
				
			||||||
		return filterEndpointsInternalTrafficPolicy(svcInfo.InternalTrafficPolicy(), endpoints)
 | 
							return FilterLocalEndpoint(endpoints)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if utilfeature.DefaultFeatureGate.Enabled(features.TopologyAwareHints) {
 | 
						if utilfeature.DefaultFeatureGate.Enabled(features.TopologyAwareHints) {
 | 
				
			||||||
@@ -85,20 +85,8 @@ func filterEndpointsWithHints(endpoints []Endpoint, hintsAnnotation string, node
 | 
				
			|||||||
	return filteredEndpoints
 | 
						return filteredEndpoints
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// filterEndpointsInternalTrafficPolicy returns the node local endpoints based
 | 
					// FilterLocalEndpoint returns the node local endpoints
 | 
				
			||||||
// on configured InternalTrafficPolicy.
 | 
					func FilterLocalEndpoint(endpoints []Endpoint) []Endpoint {
 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// 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
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	var filteredEndpoints []Endpoint
 | 
						var filteredEndpoints []Endpoint
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Get all the local endpoints
 | 
						// 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
 | 
						return filteredEndpoints
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -335,93 +335,50 @@ func Test_filterEndpointsWithHints(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func Test_filterEndpointsInternalTrafficPolicy(t *testing.T) {
 | 
					func TestFilterLocalEndpoint(t *testing.T) {
 | 
				
			||||||
	cluster := v1.ServiceInternalTrafficPolicyCluster
 | 
					 | 
				
			||||||
	local := v1.ServiceInternalTrafficPolicyLocal
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	testCases := []struct {
 | 
						testCases := []struct {
 | 
				
			||||||
		name                  string
 | 
							name      string
 | 
				
			||||||
		internalTrafficPolicy *v1.ServiceInternalTrafficPolicyType
 | 
							endpoints []Endpoint
 | 
				
			||||||
		endpoints             []Endpoint
 | 
							expected  []Endpoint
 | 
				
			||||||
		expected              []Endpoint
 | 
					 | 
				
			||||||
		featureGateOn         bool
 | 
					 | 
				
			||||||
	}{
 | 
						}{
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			name:                  "no internalTrafficPolicy with empty endpoints",
 | 
								name:      "with empty endpoints",
 | 
				
			||||||
			internalTrafficPolicy: nil,
 | 
								endpoints: []Endpoint{},
 | 
				
			||||||
			endpoints:             []Endpoint{},
 | 
								expected:  nil,
 | 
				
			||||||
			expected:              []Endpoint{},
 | 
					 | 
				
			||||||
			featureGateOn:         true,
 | 
					 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			name:                  "no internalTrafficPolicy with non-empty endpoints",
 | 
								name: "all endpoints not local",
 | 
				
			||||||
			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,
 | 
					 | 
				
			||||||
			endpoints: []Endpoint{
 | 
								endpoints: []Endpoint{
 | 
				
			||||||
				&BaseEndpointInfo{Endpoint: "10.0.0.0:80", IsLocal: false},
 | 
									&BaseEndpointInfo{Endpoint: "10.0.0.0:80", IsLocal: false},
 | 
				
			||||||
				&BaseEndpointInfo{Endpoint: "10.0.0.1:80", IsLocal: false},
 | 
									&BaseEndpointInfo{Endpoint: "10.0.0.1:80", IsLocal: false},
 | 
				
			||||||
				&BaseEndpointInfo{Endpoint: "10.0.0.2:80", IsLocal: false},
 | 
					 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			expected:      nil,
 | 
								expected: nil,
 | 
				
			||||||
			featureGateOn: true,
 | 
					 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			name:                  "feature gate is off, internalTrafficPolicy is local with non-empty endpoints",
 | 
								name: "all endpoints are local",
 | 
				
			||||||
			internalTrafficPolicy: &local,
 | 
					 | 
				
			||||||
			endpoints: []Endpoint{
 | 
								endpoints: []Endpoint{
 | 
				
			||||||
				&BaseEndpointInfo{Endpoint: "10.0.0.0:80", IsLocal: true},
 | 
									&BaseEndpointInfo{Endpoint: "10.0.0.0:80", IsLocal: true},
 | 
				
			||||||
				&BaseEndpointInfo{Endpoint: "10.0.0.1:80", IsLocal: false},
 | 
									&BaseEndpointInfo{Endpoint: "10.0.0.1:80", IsLocal: true},
 | 
				
			||||||
				&BaseEndpointInfo{Endpoint: "10.0.0.2:80", IsLocal: false},
 | 
								},
 | 
				
			||||||
 | 
								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{
 | 
								expected: []Endpoint{
 | 
				
			||||||
				&BaseEndpointInfo{Endpoint: "10.0.0.0:80", IsLocal: true},
 | 
									&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 {
 | 
						for _, tc := range testCases {
 | 
				
			||||||
		defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.ServiceInternalTrafficPolicy, tc.featureGateOn)()
 | 
					 | 
				
			||||||
		t.Run(tc.name, func(t *testing.T) {
 | 
							t.Run(tc.name, func(t *testing.T) {
 | 
				
			||||||
			filteredEndpoint := filterEndpointsInternalTrafficPolicy(tc.internalTrafficPolicy, tc.endpoints)
 | 
								filteredEndpoint := FilterLocalEndpoint(tc.endpoints)
 | 
				
			||||||
			if !reflect.DeepEqual(filteredEndpoint, tc.expected) {
 | 
								if !reflect.DeepEqual(filteredEndpoint, tc.expected) {
 | 
				
			||||||
				t.Errorf("expected %v, got %v", tc.expected, filteredEndpoint)
 | 
									t.Errorf("expected %v, got %v", tc.expected, filteredEndpoint)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user