Repository: linkerd/linkerd2
Pull request #13855 (2025-03-25 03:18:41)

build(deps): bump google.golang.org/protobuf from 1.36.5 to 1.36.6
Bumps google.golang.org/protobuf from 1.36.5 to 1.36.6.


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=google.golang.org/protobuf&package-manager=go_modules&previous-version=1.36.5&new-version=1.36.6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)


</details>


Patch:
diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml
index 011a611d9..e4e580cb2 100644
--- a/.github/workflows/go.yml
+++ b/.github/workflows/go.yml
@@ -9,7 +9,7 @@ jobs:
     runs-on: ubuntu-24.04
     steps:
       - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
-      - uses: tj-actions/changed-files@6482371e862961013f9584015cf362c4f664b20c
+      - uses: tj-actions/changed-files@27ae6b33eaed7bf87272fdeb9f1c54f9facc9d99
         id: changed
         with:
           files: |
diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml
index a6c80a589..6f544cf48 100644
--- a/.github/workflows/integration.yml
+++ b/.github/workflows/integration.yml
@@ -29,7 +29,7 @@ jobs:
       - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
       - id: tag
         run: echo "tag=$(CI_FORCE_CLEAN=1 bin/root-tag)" >> "$GITHUB_OUTPUT"
-      - uses: tj-actions/changed-files@6482371e862961013f9584015cf362c4f664b20c
+      - uses: tj-actions/changed-files@27ae6b33eaed7bf87272fdeb9f1c54f9facc9d99
         id: core
         with:
           files: |
diff --git a/Cargo.lock b/Cargo.lock
index e355527a3..ffc8d21c2 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -975,14 +975,15 @@ dependencies = [
 
 [[package]]
 name = "iana-time-zone"
-version = "0.1.61"
+version = "0.1.62"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220"
+checksum = "b2fd658b06e56721792c5df4475705b6cda790e9298d19d2f8af083457bcd127"
 dependencies = [
  "android_system_properties",
  "core-foundation-sys",
  "iana-time-zone-haiku",
  "js-sys",
+ "log",
  "wasm-bindgen",
  "windows-core",
 ]
diff --git a/charts/linkerd-control-plane/values.yaml b/charts/linkerd-control-plane/values.yaml
index 59c29765d..867d7c0bc 100644
--- a/charts/linkerd-control-plane/values.yaml
+++ b/charts/linkerd-control-plane/values.yaml
@@ -280,6 +280,10 @@ proxy:
       # -- The maximum duration for a response stream (i.e. before it will be
       # reinitialized).
       lifetime: "1h"
+  # Configures proxy metrics
+  metrics:
+      # -- Whether or not to export hostname labels in outbound request metrics.
+      hostnameLabels: false
   inbound:
     server:
       http2:
diff --git a/charts/partials/templates/_proxy.tpl b/charts/partials/templates/_proxy.tpl
index 612071307..7fa609f90 100644
--- a/charts/partials/templates/_proxy.tpl
+++ b/charts/partials/templates/_proxy.tpl
@@ -142,6 +142,8 @@ env:
   value: 30s
 - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
   value: 30s
+- name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+  value: {{ .Values.proxy.metrics.hostnameLabels | quote }}
 {{- /* Configure inbound and outbound parameters, e.g. for HTTP/2 servers. */}}
 {{ range $proxyK, $proxyV := (dict "inbound" .Values.proxy.inbound "outbound" .Values.proxy.outbound) -}}
 {{   range $scopeK, $scopeV := $proxyV -}}
diff --git a/cli/cmd/inject.go b/cli/cmd/inject.go
index e22114c47..c24c145a2 100644
--- a/cli/cmd/inject.go
+++ b/cli/cmd/inject.go
@@ -458,6 +458,10 @@ func getOverrideAnnotations(values *linkerd2.Values, base *linkerd2.Values) map[
 		overrideAnnotations[k8s.ProxyEnableExternalProfilesAnnotation] = strconv.FormatBool(proxy.EnableExternalProfiles)
 	}
 
+	if proxy.Metrics.HostnameLabels != baseProxy.Metrics.HostnameLabels {
+		overrideAnnotations[k8s.ProxyEnableHostnameLabels] = strconv.FormatBool(proxy.Metrics.HostnameLabels)
+	}
+
 	if proxy.IsIngress != baseProxy.IsIngress {
 		overrideAnnotations[k8s.ProxyInjectAnnotation] = k8s.ProxyInjectIngress
 	}
diff --git a/controller/proxy-injector/fake/data/pod-cpu-ratio.json b/controller/proxy-injector/fake/data/pod-cpu-ratio.json
index 5b33a8e77..6aac273e3 100644
--- a/controller/proxy-injector/fake/data/pod-cpu-ratio.json
+++ b/controller/proxy-injector/fake/data/pod-cpu-ratio.json
@@ -290,6 +290,10 @@
                     "name": "LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT",
                     "value": "30s"
                 },
+                {
+                  "name": "LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS",
+                  "value": "false"
+                },
                 {
                     "name": "LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL",
                     "value": "10s"
diff --git a/controller/proxy-injector/fake/data/pod-log-level.json b/controller/proxy-injector/fake/data/pod-log-level.json
index 9026c0b14..24d242e44 100644
--- a/controller/proxy-injector/fake/data/pod-log-level.json
+++ b/controller/proxy-injector/fake/data/pod-log-level.json
@@ -282,6 +282,10 @@
           "name": "LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT",
           "value": "30s"
         },
+        {
+          "name": "LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS",
+          "value": "false"
+        },
         {
           "name": "LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL",
           "value": "10s"
diff --git a/controller/proxy-injector/fake/data/pod-with-custom-debug.patch.json b/controller/proxy-injector/fake/data/pod-with-custom-debug.patch.json
index 779fed8e0..84fd0423e 100644
--- a/controller/proxy-injector/fake/data/pod-with-custom-debug.patch.json
+++ b/controller/proxy-injector/fake/data/pod-with-custom-debug.patch.json
@@ -306,6 +306,10 @@
           "name": "LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT",
           "value": "30s"
         },
+        {
+          "name": "LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS",
+          "value": "false"
+        },
         {
           "name": "LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL",
           "value": "10s"
diff --git a/controller/proxy-injector/fake/data/pod-with-debug.patch.json b/controller/proxy-injector/fake/data/pod-with-debug.patch.json
index 19c5ce354..96dba83b7 100644
--- a/controller/proxy-injector/fake/data/pod-with-debug.patch.json
+++ b/controller/proxy-injector/fake/data/pod-with-debug.patch.json
@@ -306,6 +306,10 @@
           "name": "LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT",
           "value": "30s"
         },
+        {
+          "name": "LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS",
+          "value": "false"
+        },
         {
           "name": "LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL",
           "value": "10s"
diff --git a/controller/proxy-injector/fake/data/pod-with-ns-annotations.patch.json b/controller/proxy-injector/fake/data/pod-with-ns-annotations.patch.json
index 1dbf0fec2..54309b899 100644
--- a/controller/proxy-injector/fake/data/pod-with-ns-annotations.patch.json
+++ b/controller/proxy-injector/fake/data/pod-with-ns-annotations.patch.json
@@ -292,6 +292,10 @@
           "name": "LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT",
           "value": "30s"
         },
+        {
+          "name": "LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS",
+          "value": "false"
+        },
         {
           "name": "LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL",
           "value": "10s"
diff --git a/controller/proxy-injector/fake/data/pod.patch.json b/controller/proxy-injector/fake/data/pod.patch.json
index af2239ae3..017873c85 100644
--- a/controller/proxy-injector/fake/data/pod.patch.json
+++ b/controller/proxy-injector/fake/data/pod.patch.json
@@ -282,6 +282,10 @@
           "name": "LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT",
           "value": "30s"
         },
+        {
+          "name": "LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS",
+          "value": "false"
+        },
         {
           "name": "LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL",
           "value": "10s"
diff --git a/go.mod b/go.mod
index 4189cb85c..35ad22634 100644
--- a/go.mod
+++ b/go.mod
@@ -39,7 +39,7 @@ require (
 	golang.org/x/tools v0.31.0
 	google.golang.org/grpc v1.71.0
 	google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1
-	google.golang.org/protobuf v1.36.5
+	google.golang.org/protobuf v1.36.6
 	gopkg.in/yaml.v2 v2.4.0
 	helm.sh/helm/v3 v3.17.2
 	k8s.io/api v0.32.3
diff --git a/go.sum b/go.sum
index 637c21b18..e0ff2d5e8 100644
--- a/go.sum
+++ b/go.sum
@@ -711,8 +711,8 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
 google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
 google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
 google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
-google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM=
-google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
+google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
+google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
 gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
diff --git a/pkg/charts/linkerd2/values.go b/pkg/charts/linkerd2/values.go
index cc7b5e733..619d9758c 100644
--- a/pkg/charts/linkerd2/values.go
+++ b/pkg/charts/linkerd2/values.go
@@ -155,6 +155,7 @@ type (
 		ReadinessProbe                       *Probe           `json:"readinessProbe"`
 		LivenessProbe                        *Probe           `json:"livenessProbe"`
 		Control                              *ProxyControl    `json:"control"`
+		Metrics                              *ProxyMetrics    `json:"metrics"`
 
 		AdditionalEnv   []corev1.EnvVar `json:"additionalEnv"`
 		ExperimentalEnv []corev1.EnvVar `json:"experimentalEnv"`
@@ -182,6 +183,10 @@ type (
 		Lifetime       string `json:"lifetime"`
 	}
 
+	ProxyMetrics struct {
+		HostnameLabels bool `json:"hostnameLabels"`
+	}
+
 	ProxyRuntime struct {
 		Workers ProxyRuntimeWorkers `json:"workers,omitempty"`
 	}
diff --git a/pkg/inject/inject.go b/pkg/inject/inject.go
index 3e9bbfcaf..618611bf4 100644
--- a/pkg/inject/inject.go
+++ b/pkg/inject/inject.go
@@ -69,6 +69,7 @@ var (
 		k8s.ProxyIgnoreInboundPortsAnnotation,
 		k8s.ProxyOpaquePortsAnnotation,
 		k8s.ProxyIgnoreOutboundPortsAnnotation,
+		k8s.ProxyEnableHostnameLabels,
 		k8s.ProxyOutboundConnectTimeout,
 		k8s.ProxyInboundConnectTimeout,
 		k8s.ProxyAwait,
@@ -276,6 +277,13 @@ func applyAnnotationOverrides(values *l5dcharts.Values, annotations map[string]s
 		values.Proxy.RequireIdentityOnInboundPorts = override
 	}
 
+	if override, ok := annotations[k8s.ProxyEnableHostnameLabels]; ok {
+		value, err := strconv.ParseBool(override)
+		if err == nil {
+			values.Proxy.Metrics.HostnameLabels = value
+		}
+	}
+
 	if override, ok := annotations[k8s.ProxyOutboundConnectTimeout]; ok {
 		duration, err := time.ParseDuration(override)
 		if err != nil {
diff --git a/pkg/k8s/labels.go b/pkg/k8s/labels.go
index 3f2a76a71..3015d4574 100644
--- a/pkg/k8s/labels.go
+++ b/pkg/k8s/labels.go
@@ -237,6 +237,10 @@ const (
 	// to always require identity on inbound ports
 	ProxyRequireIdentityOnInboundPortsAnnotation = ProxyConfigAnnotationsPrefix + "/proxy-require-identity-inbound-ports"
 
+	// ProxyOutboundConnectTimeout can be used to configure the outbound TCP connection
+	// timeout in the proxy
+	ProxyEnableHostnameLabels = ProxyConfigAnnotationsPrefix + "/proxy-metrics-hostname-labels"
+
 	// ProxyOutboundConnectTimeout can be used to configure the outbound TCP connection
 	// timeout in the proxy
 	ProxyOutboundConnectTimeout = ProxyConfigAnnotationsPrefix + "/proxy-outbound-connect-timeout"


Test patch:
diff --git a/cli/cmd/install_test.go b/cli/cmd/install_test.go
index edb55c44a..cc126b3a0 100644
--- a/cli/cmd/install_test.go
+++ b/cli/cmd/install_test.go
@@ -113,6 +113,9 @@ func TestRender(t *testing.T) {
 			OpaquePorts:          "25,443,587,3306,5432,11211",
 			Await:                true,
 			DefaultInboundPolicy: "default-allow-policy",
+			Metrics: &charts.ProxyMetrics{
+				HostnameLabels: false,
+			},
 			LivenessProbe: &charts.Probe{
 				InitialDelaySeconds: 10,
 				TimeoutSeconds:      1,
diff --git a/cli/cmd/testdata/inject-filepath/expected/injected_nginx.yaml b/cli/cmd/testdata/inject-filepath/expected/injected_nginx.yaml
index 3af60c568..6d5dd796b 100644
--- a/cli/cmd/testdata/inject-filepath/expected/injected_nginx.yaml
+++ b/cli/cmd/testdata/inject-filepath/expected/injected_nginx.yaml
@@ -101,6 +101,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: 10s
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/inject-filepath/expected/injected_nginx_redis.yaml b/cli/cmd/testdata/inject-filepath/expected/injected_nginx_redis.yaml
index 6192ebf48..332d13d02 100644
--- a/cli/cmd/testdata/inject-filepath/expected/injected_nginx_redis.yaml
+++ b/cli/cmd/testdata/inject-filepath/expected/injected_nginx_redis.yaml
@@ -101,6 +101,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: 10s
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -345,6 +347,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: 10s
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/inject-filepath/expected/injected_redis.yaml b/cli/cmd/testdata/inject-filepath/expected/injected_redis.yaml
index 912ff4eb8..bd35268a0 100644
--- a/cli/cmd/testdata/inject-filepath/expected/injected_redis.yaml
+++ b/cli/cmd/testdata/inject-filepath/expected/injected_redis.yaml
@@ -101,6 +101,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: 10s
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/inject_contour.golden.yml b/cli/cmd/testdata/inject_contour.golden.yml
index 3a227eec3..23e78bc0f 100644
--- a/cli/cmd/testdata/inject_contour.golden.yml
+++ b/cli/cmd/testdata/inject_contour.golden.yml
@@ -109,6 +109,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: 10s
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/inject_emojivoto_already_injected.golden.yml b/cli/cmd/testdata/inject_emojivoto_already_injected.golden.yml
index 0f1cd6a13..ab3edf5d8 100644
--- a/cli/cmd/testdata/inject_emojivoto_already_injected.golden.yml
+++ b/cli/cmd/testdata/inject_emojivoto_already_injected.golden.yml
@@ -103,6 +103,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: 10s
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -358,6 +360,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: 10s
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -613,6 +617,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: 10s
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -868,6 +874,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: 10s
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/inject_emojivoto_deployment.golden.yml b/cli/cmd/testdata/inject_emojivoto_deployment.golden.yml
index de4c15c1b..7b5546729 100644
--- a/cli/cmd/testdata/inject_emojivoto_deployment.golden.yml
+++ b/cli/cmd/testdata/inject_emojivoto_deployment.golden.yml
@@ -103,6 +103,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: 10s
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/inject_emojivoto_deployment_access_log.golden.yml b/cli/cmd/testdata/inject_emojivoto_deployment_access_log.golden.yml
index 6c67c9884..1a2f90a7a 100644
--- a/cli/cmd/testdata/inject_emojivoto_deployment_access_log.golden.yml
+++ b/cli/cmd/testdata/inject_emojivoto_deployment_access_log.golden.yml
@@ -104,6 +104,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: 10s
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/inject_emojivoto_deployment_automountServiceAccountToken_false.golden.yml b/cli/cmd/testdata/inject_emojivoto_deployment_automountServiceAccountToken_false.golden.yml
index 45570fd9a..b97769967 100644
--- a/cli/cmd/testdata/inject_emojivoto_deployment_automountServiceAccountToken_false.golden.yml
+++ b/cli/cmd/testdata/inject_emojivoto_deployment_automountServiceAccountToken_false.golden.yml
@@ -104,6 +104,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: 10s
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/inject_emojivoto_deployment_capabilities.golden.yml b/cli/cmd/testdata/inject_emojivoto_deployment_capabilities.golden.yml
index 1e462a21c..94aafcaaf 100644
--- a/cli/cmd/testdata/inject_emojivoto_deployment_capabilities.golden.yml
+++ b/cli/cmd/testdata/inject_emojivoto_deployment_capabilities.golden.yml
@@ -103,6 +103,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: 10s
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/inject_emojivoto_deployment_config_overrides.golden.yml b/cli/cmd/testdata/inject_emojivoto_deployment_config_overrides.golden.yml
index 3259583a8..75aa7966d 100644
--- a/cli/cmd/testdata/inject_emojivoto_deployment_config_overrides.golden.yml
+++ b/cli/cmd/testdata/inject_emojivoto_deployment_config_overrides.golden.yml
@@ -113,6 +113,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: 10s
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/inject_emojivoto_deployment_controller_name.golden.yml b/cli/cmd/testdata/inject_emojivoto_deployment_controller_name.golden.yml
index a81b5e5f8..56bc21406 100644
--- a/cli/cmd/testdata/inject_emojivoto_deployment_controller_name.golden.yml
+++ b/cli/cmd/testdata/inject_emojivoto_deployment_controller_name.golden.yml
@@ -103,6 +103,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: 10s
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -358,6 +360,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: 10s
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/inject_emojivoto_deployment_debug.golden.yml b/cli/cmd/testdata/inject_emojivoto_deployment_debug.golden.yml
index daf8b7338..cbd237dbf 100644
--- a/cli/cmd/testdata/inject_emojivoto_deployment_debug.golden.yml
+++ b/cli/cmd/testdata/inject_emojivoto_deployment_debug.golden.yml
@@ -104,6 +104,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: 10s
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/inject_emojivoto_deployment_empty_resources.golden.yml b/cli/cmd/testdata/inject_emojivoto_deployment_empty_resources.golden.yml
index e03c8db2c..935ac9801 100644
--- a/cli/cmd/testdata/inject_emojivoto_deployment_empty_resources.golden.yml
+++ b/cli/cmd/testdata/inject_emojivoto_deployment_empty_resources.golden.yml
@@ -103,6 +103,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: 10s
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/inject_emojivoto_deployment_hostNetwork_false.golden.yml b/cli/cmd/testdata/inject_emojivoto_deployment_hostNetwork_false.golden.yml
index 22c7b88ce..f3d3f2200 100644
--- a/cli/cmd/testdata/inject_emojivoto_deployment_hostNetwork_false.golden.yml
+++ b/cli/cmd/testdata/inject_emojivoto_deployment_hostNetwork_false.golden.yml
@@ -103,6 +103,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: 10s
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/inject_emojivoto_deployment_native_sidecar.golden.yml b/cli/cmd/testdata/inject_emojivoto_deployment_native_sidecar.golden.yml
index 30c6d7371..a59937d74 100644
--- a/cli/cmd/testdata/inject_emojivoto_deployment_native_sidecar.golden.yml
+++ b/cli/cmd/testdata/inject_emojivoto_deployment_native_sidecar.golden.yml
@@ -151,6 +151,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: 10s
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/inject_emojivoto_deployment_no_init_container.golden.yml b/cli/cmd/testdata/inject_emojivoto_deployment_no_init_container.golden.yml
index 8e0fb805e..1edae26fe 100644
--- a/cli/cmd/testdata/inject_emojivoto_deployment_no_init_container.golden.yml
+++ b/cli/cmd/testdata/inject_emojivoto_deployment_no_init_container.golden.yml
@@ -103,6 +103,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: 10s
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/inject_emojivoto_deployment_opaque_ports.golden.yml b/cli/cmd/testdata/inject_emojivoto_deployment_opaque_ports.golden.yml
index 55f8269e7..8cf7c3fe2 100644
--- a/cli/cmd/testdata/inject_emojivoto_deployment_opaque_ports.golden.yml
+++ b/cli/cmd/testdata/inject_emojivoto_deployment_opaque_ports.golden.yml
@@ -104,6 +104,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: 10s
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/inject_emojivoto_deployment_overridden.golden.yml b/cli/cmd/testdata/inject_emojivoto_deployment_overridden.golden.yml
index d1010b064..193d3be6d 100644
--- a/cli/cmd/testdata/inject_emojivoto_deployment_overridden.golden.yml
+++ b/cli/cmd/testdata/inject_emojivoto_deployment_overridden.golden.yml
@@ -104,6 +104,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: 10s
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/inject_emojivoto_deployment_params.golden.yml b/cli/cmd/testdata/inject_emojivoto_deployment_params.golden.yml
index 9bd352337..b1ffaf4e7 100644
--- a/cli/cmd/testdata/inject_emojivoto_deployment_params.golden.yml
+++ b/cli/cmd/testdata/inject_emojivoto_deployment_params.golden.yml
@@ -103,6 +103,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SCOPE_PROTO_APPLE_SAUCE
           value: valueA
         - name: LINKERD2_PROXY_INBOUND_SCOPE_PROTO_BLUEBERRY
diff --git a/cli/cmd/testdata/inject_emojivoto_deployment_proxyignores.golden.yml b/cli/cmd/testdata/inject_emojivoto_deployment_proxyignores.golden.yml
index 4b266f17c..069e304fc 100644
--- a/cli/cmd/testdata/inject_emojivoto_deployment_proxyignores.golden.yml
+++ b/cli/cmd/testdata/inject_emojivoto_deployment_proxyignores.golden.yml
@@ -105,6 +105,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: 10s
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/inject_emojivoto_deployment_udp.golden.yml b/cli/cmd/testdata/inject_emojivoto_deployment_udp.golden.yml
index 2de167db6..37b966b2d 100644
--- a/cli/cmd/testdata/inject_emojivoto_deployment_udp.golden.yml
+++ b/cli/cmd/testdata/inject_emojivoto_deployment_udp.golden.yml
@@ -103,6 +103,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: 10s
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/inject_emojivoto_list.golden.yml b/cli/cmd/testdata/inject_emojivoto_list.golden.yml
index 233579f51..9d372acc1 100644
--- a/cli/cmd/testdata/inject_emojivoto_list.golden.yml
+++ b/cli/cmd/testdata/inject_emojivoto_list.golden.yml
@@ -105,6 +105,8 @@ items:
             value: 30s
           - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
             value: 30s
+          - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+            value: "false"
           - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
             value: 10s
           - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -359,6 +361,8 @@ items:
             value: 30s
           - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
             value: 30s
+          - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+            value: "false"
           - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
             value: 10s
           - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/inject_emojivoto_list_empty_resources.golden.yml b/cli/cmd/testdata/inject_emojivoto_list_empty_resources.golden.yml
index 69bf9a0eb..fb73135a8 100644
--- a/cli/cmd/testdata/inject_emojivoto_list_empty_resources.golden.yml
+++ b/cli/cmd/testdata/inject_emojivoto_list_empty_resources.golden.yml
@@ -105,6 +105,8 @@ items:
             value: 30s
           - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
             value: 30s
+          - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+            value: "false"
           - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
             value: 10s
           - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -359,6 +361,8 @@ items:
             value: 30s
           - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
             value: 30s
+          - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+            value: "false"
           - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
             value: 10s
           - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/inject_emojivoto_pod.golden.yml b/cli/cmd/testdata/inject_emojivoto_pod.golden.yml
index 429b540bd..0e10c5479 100644
--- a/cli/cmd/testdata/inject_emojivoto_pod.golden.yml
+++ b/cli/cmd/testdata/inject_emojivoto_pod.golden.yml
@@ -94,6 +94,8 @@ spec:
       value: 30s
     - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
       value: 30s
+    - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+      value: "false"
     - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
       value: 10s
     - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/inject_emojivoto_pod_ingress.golden.yml b/cli/cmd/testdata/inject_emojivoto_pod_ingress.golden.yml
index 3173c1b4f..67ba1c9cb 100644
--- a/cli/cmd/testdata/inject_emojivoto_pod_ingress.golden.yml
+++ b/cli/cmd/testdata/inject_emojivoto_pod_ingress.golden.yml
@@ -97,6 +97,8 @@ spec:
       value: 30s
     - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
       value: 30s
+    - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+      value: "false"
     - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
       value: 10s
     - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/inject_emojivoto_pod_proxyignores.golden.yml b/cli/cmd/testdata/inject_emojivoto_pod_proxyignores.golden.yml
index 6af9e98bc..775760b0d 100644
--- a/cli/cmd/testdata/inject_emojivoto_pod_proxyignores.golden.yml
+++ b/cli/cmd/testdata/inject_emojivoto_pod_proxyignores.golden.yml
@@ -96,6 +96,8 @@ spec:
       value: 30s
     - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
       value: 30s
+    - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+      value: "false"
     - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
       value: 10s
     - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/inject_emojivoto_pod_with_requests.golden.yml b/cli/cmd/testdata/inject_emojivoto_pod_with_requests.golden.yml
index 77f81d0ef..121042e28 100644
--- a/cli/cmd/testdata/inject_emojivoto_pod_with_requests.golden.yml
+++ b/cli/cmd/testdata/inject_emojivoto_pod_with_requests.golden.yml
@@ -98,6 +98,8 @@ spec:
       value: 30s
     - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
       value: 30s
+    - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+      value: "false"
     - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
       value: 10s
     - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/inject_emojivoto_statefulset.golden.yml b/cli/cmd/testdata/inject_emojivoto_statefulset.golden.yml
index 65cc4019c..89ebd3cd7 100644
--- a/cli/cmd/testdata/inject_emojivoto_statefulset.golden.yml
+++ b/cli/cmd/testdata/inject_emojivoto_statefulset.golden.yml
@@ -104,6 +104,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: 10s
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/inject_gettest_deployment.good.golden.yml b/cli/cmd/testdata/inject_gettest_deployment.good.golden.yml
index 2786c6f19..b543a50b3 100644
--- a/cli/cmd/testdata/inject_gettest_deployment.good.golden.yml
+++ b/cli/cmd/testdata/inject_gettest_deployment.good.golden.yml
@@ -99,6 +99,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: 10s
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -356,6 +358,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: 10s
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/inject_tap_deployment_debug.golden.yml b/cli/cmd/testdata/inject_tap_deployment_debug.golden.yml
index 4e8d94a24..1ded323fb 100644
--- a/cli/cmd/testdata/inject_tap_deployment_debug.golden.yml
+++ b/cli/cmd/testdata/inject_tap_deployment_debug.golden.yml
@@ -120,6 +120,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: 10s
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/install_controlplane_tracing_output.golden b/cli/cmd/testdata/install_controlplane_tracing_output.golden
index 7e32f040e..b510f4d31 100644
--- a/cli/cmd/testdata/install_controlplane_tracing_output.golden
+++ b/cli/cmd/testdata/install_controlplane_tracing_output.golden
@@ -707,6 +707,8 @@ data:
       logFormat: plain
       logHTTPHeaders: "off"
       logLevel: warn,linkerd=info,hickory=error
+      metrics:
+        hostnameLabels: false
       nativeSidecar: false
       opaquePorts: 25,587,3306,4444,5432,6379,9300,11211
       outbound:
@@ -1080,6 +1082,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -1459,6 +1463,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -1978,6 +1984,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/install_custom_domain.golden b/cli/cmd/testdata/install_custom_domain.golden
index e89158fdf..01c0cb1ea 100644
--- a/cli/cmd/testdata/install_custom_domain.golden
+++ b/cli/cmd/testdata/install_custom_domain.golden
@@ -707,6 +707,8 @@ data:
       logFormat: plain
       logHTTPHeaders: "off"
       logLevel: warn,linkerd=info,hickory=error
+      metrics:
+        hostnameLabels: false
       nativeSidecar: false
       opaquePorts: 25,587,3306,4444,5432,6379,9300,11211
       outbound:
@@ -1079,6 +1081,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -1458,6 +1462,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -1976,6 +1982,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/install_custom_registry.golden b/cli/cmd/testdata/install_custom_registry.golden
index 3ea48320e..8ae1cf81a 100644
--- a/cli/cmd/testdata/install_custom_registry.golden
+++ b/cli/cmd/testdata/install_custom_registry.golden
@@ -707,6 +707,8 @@ data:
       logFormat: plain
       logHTTPHeaders: "off"
       logLevel: warn,linkerd=info,hickory=error
+      metrics:
+        hostnameLabels: false
       nativeSidecar: false
       opaquePorts: 25,587,3306,4444,5432,6379,9300,11211
       outbound:
@@ -1079,6 +1081,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -1458,6 +1462,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -1976,6 +1982,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/install_default.golden b/cli/cmd/testdata/install_default.golden
index e89158fdf..01c0cb1ea 100644
--- a/cli/cmd/testdata/install_default.golden
+++ b/cli/cmd/testdata/install_default.golden
@@ -707,6 +707,8 @@ data:
       logFormat: plain
       logHTTPHeaders: "off"
       logLevel: warn,linkerd=info,hickory=error
+      metrics:
+        hostnameLabels: false
       nativeSidecar: false
       opaquePorts: 25,587,3306,4444,5432,6379,9300,11211
       outbound:
@@ -1079,6 +1081,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -1458,6 +1462,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -1976,6 +1982,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/install_default_override_dst_get_nets.golden b/cli/cmd/testdata/install_default_override_dst_get_nets.golden
index dd80eb27b..ac068ba57 100644
--- a/cli/cmd/testdata/install_default_override_dst_get_nets.golden
+++ b/cli/cmd/testdata/install_default_override_dst_get_nets.golden
@@ -707,6 +707,8 @@ data:
       logFormat: plain
       logHTTPHeaders: "off"
       logLevel: warn,linkerd=info,hickory=error
+      metrics:
+        hostnameLabels: false
       nativeSidecar: false
       opaquePorts: 25,587,3306,4444,5432,6379,9300,11211
       outbound:
@@ -1079,6 +1081,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -1458,6 +1462,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -1976,6 +1982,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/install_default_token.golden b/cli/cmd/testdata/install_default_token.golden
index 2d5ccb06b..58d5db738 100644
--- a/cli/cmd/testdata/install_default_token.golden
+++ b/cli/cmd/testdata/install_default_token.golden
@@ -707,6 +707,8 @@ data:
       logFormat: plain
       logHTTPHeaders: "off"
       logLevel: warn,linkerd=info,hickory=error
+      metrics:
+        hostnameLabels: false
       nativeSidecar: false
       opaquePorts: 25,587,3306,4444,5432,6379,9300,11211
       outbound:
@@ -1079,6 +1081,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -1449,6 +1453,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -1958,6 +1964,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/install_gid_output.golden b/cli/cmd/testdata/install_gid_output.golden
index 1c629a4d0..572d230cc 100755
--- a/cli/cmd/testdata/install_gid_output.golden
+++ b/cli/cmd/testdata/install_gid_output.golden
@@ -707,6 +707,8 @@ data:
       logFormat: plain
       logHTTPHeaders: "off"
       logLevel: warn,linkerd=info,hickory=error
+      metrics:
+        hostnameLabels: false
       nativeSidecar: false
       opaquePorts: 25,587,3306,4444,5432,6379,9300,11211
       outbound:
@@ -1080,6 +1082,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -1462,6 +1466,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -1987,6 +1993,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/install_ha_output.golden b/cli/cmd/testdata/install_ha_output.golden
index 1df47c26c..b41965f10 100644
--- a/cli/cmd/testdata/install_ha_output.golden
+++ b/cli/cmd/testdata/install_ha_output.golden
@@ -734,6 +734,8 @@ data:
       logFormat: plain
       logHTTPHeaders: "off"
       logLevel: warn,linkerd=info,hickory=error
+      metrics:
+        hostnameLabels: false
       nativeSidecar: false
       opaquePorts: 25,587,3306,4444,5432,6379,9300,11211
       outbound:
@@ -1156,6 +1158,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -1580,6 +1584,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -2139,6 +2145,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/install_ha_with_overrides_output.golden b/cli/cmd/testdata/install_ha_with_overrides_output.golden
index 2edcd2399..26e98f81c 100644
--- a/cli/cmd/testdata/install_ha_with_overrides_output.golden
+++ b/cli/cmd/testdata/install_ha_with_overrides_output.golden
@@ -734,6 +734,8 @@ data:
       logFormat: plain
       logHTTPHeaders: "off"
       logLevel: warn,linkerd=info,hickory=error
+      metrics:
+        hostnameLabels: false
       nativeSidecar: false
       opaquePorts: 25,587,3306,4444,5432,6379,9300,11211
       outbound:
@@ -1156,6 +1158,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -1580,6 +1584,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -2139,6 +2145,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/install_heartbeat_disabled_output.golden b/cli/cmd/testdata/install_heartbeat_disabled_output.golden
index e0eb4f6d2..a82c6bae2 100644
--- a/cli/cmd/testdata/install_heartbeat_disabled_output.golden
+++ b/cli/cmd/testdata/install_heartbeat_disabled_output.golden
@@ -638,6 +638,8 @@ data:
       logFormat: plain
       logHTTPHeaders: "off"
       logLevel: warn,linkerd=info,hickory=error
+      metrics:
+        hostnameLabels: false
       nativeSidecar: false
       opaquePorts: 25,587,3306,4444,5432,6379,9300,11211
       outbound:
@@ -1010,6 +1012,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -1389,6 +1393,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -1823,6 +1829,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/install_helm_control_plane_output.golden b/cli/cmd/testdata/install_helm_control_plane_output.golden
index 998443eda..067dd2c60 100644
--- a/cli/cmd/testdata/install_helm_control_plane_output.golden
+++ b/cli/cmd/testdata/install_helm_control_plane_output.golden
@@ -684,6 +684,8 @@ data:
       logFormat: plain
       logHTTPHeaders: "off"
       logLevel: warn,linkerd=info,hickory=error
+      metrics:
+        hostnameLabels: false
       nativeSidecar: false
       opaquePorts: 25,587,3306,4444,5432,6379,9300,11211
       outbound:
@@ -1052,6 +1054,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -1433,6 +1437,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -1955,6 +1961,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/install_helm_control_plane_output_ha.golden b/cli/cmd/testdata/install_helm_control_plane_output_ha.golden
index 29936e331..7fb90483e 100644
--- a/cli/cmd/testdata/install_helm_control_plane_output_ha.golden
+++ b/cli/cmd/testdata/install_helm_control_plane_output_ha.golden
@@ -711,6 +711,8 @@ data:
       logFormat: plain
       logHTTPHeaders: "off"
       logLevel: warn,linkerd=info,hickory=error
+      metrics:
+        hostnameLabels: false
       nativeSidecar: false
       opaquePorts: 25,587,3306,4444,5432,6379,9300,11211
       outbound:
@@ -1129,6 +1131,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -1555,6 +1559,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -2118,6 +2124,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/install_helm_control_plane_output_ha_with_gid.golden b/cli/cmd/testdata/install_helm_control_plane_output_ha_with_gid.golden
index 3837a8ad7..1004f88a5 100755
--- a/cli/cmd/testdata/install_helm_control_plane_output_ha_with_gid.golden
+++ b/cli/cmd/testdata/install_helm_control_plane_output_ha_with_gid.golden
@@ -711,6 +711,8 @@ data:
       logFormat: plain
       logHTTPHeaders: "off"
       logLevel: warn,linkerd=info,hickory=error
+      metrics:
+        hostnameLabels: false
       nativeSidecar: false
       opaquePorts: 25,587,3306,4444,5432,6379,9300,11211
       outbound:
@@ -1130,6 +1132,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -1559,6 +1563,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -2129,6 +2135,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/install_helm_output_ha_labels.golden b/cli/cmd/testdata/install_helm_output_ha_labels.golden
index a4a7f3a26..2678fd526 100644
--- a/cli/cmd/testdata/install_helm_output_ha_labels.golden
+++ b/cli/cmd/testdata/install_helm_output_ha_labels.golden
@@ -715,6 +715,8 @@ data:
       logFormat: plain
       logHTTPHeaders: "off"
       logLevel: warn,linkerd=info,hickory=error
+      metrics:
+        hostnameLabels: false
       nativeSidecar: false
       opaquePorts: 25,587,3306,4444,5432,6379,9300,11211
       outbound:
@@ -1137,6 +1139,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -1567,6 +1571,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -2138,6 +2144,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/install_helm_output_ha_namespace_selector.golden b/cli/cmd/testdata/install_helm_output_ha_namespace_selector.golden
index ccf67eaaf..9fcba6860 100644
--- a/cli/cmd/testdata/install_helm_output_ha_namespace_selector.golden
+++ b/cli/cmd/testdata/install_helm_output_ha_namespace_selector.golden
@@ -706,6 +706,8 @@ data:
       logFormat: plain
       logHTTPHeaders: "off"
       logLevel: warn,linkerd=info,hickory=error
+      metrics:
+        hostnameLabels: false
       nativeSidecar: false
       opaquePorts: 25,587,3306,4444,5432,6379,9300,11211
       outbound:
@@ -1119,6 +1121,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -1545,6 +1549,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -2108,6 +2114,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/install_no_init_container.golden b/cli/cmd/testdata/install_no_init_container.golden
index fbbe980f2..fc13eef9c 100644
--- a/cli/cmd/testdata/install_no_init_container.golden
+++ b/cli/cmd/testdata/install_no_init_container.golden
@@ -707,6 +707,8 @@ data:
       logFormat: plain
       logHTTPHeaders: "off"
       logLevel: warn,linkerd=info,hickory=error
+      metrics:
+        hostnameLabels: false
       nativeSidecar: false
       opaquePorts: 25,587,3306,4444,5432,6379,9300,11211
       outbound:
@@ -1079,6 +1081,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -1451,6 +1455,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -1962,6 +1968,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/install_output.golden b/cli/cmd/testdata/install_output.golden
index fa35c21e4..55ae880ca 100644
--- a/cli/cmd/testdata/install_output.golden
+++ b/cli/cmd/testdata/install_output.golden
@@ -675,6 +675,8 @@ data:
       logFormat: plain
       logHTTPHeaders: "off"
       logLevel: warn,linkerd=info
+      metrics:
+        hostnameLabels: false
       nativeSidecar: false
       opaquePorts: 25,443,587,3306,5432,11211
       outboundConnectTimeout: ""
@@ -1023,6 +1025,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_PORTS_DISABLE_PROTOCOL_DETECTION
           value: "25,443,587,3306,5432,11211"
         - name: LINKERD2_PROXY_DESTINATION_CONTEXT
@@ -1395,6 +1399,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_PORTS_DISABLE_PROTOCOL_DETECTION
           value: "25,443,587,3306,5432,11211"
         - name: LINKERD2_PROXY_DESTINATION_CONTEXT
@@ -1915,6 +1921,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_PORTS_DISABLE_PROTOCOL_DETECTION
           value: "25,443,587,3306,5432,11211"
         - name: LINKERD2_PROXY_DESTINATION_CONTEXT
diff --git a/cli/cmd/testdata/install_proxy_ignores.golden b/cli/cmd/testdata/install_proxy_ignores.golden
index 387ccbfc2..18fa9f603 100644
--- a/cli/cmd/testdata/install_proxy_ignores.golden
+++ b/cli/cmd/testdata/install_proxy_ignores.golden
@@ -707,6 +707,8 @@ data:
       logFormat: plain
       logHTTPHeaders: "off"
       logLevel: warn,linkerd=info,hickory=error
+      metrics:
+        hostnameLabels: false
       nativeSidecar: false
       opaquePorts: 25,587,3306,4444,5432,6379,9300,11211
       outbound:
@@ -1079,6 +1081,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -1458,6 +1462,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -1976,6 +1982,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/cli/cmd/testdata/install_values_file.golden b/cli/cmd/testdata/install_values_file.golden
index 376dcc25e..93316a337 100644
--- a/cli/cmd/testdata/install_values_file.golden
+++ b/cli/cmd/testdata/install_values_file.golden
@@ -707,6 +707,8 @@ data:
       logFormat: plain
       logHTTPHeaders: "off"
       logLevel: warn,linkerd=info,hickory=error
+      metrics:
+        hostnameLabels: false
       nativeSidecar: false
       opaquePorts: 25,587,3306,4444,5432,6379,9300,11211
       outbound:
@@ -1079,6 +1081,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -1458,6 +1462,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
@@ -1976,6 +1982,8 @@ spec:
           value: 30s
         - name: LINKERD2_PROXY_OUTBOUND_CONNECT_USER_TIMEOUT
           value: 30s
+        - name: LINKERD2_PROXY_OUTBOUND_METRICS_HOSTNAME_LABELS
+          value: "false"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_INTERVAL
           value: "10s"
         - name: LINKERD2_PROXY_INBOUND_SERVER_HTTP2_KEEP_ALIVE_TIMEOUT
diff --git a/pkg/charts/linkerd2/values_test.go b/pkg/charts/linkerd2/values_test.go
index 58ae1cd60..57903d710 100644
--- a/pkg/charts/linkerd2/values_test.go
+++ b/pkg/charts/linkerd2/values_test.go
@@ -179,6 +179,9 @@ func TestNewValues(t *testing.T) {
 					Lifetime:       "1h",
 				},
 			},
+			Metrics: &ProxyMetrics{
+				HostnameLabels: false,
+			},
 			Runtime: ProxyRuntime{
 				Workers: ProxyRuntimeWorkers{
 					Minimum: 1,
diff --git a/test/integration/deep/hostname/assertions.go b/test/integration/deep/hostname/assertions.go
new file mode 100644
index 000000000..3f39bfde7
--- /dev/null
+++ b/test/integration/deep/hostname/assertions.go
@@ -0,0 +1,136 @@
+package hostname
+
+import (
+	"fmt"
+	"regexp"
+
+	"github.com/linkerd/linkerd2/testutil/prommatch"
+)
+
+var (
+	authorityRE = regexp.MustCompile(`[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-]+\.svc\.cluster\.local:[0-9]+`)
+	hostnameRE  = regexp.MustCompile(`[a-zA-Z0-9\-]+`)
+)
+
+// hasOutboundHTTPRequestWithHostname checks there is a series matching:
+//
+//	request_total{
+//	  route_namespace="",
+//	  route_name="http",
+//	  route_kind="default",
+//	  route_group="",
+//	  hostname=~"[a-zA-Z0-9]+"
+//	}
+func hasOutboundHTTPRequestWithHostname(metrics, ns string) error {
+	m := prommatch.NewMatcher("outbound_http_route_request_duration_seconds_count",
+		prommatch.Labels{
+			"route_namespace": prommatch.Equals(""),
+			"route_name":      prommatch.Equals("http"),
+			"route_kind":      prommatch.Equals("default"),
+			"route_group":     prommatch.Equals(""),
+			"hostname":        prommatch.Like(hostnameRE),
+		},
+		prommatch.HasPositiveValue())
+	ok, err := m.HasMatchInString(metrics)
+	if err != nil {
+		return fmt.Errorf("failed to run a check of against the provided metrics: %w", err)
+	}
+	if !ok {
+		return fmt.Errorf("expected to find HTTP hostname outbound requests \n%s", metrics)
+	}
+	return nil
+}
+
+// hasOutboundHTTPRequestWithoutHostname checks there is a series matching:
+//
+//	request_total{
+//	  route_namespace="",
+//	  route_name="http",
+//	  route_kind="default",
+//	  route_group="",
+//	  hostname=""
+//	}
+func hasOutboundHTTPRequestWithoutHostname(metrics, ns string) error {
+	m := prommatch.NewMatcher("outbound_http_route_request_duration_seconds_count",
+		prommatch.Labels{
+			"route_namespace": prommatch.Equals(""),
+			"route_name":      prommatch.Equals("http"),
+			"route_kind":      prommatch.Equals("default"),
+			"route_group":     prommatch.Equals(""),
+			"hostname":        prommatch.Equals(""),
+		},
+		prommatch.HasPositiveValue())
+	ok, err := m.HasMatchInString(metrics)
+	if err != nil {
+		return fmt.Errorf("failed to run a check of against the provided metrics: %w", err)
+	}
+	if !ok {
+		return fmt.Errorf("expected to find HTTP outbound requests \n%s", metrics)
+	}
+	return nil
+}
+
+// hasInboundTCPTrafficWithTLS checks there is a series matching:
+//
+//	tcp_open_total{
+//	  direction="inbound",
+//	  peer="src",
+//	  tls="true",
+//	  client_id="default.${ns}.serviceaccount.identity.linkerd.cluster.local",
+//	  srv_kind="default",
+//	  srv_name="all-unauthenticated",
+//	  target_addr=~"[0-9\.]+:[0-9]+",
+//	  target_ip=~"[0-9\.]+"
+//	}
+func hasInboundTCPTrafficWithTLS(metrics, ns string) error {
+	m := prommatch.NewMatcher(
+		"tcp_open_total",
+		prommatch.Labels{
+			"direction": prommatch.Equals("inbound"),
+			"peer":      prommatch.Equals("src"),
+			"tls":       prommatch.Equals("true"),
+			"client_id": prommatch.Equals(fmt.Sprintf("default.%s.serviceaccount.identity.linkerd.cluster.local", ns)),
+			"srv_kind":  prommatch.Equals("default"),
+			"srv_name":  prommatch.Equals("all-unauthenticated"),
+		},
+		prommatch.TargetAddrLabels(),
+		prommatch.HasPositiveValue(),
+	)
+	ok, err := m.HasMatchInString(metrics)
+	if err != nil {
+		return fmt.Errorf("failed to run a check of against the provided metrics: %w", err)
+	}
+	if !ok {
+		return fmt.Errorf("failed to find expected metric for inbound TLS TCP traffic\n%s", metrics)
+	}
+	return nil
+}
+
+// hasOutboundTCPWithTLSAndAuthority checks there is a series matching:
+//
+//	tcp_open_total{
+//	  direction="outbound",
+//	  peer="dst",
+//	  tls="true",
+//	  target_addr=~"[0-9\.]+:[0-9]+",
+//	  authority=~"[a-zA-Z\-]+\.[a-zA-Z\-]+\.svc\.cluster\.local:[0-9]+"
+//	}
+func hasOutboundTCPWithTLSAndAuthority(metrics, ns string) error {
+	m := prommatch.NewMatcher("tcp_open_total",
+		prommatch.Labels{
+			"direction": prommatch.Equals("outbound"),
+			"peer":      prommatch.Equals("dst"),
+			"tls":       prommatch.Equals("true"),
+			"authority": prommatch.Like(authorityRE),
+		},
+		prommatch.TargetAddrLabels(),
+		prommatch.HasPositiveValue())
+	ok, err := m.HasMatchInString(metrics)
+	if err != nil {
+		return fmt.Errorf("failed to run a check against the provided metrics: %w", err)
+	}
+	if !ok {
+		return fmt.Errorf("failed to find expected metric for outbound TLS TCP traffic\n%s", metrics)
+	}
+	return nil
+}
diff --git a/test/integration/deep/hostname/hostname_test.go b/test/integration/deep/hostname/hostname_test.go
new file mode 100644
index 000000000..874bfd8d0
--- /dev/null
+++ b/test/integration/deep/hostname/hostname_test.go
@@ -0,0 +1,202 @@
+package hostname
+
+import (
+	"bytes"
+	"context"
+	"fmt"
+	"html/template"
+	"os"
+	"testing"
+	"time"
+
+	"github.com/linkerd/linkerd2/testutil"
+	v1 "k8s.io/api/core/v1"
+)
+
+var TestHelper *testutil.TestHelper
+
+var hostnameClientTemplate = template.Must(template.New("hostname_client.yaml").ParseFiles("testdata/hostname_client.yaml"))
+
+var (
+	disabledApp = "disabled"
+	disabledSC  = "slow-cooker-disabled"
+	enabledApp  = "enabled"
+	enabledSC   = "slow-cooker-enabled"
+)
+
+type testCase struct {
+	name      string
+	appName   string
+	appChecks []check
+	scName    string
+	scChecks  []check
+}
+
+type check func(metrics, ns string) error
+
+func TestMain(m *testing.M) {
+	TestHelper = testutil.NewTestHelper()
+	// Block test execution until control plane is running
+	TestHelper.WaitUntilDeployReady(testutil.LinkerdDeployReplicasEdge)
+	os.Exit(m.Run())
+}
+
+// clientTemplateArgs is a struct that contains the arguments to be supplied
+// to the deployment template hostname_client.yaml.
+type clientTemplateArgs struct {
+	ServiceCookerDisabledTargetHost string
+	ServiceCookerEnabledTargetHost  string
+}
+
+func serviceName(n string) string {
+	return fmt.Sprintf("svc-%s", n)
+}
+
+//////////////////////
+/// TEST EXECUTION ///
+//////////////////////
+
+func TestHostnameCalledByServiceTarget(t *testing.T) {
+	ctx := context.Background()
+	TestHelper.WithDataPlaneNamespace(ctx, "hostname-called-by-service-name-test", map[string]string{}, t, func(t *testing.T, hostnameNs string) {
+		checks := func(c ...check) []check { return c }
+
+		if err := deployApplications(hostnameNs); err != nil {
+			testutil.AnnotatedFatal(t, "failed to deploy applications", err)
+		}
+		waitForAppDeploymentReady(t, hostnameNs)
+
+		tmplArgs := clientTemplateArgs{
+			ServiceCookerDisabledTargetHost: serviceName(disabledApp),
+			ServiceCookerEnabledTargetHost:  serviceName(enabledApp),
+		}
+		if err := deployTemplate(hostnameNs, hostnameClientTemplate, tmplArgs); err != nil {
+			testutil.AnnotatedFatal(t, "failed to deploy client pods", err)
+		}
+		waitForClientDeploymentReady(t, hostnameNs)
+
+		runTests(ctx, t, hostnameNs, []testCase{
+			{
+				name:   "calling a meshed service with hostname metrics disabled",
+				scName: disabledSC,
+				scChecks: checks(
+					hasOutboundHTTPRequestWithoutHostname,
+					hasOutboundTCPWithTLSAndAuthority,
+				),
+				appName:   disabledApp,
+				appChecks: checks(hasInboundTCPTrafficWithTLS),
+			},
+		})
+		runTests(ctx, t, hostnameNs, []testCase{
+			{
+				name:   "calling a meshed service with hostname metrics enabled",
+				scName: enabledSC,
+				scChecks: checks(
+					hasOutboundHTTPRequestWithHostname,
+					hasOutboundTCPWithTLSAndAuthority,
+				),
+				appName:   enabledApp,
+				appChecks: checks(hasInboundTCPTrafficWithTLS),
+			},
+		})
+	})
+}
+
+func waitForAppDeploymentReady(t *testing.T, hostnameNs string) {
+	TestHelper.WaitRollout(t, map[string]testutil.DeploySpec{
+		disabledApp: {
+			Namespace: hostnameNs,
+			Replicas:  1,
+		},
+		enabledApp: {
+			Namespace: hostnameNs,
+			Replicas:  1,
+		},
+	})
+}
+
+func waitForClientDeploymentReady(t *testing.T, hostnameNs string) {
+	TestHelper.WaitRollout(t, map[string]testutil.DeploySpec{
+		disabledSC: {
+			Namespace: hostnameNs,
+			Replicas:  1,
+		},
+		enabledSC: {
+			Namespace: hostnameNs,
+			Replicas:  1,
+		},
+	})
+}
+
+func runTests(ctx context.Context, t *testing.T, ns string, tcs []testCase) {
+	t.Helper()
+	for _, tc := range tcs {
+		t.Run(tc.name, func(t *testing.T) {
+			err := testutil.RetryFor(30*time.Second, func() error {
+				if err := checkPodMetrics(ctx, ns, tc.scName, tc.scChecks); err != nil {
+					return fmt.Errorf("failed to check metrics for client pod: %w", err)
+				}
+				if tc.appName == "" {
+					return nil
+				}
+				if err := checkPodMetrics(ctx, ns, tc.appName, tc.appChecks); err != nil {
+					return fmt.Errorf("failed to check metrics for app pod: %w", err)
+				}
+				return nil
+			})
+			if err != nil {
+				testutil.AnnotatedFatalf(t, "unexpected metric for pod", "unexpected metric for pod: %s", err)
+			}
+		})
+	}
+}
+
+func checkPodMetrics(ctx context.Context, hostnameNs string, podAppLabel string, checks []check) error {
+	pods, err := TestHelper.GetPods(ctx, hostnameNs, map[string]string{"app": podAppLabel})
+	if err != nil {
+		return fmt.Errorf("error getting pods for label 'app: %q': %w", podAppLabel, err)
+	}
+	if len(pods) == 0 {
+		return fmt.Errorf("no pods found for label 'app: %q'", podAppLabel)
+	}
+	metrics, err := getPodMetrics(pods[0], hostnameNs)
+	if err != nil {
+		return fmt.Errorf("error getting metrics for pod %q: %w", pods[0].Name, err)
+	}
+	for _, check := range checks {
+		if err := check(metrics, hostnameNs); err != nil {
+			return fmt.Errorf("validation of pod metrics failed: %w", err)
+		}
+	}
+	return nil
+}
+
+func deployApplications(ns string) error {
+	out, err := TestHelper.Kubectl("", "apply", "-f", "testdata/hostname_application.yaml", "-n", ns)
+	if err != nil {
+		return fmt.Errorf("failed apply deployment file %q: %w", out, err)
+	}
+	return nil
+}
+
+func deployTemplate(ns string, tmpl *template.Template, templateArgs interface{}) error {
+	bb := &bytes.Buffer{}
+	if err := tmpl.Execute(bb, templateArgs); err != nil {
+		return fmt.Errorf("failed to write deployment template: %w", err)
+	}
+	out, err := TestHelper.KubectlApply(bb.String(), ns)
+	if err != nil {
+		return fmt.Errorf("failed apply deployment file %q: %w", out, err)
+	}
+	return nil
+}
+
+func getPodMetrics(pod v1.Pod, ns string) (string, error) {
+	podName := fmt.Sprintf("pod/%s", pod.Name)
+	cmd := []string{"diagnostics", "proxy-metrics", "--namespace", ns, podName}
+	metrics, err := TestHelper.LinkerdRun(cmd...)
+	if err != nil {
+		return "", err
+	}
+	return metrics, nil
+}
diff --git a/test/integration/deep/hostname/testdata/hostname_application.yaml b/test/integration/deep/hostname/testdata/hostname_application.yaml
new file mode 100644
index 000000000..ba7118989
--- /dev/null
+++ b/test/integration/deep/hostname/testdata/hostname_application.yaml
@@ -0,0 +1,80 @@
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: disabled
+spec:
+  replicas: 1
+  selector:
+    matchLabels:
+      app: disabled
+  template:
+    metadata:
+      annotations:
+        linkerd.io/inject: enabled
+      labels:
+        app: disabled
+    spec:
+      containers:
+      - name: app
+        image: buoyantio/bb:v0.0.7
+        args:
+        - terminus
+        - "--h1-server-port=8080"
+        - "--response-text=disabled"
+        ports:
+        - containerPort: 8080
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: svc-disabled
+  labels:
+    app: svc-disabled
+spec:
+  selector:
+    app: disabled
+  ports:
+  - name: http
+    port: 8080
+    targetPort: 8080
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: enabled
+spec:
+  replicas: 1
+  selector:
+    matchLabels:
+      app: enabled
+  template:
+    metadata:
+      annotations:
+        linkerd.io/inject: enabled
+      labels:
+        app: enabled
+    spec:
+      containers:
+      - name: app
+        image: buoyantio/bb:v0.0.7
+        args:
+        - terminus
+        - "--h1-server-port=8080"
+        - "--response-text=enabled"
+        ports:
+        - containerPort: 8080
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: svc-enabled
+  labels:
+    app: svc-enabled
+spec:
+  selector:
+    app: enabled
+  ports:
+  - name: http
+    port: 8080
+    targetPort: 8080
\ No newline at end of file
diff --git a/test/integration/deep/hostname/testdata/hostname_client.yaml b/test/integration/deep/hostname/testdata/hostname_client.yaml
new file mode 100644
index 000000000..92e0d7a15
--- /dev/null
+++ b/test/integration/deep/hostname/testdata/hostname_client.yaml
@@ -0,0 +1,51 @@
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: slow-cooker-disabled
+spec:
+  selector:
+    matchLabels:
+      app: slow-cooker-disabled
+  template:
+    metadata:
+      annotations:
+        linkerd.io/inject: "enabled"
+      labels:
+        app: slow-cooker-disabled
+    spec:
+      containers:
+      - name: slow-cooker-opdisabledque
+        image: buoyantio/slow_cooker:1.3.0
+        args:
+        - -qps=1
+        - -metric-addr=0.0.0.0:9999
+        - http://{{ .ServiceCookerDisabledTargetHost}}:8080
+        ports:
+        - containerPort: 9999
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: slow-cooker-enabled
+spec:
+  selector:
+    matchLabels:
+      app: slow-cooker-enabled
+  template:
+    metadata:
+      annotations:
+        linkerd.io/inject: "enabled"
+        config.linkerd.io/proxy-metrics-hostname-labels: "true"
+      labels:
+        app: slow-cooker-enabled
+    spec:
+      containers:
+      - name: slow-cooker-opaque
+        image: buoyantio/slow_cooker:1.3.0
+        args:
+        - -qps=1
+        - -metric-addr=0.0.0.0:9999
+        - http://{{ .ServiceCookerEnabledTargetHost}}:8080
+        ports:
+        - containerPort: 9999
\ No newline at end of file