diff --git a/pkg/controlplane/reconcilers/BUILD b/pkg/controlplane/reconcilers/BUILD index 55146b8b1fb..6e108dfb3fc 100644 --- a/pkg/controlplane/reconcilers/BUILD +++ b/pkg/controlplane/reconcilers/BUILD @@ -14,6 +14,7 @@ go_library( visibility = ["//visibility:public"], deps = [ "//pkg/api/v1/endpoints:go_default_library", + "//pkg/features:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/discovery/v1beta1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/equality:go_default_library", @@ -23,6 +24,7 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/endpoints/request:go_default_library", "//staging/src/k8s.io/apiserver/pkg/registry/rest:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/typed/discovery/v1beta1:go_default_library", "//staging/src/k8s.io/client-go/util/retry:go_default_library", diff --git a/pkg/controlplane/reconcilers/endpointsadapter.go b/pkg/controlplane/reconcilers/endpointsadapter.go index 54e74c15bae..99d8f6b62a5 100644 --- a/pkg/controlplane/reconcilers/endpointsadapter.go +++ b/pkg/controlplane/reconcilers/endpointsadapter.go @@ -23,8 +23,10 @@ import ( apiequality "k8s.io/apimachinery/pkg/api/equality" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + utilfeature "k8s.io/apiserver/pkg/util/feature" corev1client "k8s.io/client-go/kubernetes/typed/core/v1" discoveryclient "k8s.io/client-go/kubernetes/typed/discovery/v1beta1" + "k8s.io/kubernetes/pkg/features" utilnet "k8s.io/utils/net" ) @@ -166,17 +168,22 @@ func getEndpointsFromAddresses(addresses []corev1.EndpointAddress, addressType d // endpointFromAddress generates an Endpoint from an EndpointAddress resource. func endpointFromAddress(address corev1.EndpointAddress, ready bool) discovery.Endpoint { - topology := map[string]string{} - if address.NodeName != nil { - topology["kubernetes.io/hostname"] = *address.NodeName - } - - return discovery.Endpoint{ + ep := discovery.Endpoint{ Addresses: []string{address.IP}, Conditions: discovery.EndpointConditions{Ready: &ready}, TargetRef: address.TargetRef, - Topology: topology, } + + if address.NodeName != nil { + ep.Topology = map[string]string{ + "kubernetes.io/hostname": *address.NodeName, + } + if utilfeature.DefaultFeatureGate.Enabled(features.EndpointSliceNodeName) { + ep.NodeName = address.NodeName + } + } + + return ep } // allAddressesIPv6 returns true if all provided addresses are IPv6. diff --git a/pkg/controlplane/reconcilers/endpointsadapter_test.go b/pkg/controlplane/reconcilers/endpointsadapter_test.go index d8febe69a3e..13a34aa5ffb 100644 --- a/pkg/controlplane/reconcilers/endpointsadapter_test.go +++ b/pkg/controlplane/reconcilers/endpointsadapter_test.go @@ -232,7 +232,7 @@ func TestEndpointsAdapterUpdate(t *testing.T) { // with one that has an IPv4 address type. endpoints4, _ := generateEndpointsAndSlice("foo", "testing", []int{80}, []string{"10.1.2.7", "10.1.2.8"}) _, epSlice4IP := generateEndpointsAndSlice("foo", "testing", []int{80}, []string{"10.1.2.7", "10.1.2.8"}) - epSlice4IP.AddressType = discovery.AddressTypeIP + epSlice4IP.AddressType = discovery.AddressType("IP") _, epSlice4IPv4 := generateEndpointsAndSlice("foo", "testing", []int{80}, []string{"10.1.2.7", "10.1.2.8"}) testCases := map[string]struct {