mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-09-22 10:27:56 +00:00
kube-proxy: remove ServiceTopology implementation
Signed-off-by: Andrew Sy Kim <kim.andrewsy@gmail.com>
This commit is contained in:
@@ -31,10 +31,6 @@ func FilterEndpoints(endpoints []Endpoint, svcInfo ServicePort, nodeLabels map[s
|
||||
return endpoints
|
||||
}
|
||||
|
||||
if utilfeature.DefaultFeatureGate.Enabled(features.ServiceTopology) {
|
||||
return deprecatedTopologyFilter(nodeLabels, svcInfo.TopologyKeys(), endpoints)
|
||||
}
|
||||
|
||||
if utilfeature.DefaultFeatureGate.Enabled(features.ServiceInternalTrafficPolicy) && svcInfo.NodeLocalInternal() {
|
||||
return filterEndpointsInternalTrafficPolicy(svcInfo.InternalTrafficPolicy(), endpoints)
|
||||
}
|
||||
@@ -89,67 +85,6 @@ func filterEndpointsWithHints(endpoints []Endpoint, hintsAnnotation string, node
|
||||
return filteredEndpoints
|
||||
}
|
||||
|
||||
// deprecatedTopologyFilter returns the appropriate endpoints based on the
|
||||
// cluster topology. This will be removed in an upcoming release along with the
|
||||
// ServiceTopology feature gate.
|
||||
//
|
||||
// This uses the current node's labels, which contain topology information, and
|
||||
// the required topologyKeys to find appropriate endpoints. If both the endpoint's
|
||||
// topology and the current node have matching values for topologyKeys[0], the
|
||||
// endpoint will be chosen. If no endpoints are chosen, toplogyKeys[1] will be
|
||||
// considered, and so on. If either the node or the endpoint do not have values
|
||||
// for a key, it is considered to not match.
|
||||
//
|
||||
// If topologyKeys is specified, but no endpoints are chosen for any key, the
|
||||
// service has no viable endpoints for clients on this node, and connections
|
||||
// should fail.
|
||||
//
|
||||
// The special key "*" may be used as the last entry in topologyKeys to indicate
|
||||
// "any endpoint" is acceptable.
|
||||
//
|
||||
// If topologyKeys is not specified or empty, no topology constraints will be
|
||||
// applied and this will return all endpoints.
|
||||
func deprecatedTopologyFilter(nodeLabels map[string]string, topologyKeys []string, endpoints []Endpoint) []Endpoint {
|
||||
// Do not filter endpoints if service has no topology keys.
|
||||
if len(topologyKeys) == 0 {
|
||||
return endpoints
|
||||
}
|
||||
|
||||
filteredEndpoints := []Endpoint{}
|
||||
|
||||
if len(nodeLabels) == 0 {
|
||||
if topologyKeys[len(topologyKeys)-1] == v1.TopologyKeyAny {
|
||||
// edge case: include all endpoints if topology key "Any" specified
|
||||
// when we cannot determine current node's topology.
|
||||
return endpoints
|
||||
}
|
||||
// edge case: do not include any endpoints if topology key "Any" is
|
||||
// not specified when we cannot determine current node's topology.
|
||||
return filteredEndpoints
|
||||
}
|
||||
|
||||
for _, key := range topologyKeys {
|
||||
if key == v1.TopologyKeyAny {
|
||||
return endpoints
|
||||
}
|
||||
topologyValue, found := nodeLabels[key]
|
||||
if !found {
|
||||
continue
|
||||
}
|
||||
|
||||
for _, ep := range endpoints {
|
||||
topology := ep.GetTopology()
|
||||
if value, found := topology[key]; found && value == topologyValue {
|
||||
filteredEndpoints = append(filteredEndpoints, ep)
|
||||
}
|
||||
}
|
||||
if len(filteredEndpoints) > 0 {
|
||||
return filteredEndpoints
|
||||
}
|
||||
}
|
||||
return filteredEndpoints
|
||||
}
|
||||
|
||||
// filterEndpointsInternalTrafficPolicy returns the node local endpoints based
|
||||
// on configured InternalTrafficPolicy.
|
||||
//
|
||||
|
Reference in New Issue
Block a user