diff --git a/controller/api/destination/endpoint_translator.go b/controller/api/destination/endpoint_translator.go index 65bc4d4f4bb7e..e26cfabd542d1 100644 --- a/controller/api/destination/endpoint_translator.go +++ b/controller/api/destination/endpoint_translator.go @@ -1,7 +1,6 @@ package destination import ( - "context" "fmt" "strconv" "strings" @@ -13,8 +12,7 @@ import ( "github.com/linkerd/linkerd2/pkg/k8s" logging "github.com/sirupsen/logrus" corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/client-go/kubernetes" + coreinformers "k8s.io/client-go/informers/core/v1" ) const ( @@ -39,13 +37,12 @@ type endpointTranslator struct { } func newEndpointTranslator( - ctx context.Context, controllerNS string, identityTrustDomain string, enableH2Upgrade bool, service string, srcNodeName string, - k8sClient kubernetes.Interface, + nodes coreinformers.NodeInformer, stream pb.Destination_GetServer, log *logging.Entry, ) *endpointTranslator { @@ -54,7 +51,7 @@ func newEndpointTranslator( "service": service, }) - nodeTopologyLabels, err := getK8sNodeTopology(ctx, k8sClient, srcNodeName) + nodeTopologyLabels, err := getK8sNodeTopology(nodes, srcNodeName) if err != nil { log.Errorf("Failed to get node topology for node %s: %s", srcNodeName, err) } @@ -371,9 +368,9 @@ func toWeightedAddr(address watcher.Address, opaquePorts map[uint32]struct{}, en }, nil } -func getK8sNodeTopology(ctx context.Context, k8sClient kubernetes.Interface, srcNode string) (map[string]string, error) { +func getK8sNodeTopology(nodes coreinformers.NodeInformer, srcNode string) (map[string]string, error) { nodeTopology := make(map[string]string) - node, err := k8sClient.CoreV1().Nodes().Get(ctx, srcNode, metav1.GetOptions{}) + node, err := nodes.Lister().Get(srcNode) if err != nil { return nodeTopology, err } diff --git a/controller/api/destination/endpoint_translator_test.go b/controller/api/destination/endpoint_translator_test.go index 35c5679a4ca4e..77be5e817ea88 100644 --- a/controller/api/destination/endpoint_translator_test.go +++ b/controller/api/destination/endpoint_translator_test.go @@ -1,7 +1,6 @@ package destination import ( - "context" "fmt" "reflect" "sort" @@ -142,13 +141,12 @@ metadata: mockGetServer := &mockDestinationGetServer{updatesReceived: []*pb.Update{}} translator := newEndpointTranslator( - context.Background(), "linkerd", "trust.domain", true, "service-name.service-ns", "test-123", - k8sAPI.Client, + k8sAPI.Node(), mockGetServer, logging.WithField("test", t.Name()), ) diff --git a/controller/api/destination/server.go b/controller/api/destination/server.go index 408d073d4262a..1f7ef3e4dc163 100644 --- a/controller/api/destination/server.go +++ b/controller/api/destination/server.go @@ -17,6 +17,7 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/peer" "google.golang.org/grpc/status" + coreinformers "k8s.io/client-go/informers/core/v1" ) type ( @@ -25,6 +26,7 @@ type ( profiles *watcher.ProfileWatcher trafficSplits *watcher.TrafficSplitWatcher ips *watcher.IPWatcher + nodes coreinformers.NodeInformer enableH2Upgrade bool controllerNS string @@ -73,6 +75,7 @@ func NewServer( profiles, trafficSplits, ips, + k8sAPI.Node(), enableH2Upgrade, controllerNS, identityTrustDomain, @@ -103,13 +106,12 @@ func (s *server) Get(dest *pb.GetDestination, stream pb.Destination_GetServer) e } translator := newEndpointTranslator( - stream.Context(), s.controllerNS, s.identityTrustDomain, s.enableH2Upgrade, dest.GetPath(), token.NodeName, - s.k8sAPI.Client, + s.nodes, stream, log, ) diff --git a/controller/api/destination/server_test.go b/controller/api/destination/server_test.go index 367f675fc0bcb..8a11f214e49f5 100644 --- a/controller/api/destination/server_test.go +++ b/controller/api/destination/server_test.go @@ -219,6 +219,7 @@ spec: profiles, trafficSplits, ips, + k8sAPI.Node(), true, "linkerd", "trust.domain", diff --git a/controller/cmd/destination/main.go b/controller/cmd/destination/main.go index b34c22f01d98e..02ff3ae9f8bf3 100644 --- a/controller/cmd/destination/main.go +++ b/controller/cmd/destination/main.go @@ -84,14 +84,14 @@ func Main(args []string) { ctx, *kubeConfigPath, true, - k8s.Endpoint, k8s.ES, k8s.Pod, k8s.RS, k8s.Svc, k8s.SP, k8s.TS, k8s.Job, k8s.NS, + k8s.Endpoint, k8s.ES, k8s.Pod, k8s.RS, k8s.Svc, k8s.SP, k8s.TS, k8s.Job, k8s.NS, k8s.Node, ) } else { k8sAPI, err = k8s.InitializeAPI( ctx, *kubeConfigPath, true, - k8s.Endpoint, k8s.Pod, k8s.RS, k8s.Svc, k8s.SP, k8s.TS, k8s.Job, k8s.NS, + k8s.Endpoint, k8s.Pod, k8s.RS, k8s.Svc, k8s.SP, k8s.TS, k8s.Job, k8s.NS, k8s.Node, ) } if err != nil {