Repository: linkerd/linkerd2
Pull request #13853 (2025-03-24 03:59:00)

build(deps): bump cc from 1.2.16 to 1.2.17
Bumps [cc](https://github.com/rust-lang/cc-rs) from 1.2.16 to 1.2.17.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/rust-lang/cc-rs/releases">cc's releases</a>.</em></p>
<blockquote>
<h2>cc-v1.2.17</h2>
<h3>Other</h3>
<ul>
<li>Regenerate target info (<a href="https://redirect.github.com/rust-lang/cc-rs/pull/1439">#1439</a>)</li>
<li>Regenerate windows sys bindings (<a href="https://redirect.github.com/rust-lang/cc-rs/pull/1437">#1437</a>)</li>
<li>Fix wasm32-wali-linux-musl target parsing (<a href="https://redirect.github.com/rust-lang/cc-rs/pull/1434">#1434</a>)</li>
<li>Parse <code>rustc</code> target names (<a href="https://redirect.github.com/rust-lang/cc-rs/pull/1413">#1413</a>)</li>
<li>Regenerate target info (<a href="https://redirect.github.com/rust-lang/cc-rs/pull/1429">#1429</a>)</li>
<li>Added base support for <code>wasm32-wali-linux-musl</code> target (<a href="https://redirect.github.com/rust-lang/cc-rs/pull/1373">#1373</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/rust-lang/cc-rs/blob/main/CHANGELOG.md">cc's changelog</a>.</em></p>
<blockquote>
<h2><a href="https://github.com/rust-lang/cc-rs/compare/cc-v1.2.16...cc-v1.2.17">1.2.17</a> - 2025-03-21</h2>
<h3>Other</h3>
<ul>
<li>Regenerate target info (<a href="https://redirect.github.com/rust-lang/cc-rs/pull/1439">#1439</a>)</li>
<li>Regenerate windows sys bindings (<a href="https://redirect.github.com/rust-lang/cc-rs/pull/1437">#1437</a>)</li>
<li>Fix wasm32-wali-linux-musl target parsing (<a href="https://redirect.github.com/rust-lang/cc-rs/pull/1434">#1434</a>)</li>
<li>Parse <code>rustc</code> target names (<a href="https://redirect.github.com/rust-lang/cc-rs/pull/1413">#1413</a>)</li>
<li>Regenerate target info (<a href="https://redirect.github.com/rust-lang/cc-rs/pull/1429">#1429</a>)</li>
<li>Added base support for <code>wasm32-wali-linux-musl</code> target (<a href="https://redirect.github.com/rust-lang/cc-rs/pull/1373">#1373</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/rust-lang/cc-rs/commit/d9dd20e376368c7535f6ef89b809098f5f203c1a"><code>d9dd20e</code></a> chore: release v1.2.17 (<a href="https://redirect.github.com/rust-lang/cc-rs/issues/1435">#1435</a>)</li>
<li><a href="https://github.com/rust-lang/cc-rs/commit/c964f0e07c3a2279a1ee812aaad7423254f82420"><code>c964f0e</code></a> Regenerate target info (<a href="https://redirect.github.com/rust-lang/cc-rs/issues/1439">#1439</a>)</li>
<li><a href="https://github.com/rust-lang/cc-rs/commit/a140cc79b067fc862d35f1e6140da43c54f64322"><code>a140cc7</code></a> Regenerate windows sys bindings (<a href="https://redirect.github.com/rust-lang/cc-rs/issues/1437">#1437</a>)</li>
<li><a href="https://github.com/rust-lang/cc-rs/commit/55051ebdc3325f325ae5c9c13647267981327e0c"><code>55051eb</code></a> Update windows-bindgen requirement from 0.60 to 0.61 (<a href="https://redirect.github.com/rust-lang/cc-rs/issues/1436">#1436</a>)</li>
<li><a href="https://github.com/rust-lang/cc-rs/commit/8054df013d20b7e6b311131cbe66d0c7fa385329"><code>8054df0</code></a> Fix wasm32-wali-linux-musl target parsing (<a href="https://redirect.github.com/rust-lang/cc-rs/issues/1434">#1434</a>)</li>
<li><a href="https://github.com/rust-lang/cc-rs/commit/d2a599105128f3837c6db5f188960f1284ef02d1"><code>d2a5991</code></a> ci: fix creating issue comment (<a href="https://redirect.github.com/rust-lang/cc-rs/issues/1433">#1433</a>)</li>
<li><a href="https://github.com/rust-lang/cc-rs/commit/cfb6a7cdbc0c40c385704dd305c58a168c50a842"><code>cfb6a7c</code></a> Fix failure from cargo not propagating because of pipe (<a href="https://redirect.github.com/rust-lang/cc-rs/issues/1432">#1432</a>)</li>
<li><a href="https://github.com/rust-lang/cc-rs/commit/968da78f52a34574ada6b119d02eb19a4a6dd094"><code>968da78</code></a> Parse <code>rustc</code> target names (<a href="https://redirect.github.com/rust-lang/cc-rs/issues/1413">#1413</a>)</li>
<li><a href="https://github.com/rust-lang/cc-rs/commit/20300d573d803a8c738d3dd0421754702b22655f"><code>20300d5</code></a> Regenerate target info (<a href="https://redirect.github.com/rust-lang/cc-rs/issues/1429">#1429</a>)</li>
<li><a href="https://github.com/rust-lang/cc-rs/commit/830eea9ece1ebe903474b2a9aa622d74be72d1c2"><code>830eea9</code></a> Added base support for <code>wasm32-wali-linux-musl</code> target (<a href="https://redirect.github.com/rust-lang/cc-rs/issues/1373">#1373</a>)</li>
<li>Additional commits viewable in <a href="https://github.com/rust-lang/cc-rs/compare/cc-v1.2.16...cc-v1.2.17">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cc&package-manager=cargo&previous-version=1.2.16&new-version=1.2.17)](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..92c77a387 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -249,9 +249,9 @@ checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
 
 [[package]]
 name = "cc"
-version = "1.2.16"
+version = "1.2.17"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be714c154be609ec7f5dad223a33bf1482fff90472de28f7362806e6d4832b8c"
+checksum = "1fcb57c740ae1daf453ae85f16e37396f672b039e00d9d866e07ddb24e328e3a"
 dependencies = [
  "shlex",
 ]
@@ -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",
 ]
@@ -1534,9 +1535,9 @@ dependencies = [
 
 [[package]]
 name = "log"
-version = "0.4.26"
+version = "0.4.27"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e"
+checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
 
 [[package]]
 name = "maplit"
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"
diff --git a/web/app/js/components/Tap.jsx b/web/app/js/components/Tap.jsx
index e95f1f186..261ae9da3 100644
--- a/web/app/js/components/Tap.jsx
+++ b/web/app/js/components/Tap.jsx
@@ -34,7 +34,6 @@ class Tap extends React.Component {
       tapResultsById: this.tapResultsById,
       error: null,
       resourcesByNs: {},
-      authoritiesByNs: {},
       query: {
         resource: '',
         namespace: '',
@@ -43,7 +42,6 @@ class Tap extends React.Component {
         method: '',
         path: '',
         scheme: '',
-        authority: '',
         maxRps: '',
       },
       maxLinesToDisplay: 40,
@@ -269,15 +267,12 @@ class Tap extends React.Component {
     });
 
     const url = this.api.urlsForResourceNoStats('all');
-    const authorityUrl = this.api.urlsForResource('authority');
-    this.api.setCurrentRequests([this.api.fetchMetrics(url), this.api.fetchMetrics(authorityUrl)]);
+    this.api.setCurrentRequests([this.api.fetchMetrics(url)]);
     Promise.all(this.api.getCurrentPromises())
       .then(rsp => {
         const { resourcesByNs } = groupResourcesByNs(rsp[0]);
-        const { authoritiesByNs } = groupResourcesByNs(rsp[1]);
         this.setState({
           resourcesByNs,
-          authoritiesByNs,
           pendingRequests: false,
         });
       })
@@ -292,7 +287,7 @@ class Tap extends React.Component {
   };
 
   render() {
-    const { tapResultsById, tapRequestInProgress, tapIsClosing, resourcesByNs, authoritiesByNs, query, showTapEnabledWarning, error } = this.state;
+    const { tapResultsById, tapRequestInProgress, tapIsClosing, resourcesByNs, query, showTapEnabledWarning, error } = this.state;
     const tableRows = _orderBy(_values(tapResultsById), r => r.lastUpdated, 'desc');
 
     return (
@@ -308,7 +303,6 @@ class Tap extends React.Component {
           handleTapStop={this.handleTapStop}
           handleTapClear={this.handleTapClear}
           resourcesByNs={resourcesByNs}
-          authoritiesByNs={authoritiesByNs}
           updateQuery={this.updateQuery}
           currentQuery={query} />
         {showTapEnabledWarning &&
diff --git a/web/app/js/components/TapQueryForm.jsx b/web/app/js/components/TapQueryForm.jsx
index a6a185bfe..445ba301a 100644
--- a/web/app/js/components/TapQueryForm.jsx
+++ b/web/app/js/components/TapQueryForm.jsx
@@ -97,21 +97,17 @@ class TapQueryForm extends React.Component {
   static getDerivedStateFromProps(props, state) {
     if (!_isEqual(props.resourcesByNs, state.resourcesByNs)) {
       const resourcesByNs = props.resourcesByNs;
-      const authoritiesByNs = props.authoritiesByNs;
       const namespaces = Object.keys(resourcesByNs).sort();
       const resourceNames = getResourceList(resourcesByNs, state.query.namespace);
       const toResourceNames = getResourceList(resourcesByNs, state.query.toNamespace);
-      const authorities = getResourceList(authoritiesByNs, state.query.namespace);
 
       return _merge(state, {
         resourcesByNs,
-        authoritiesByNs,
         autocomplete: {
           namespace: namespaces,
           resource: resourceNames,
           toNamespace: namespaces,
           toResource: toResourceNames,
-          authority: authorities,
         },
       });
     } else {
@@ -133,20 +129,18 @@ class TapQueryForm extends React.Component {
     this.state = {
       query,
       advancedFormExpanded,
-      authoritiesByNs: {},
       resourcesByNs: {},
       autocomplete: {
         namespace: [],
         resource: [],
         toNamespace: [],
         toResource: [],
-        authority: [],
       },
     };
   }
 
   handleFormChange = (name, scopeResource) => {
-    const { query, autocomplete, resourcesByNs, authoritiesByNs } = this.state;
+    const { query, autocomplete, resourcesByNs } = this.state;
     const { updateQuery } = this.props;
 
     const state = {
@@ -154,7 +148,6 @@ class TapQueryForm extends React.Component {
       autocomplete,
     };
 
-    const shouldScopeAuthority = name === 'namespace';
     const newQueryValues = {};
 
     return event => {
@@ -169,10 +162,6 @@ class TapQueryForm extends React.Component {
         newQueryValues[scopeResource] = `namespace/${formVal}`;
       }
 
-      if (shouldScopeAuthority) {
-        state.autocomplete.authority = authoritiesByNs[formVal];
-      }
-
       this.setState(state);
       updateQuery(state.query);
       this.handleUrlUpdate(newQueryValues);
@@ -320,7 +309,7 @@ class TapQueryForm extends React.Component {
   };
 
   renderAdvancedTapFormContent() {
-    const { autocomplete, query } = this.state;
+    const { query } = this.state;
     const { classes } = this.props;
 
     return (
@@ -339,29 +328,6 @@ class TapQueryForm extends React.Component {
           </Grid>
         </Grid>
 
-        <Grid container spacing={3}>
-          <Grid item xs={6} md={3} classes={{ item: classes.formControlWrapper }}>
-            <FormControl className={classes.formControl}>
-              <InputLabel htmlFor="authority"><Trans>formAuthority</Trans></InputLabel>
-              <Select
-                value={query.authority}
-                onChange={this.handleFormChange('authority')}
-                inputProps={{ name: 'authority', id: 'authority' }}
-                className={classes.selectEmpty}>
-                {
-                  _map(autocomplete.authority, (d, i) => (
-                    <MenuItem key={`authority-${i}`} value={d}>{d}</MenuItem>
-                  ))
-                }
-              </Select>
-              <FormHelperText><Trans>formAuthorityHelpText</Trans></FormHelperText>
-            </FormControl>
-          </Grid>
-          <Grid item xs={6} md={3} className={classes.formControlWrapper}>
-            {this.renderTextInput(<Trans>formPath</Trans>, 'path', <Trans>formPathHelpText</Trans>)}
-          </Grid>
-        </Grid>
-
         <Grid container spacing={3}>
           <Grid item xs={6} md={3} className={classes.formControlWrapper}>
             {this.renderTextInput(<Trans>formScheme</Trans>, 'scheme', <Trans>formSchemeHelpText</Trans>)}
@@ -449,7 +415,6 @@ class TapQueryForm extends React.Component {
 }
 
 TapQueryForm.propTypes = {
-  authoritiesByNs: PropTypes.shape({}).isRequired,
   cmdName: PropTypes.string.isRequired,
   currentQuery: tapQueryPropType.isRequired,
   enableAdvancedForm: PropTypes.bool,


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