diff --git a/controller/api/destination/endpoint_translator.go b/controller/api/destination/endpoint_translator.go index 9c75e8fa4e564..181825e2b972b 100644 --- a/controller/api/destination/endpoint_translator.go +++ b/controller/api/destination/endpoint_translator.go @@ -444,6 +444,7 @@ func (et *endpointTranslator) sendClientAdd(set watcher.AddressSet) { Addr: addr, Weight: defaultWeight, AuthorityOverride: authOverride, + MetricLabels: map[string]string{}, } if address.Identity != "" { @@ -465,12 +466,20 @@ func (et *endpointTranslator) sendClientAdd(set watcher.AddressSet) { } } - if et.extEndpointZoneWeights { - // EXPERIMENTAL: Use the endpoint weight field to indicate zonal - // preference so that local endoints are more heavily weighted. - if et.nodeTopologyZone != "" && address.Zone != nil && *address.Zone == et.nodeTopologyZone { - wa.Weight *= 10 + if et.nodeTopologyZone != "" && address.Zone != nil { + if *address.Zone == et.nodeTopologyZone { + wa.MetricLabels["zone_locality"] = "local" + + if et.extEndpointZoneWeights { + // EXPERIMENTAL: Use the endpoint weight field to indicate zonal + // preference so that local endoints are more heavily weighted. + wa.Weight *= 10 + } + } else { + wa.MetricLabels["zone_locality"] = "remote" } + } else { + wa.MetricLabels["zone_locality"] = "unknown" } addrs = append(addrs, wa) diff --git a/controller/api/destination/endpoint_translator_test.go b/controller/api/destination/endpoint_translator_test.go index 4b8f856a20bf3..e40458a0c7d4a 100644 --- a/controller/api/destination/endpoint_translator_test.go +++ b/controller/api/destination/endpoint_translator_test.go @@ -485,6 +485,7 @@ func TestEndpointTranslatorForPods(t *testing.T) { "serviceaccount": "serviceaccount-name", "control_plane_ns": "linkerd", "zone": "", + "zone_locality": "unknown", } if diff := deep.Equal(actualAddedAddress1MetricLabels, expectedAddedAddress1MetricLabels); diff != nil { t.Fatalf("Expected global metric labels sent to be [%v] but was [%v]", expectedAddedAddress1MetricLabels, actualAddedAddress1MetricLabels) @@ -658,6 +659,7 @@ func TestEndpointTranslatorExternalWorkloads(t *testing.T) { expectedAddedAddress1MetricLabels := map[string]string{ "external_workload": "ew-1", "zone": "", + "zone_locality": "unknown", "workloadgroup": "wg-name", } if diff := deep.Equal(actualAddedAddress1MetricLabels, expectedAddedAddress1MetricLabels); diff != nil {