mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-05 10:19:50 +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() {
|
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)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user