mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-05 02:09:56 +00:00
proxier: simplify toplogy FilterLocalEndpoint function
Signed-off-by: Andrew Sy Kim <kim.andrewsy@gmail.com>
This commit is contained in:
parent
7ed2ed1b45
commit
be92fc83e2
@ -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
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user