From 2f83a85a36e84525d796484c91d7afefc5a5e974 Mon Sep 17 00:00:00 2001 From: Mohammad Sahihi Benis Date: Thu, 29 May 2025 19:49:21 +0200 Subject: [PATCH 1/4] doc: fix formatting in mirroring task --- .../traffic-management/mirroring/index.md | 477 +++++++++--------- 1 file changed, 236 insertions(+), 241 deletions(-) diff --git a/content/en/docs/tasks/traffic-management/mirroring/index.md b/content/en/docs/tasks/traffic-management/mirroring/index.md index 4414bc630a52..3a46239ef462 100644 --- a/content/en/docs/tasks/traffic-management/mirroring/index.md +++ b/content/en/docs/tasks/traffic-management/mirroring/index.md @@ -106,29 +106,29 @@ you will apply a rule to mirror a portion of traffic to `v2`. 1. Deploy the `curl` workload you'll use to send requests to the `httpbin` service: - {{< text bash >}} - $ cat <}} +$ cat <}} + containers: + - name: curl + image: curlimages/curl + command: ["/bin/sleep","3650d"] + imagePullPolicy: IfNotPresent +EOF +{{< /text >}} ## Creating a default routing policy @@ -136,260 +136,255 @@ By default Kubernetes load balances across both versions of the `httpbin` servic In this step, you will change that behavior so that all traffic goes to `v1`. 1. Create a default route rule to route all traffic to `v1` of the service: - - {{< tabset category-name="config-api" >}} - - {{< tab name="Istio APIs" category-value="istio-apis" >}} - - {{< text bash >}} - $ kubectl apply -f - <}} - - {{< /tab >}} - - {{< tab name="Gateway API" category-value="gateway-api" >}} - - {{< text bash >}} - $ kubectl apply -f - <}} + +{{< tab name="Istio APIs" category-value="istio-apis" >}} + +{{< text bash >}} +$ kubectl apply -f - <}} + +{{< /tab >}} + +{{< tab name="Gateway API" category-value="gateway-api" >}} + +{{< text bash >}} +$ kubectl apply -f - <}} + name: httpbin + port: 8000 + rules: + - backendRefs: + - name: httpbin-v1 + port: 80 +EOF +{{< /text >}} - {{< /tab >}} +{{< /tab >}} - {{< /tabset >}} +{{< /tabset >}} 1. Now, with all traffic directed to `httpbin:v1`, send a request to the service: - - {{< text bash json >}} - $ kubectl exec deploy/curl -c curl -- curl -sS http://httpbin:8000/headers - { - "headers": { - "Accept": "*/*", - "Content-Length": "0", - "Host": "httpbin:8000", - "User-Agent": "curl/7.35.0", - "X-B3-Parentspanid": "57784f8bff90ae0b", - "X-B3-Sampled": "1", - "X-B3-Spanid": "3289ae7257c3f159", - "X-B3-Traceid": "b56eebd279a76f0b57784f8bff90ae0b", - "X-Envoy-Attempt-Count": "1", - "X-Forwarded-Client-Cert": "By=spiffe://cluster.local/ns/default/sa/default;Hash=20afebed6da091c850264cc751b8c9306abac02993f80bdb76282237422bd098;Subject=\"\";URI=spiffe://cluster.local/ns/default/sa/default" - } - } - {{< /text >}} +{{< text bash json >}} +$ kubectl exec deploy/curl -c curl -- curl -sS http://httpbin:8000/headers +{ + "headers": { + "Accept": "*/*", + "Content-Length": "0", + "Host": "httpbin:8000", + "User-Agent": "curl/7.35.0", + "X-B3-Parentspanid": "57784f8bff90ae0b", + "X-B3-Sampled": "1", + "X-B3-Spanid": "3289ae7257c3f159", + "X-B3-Traceid": "b56eebd279a76f0b57784f8bff90ae0b", + "X-Envoy-Attempt-Count": "1", + "X-Forwarded-Client-Cert": "By=spiffe://cluster.local/ns/default/sa/default;Hash=20afebed6da091c850264cc751b8c9306abac02993f80bdb76282237422bd098;Subject=\"\";URI=spiffe://cluster.local/ns/default/sa/default" + } +} +{{< /text >}} 1. Check the logs from `httpbin-v1` and `httpbin-v2` pods. You should see access log entries for `v1` and none for `v2`: - {{< text bash >}} - $ kubectl logs deploy/httpbin-v1 -c httpbin - 127.0.0.1 - - [07/Mar/2018:19:02:43 +0000] "GET /headers HTTP/1.1" 200 321 "-" "curl/7.35.0" - {{< /text >}} +{{< text bash >}} +$ kubectl logs deploy/httpbin-v1 -c httpbin +127.0.0.1 - - [07/Mar/2018:19:02:43 +0000] "GET /headers HTTP/1.1" 200 321 "-" "curl/7.35.0" +{{< /text >}} - {{< text bash >}} - $ kubectl logs deploy/httpbin-v2 -c httpbin - - {{< /text >}} +{{< text bash >}} +$ kubectl logs deploy/httpbin-v2 -c httpbin + +{{< /text >}} ## Mirroring traffic to `httpbin-v2` 1. Change the route rule to mirror traffic to `httpbin-v2`: - - {{< tabset category-name="config-api" >}} - - {{< tab name="Istio APIs" category-value="istio-apis" >}} - - {{< text bash >}} - $ kubectl apply -f - <}} - - This route rule sends 100% of the traffic to `v1`. The last stanza specifies - that you want to mirror (i.e., also send) 100% of the same traffic to the - `httpbin:v2` service. When traffic gets mirrored, - the requests are sent to the mirrored service with their Host/Authority headers - appended with `-shadow`. For example, `cluster-1` becomes `cluster-1-shadow`. - - Also, it is important to note that these requests are mirrored as "fire and - forget", which means that the responses are discarded. - - You can use the `value` field under the `mirrorPercentage` field to mirror a fraction of the traffic, - instead of mirroring all requests. If this field is absent, all traffic will be mirrored. - - {{< /tab >}} - - {{< tab name="Gateway API" category-value="gateway-api" >}} - - {{< text bash >}} - $ kubectl apply -f - <}} + +{{< tab name="Istio APIs" category-value="istio-apis" >}} + +{{< text bash >}} +$ kubectl apply -f - <}} + +This route rule sends 100% of the traffic to `v1`. The last stanza specifies +that you want to mirror (i.e., also send) 100% of the same traffic to the +`httpbin:v2` service. When traffic gets mirrored, +the requests are sent to the mirrored service with their Host/Authority headers +appended with `-shadow`. For example, `cluster-1` becomes `cluster-1-shadow`. + +Also, it is important to note that these requests are mirrored as "fire and +forget", which means that the responses are discarded. + +You can use the `value` field under the `mirrorPercentage` field to mirror a fraction of the traffic, +instead of mirroring all requests. If this field is absent, all traffic will be mirrored. + +{{< /tab >}} + +{{< tab name="Gateway API" category-value="gateway-api" >}} + +{{< text bash >}} +$ kubectl apply -f - <}} + backendRefs: + - name: httpbin-v1 + port: 80 +EOF +{{< /text >}} - This route rule sends 100% of the traffic to `v1`. The `RequestMirror` filter - specifies that you want to mirror (i.e., also send) 100% of the same traffic to the - `httpbin:v2` service. When traffic gets mirrored, - the requests are sent to the mirrored service with their Host/Authority headers - appended with `-shadow`. For example, `cluster-1` becomes `cluster-1-shadow`. +This route rule sends 100% of the traffic to `v1`. The `RequestMirror` filter +specifies that you want to mirror (i.e., also send) 100% of the same traffic to the +`httpbin:v2` service. When traffic gets mirrored, +the requests are sent to the mirrored service with their Host/Authority headers +appended with `-shadow`. For example, `cluster-1` becomes `cluster-1-shadow`. - Also, it is important to note that these requests are mirrored as "fire and - forget", which means that the responses are discarded. +Also, it is important to note that these requests are mirrored as "fire and +forget", which means that the responses are discarded. - {{< /tab >}} +{{< /tab >}} - {{< /tabset >}} +{{< /tabset >}} 1. Send the traffic: - {{< text bash >}} - $ kubectl exec deploy/curl -c curl -- curl -sS http://httpbin:8000/headers - {{< /text >}} +{{< text bash >}} +$ kubectl exec deploy/curl -c curl -- curl -sS http://httpbin:8000/headers +{{< /text >}} - Now, you should see access logging for both `v1` and `v2`. The access logs - created in `v2` are the mirrored requests that are actually going to `v1`. +Now, you should see access logging for both `v1` and `v2`. The access logs +created in `v2` are the mirrored requests that are actually going to `v1`. - {{< text bash >}} - $ kubectl logs deploy/httpbin-v1 -c httpbin - 127.0.0.1 - - [07/Mar/2018:19:02:43 +0000] "GET /headers HTTP/1.1" 200 321 "-" "curl/7.35.0" - 127.0.0.1 - - [07/Mar/2018:19:26:44 +0000] "GET /headers HTTP/1.1" 200 321 "-" "curl/7.35.0" - {{< /text >}} +{{< text bash >}} +$ kubectl logs deploy/httpbin-v1 -c httpbin +127.0.0.1 - - [07/Mar/2018:19:02:43 +0000] "GET /headers HTTP/1.1" 200 321 "-" "curl/7.35.0" +127.0.0.1 - - [07/Mar/2018:19:26:44 +0000] "GET /headers HTTP/1.1" 200 321 "-" "curl/7.35.0" +{{< /text >}} - {{< text bash >}} - $ kubectl logs deploy/httpbin-v2 -c httpbin - 127.0.0.1 - - [07/Mar/2018:19:26:44 +0000] "GET /headers HTTP/1.1" 200 361 "-" "curl/7.35.0" - {{< /text >}} +{{< text bash >}} +$ kubectl logs deploy/httpbin-v2 -c httpbin +127.0.0.1 - - [07/Mar/2018:19:26:44 +0000] "GET /headers HTTP/1.1" 200 361 "-" "curl/7.35.0" +{{< /text >}} ## Cleaning up 1. Remove the rules: +{{< tabset category-name="config-api" >}} - {{< tabset category-name="config-api" >}} +{{< tab name="Istio APIs" category-value="istio-apis" >}} - {{< tab name="Istio APIs" category-value="istio-apis" >}} +{{< text bash >}} +$ kubectl delete virtualservice httpbin +$ kubectl delete destinationrule httpbin +{{< /text >}} - {{< text bash >}} - $ kubectl delete virtualservice httpbin - $ kubectl delete destinationrule httpbin - {{< /text >}} +{{< /tab >}} - {{< /tab >}} +{{< tab name="Gateway API" category-value="gateway-api" >}} - {{< tab name="Gateway API" category-value="gateway-api" >}} +{{< text bash >}} +$ kubectl delete httproute httpbin +$ kubectl delete svc httpbin-v1 httpbin-v2 +{{< /text >}} - {{< text bash >}} - $ kubectl delete httproute httpbin - $ kubectl delete svc httpbin-v1 httpbin-v2 - {{< /text >}} +{{< /tab >}} - {{< /tab >}} - - {{< /tabset >}} +{{< /tabset >}} 1. Delete `httpbin` and `curl` deployments and `httpbin` service: - - {{< text bash >}} - $ kubectl delete deploy httpbin-v1 httpbin-v2 curl - $ kubectl delete svc httpbin - {{< /text >}} +{{< text bash >}} +$ kubectl delete deploy httpbin-v1 httpbin-v2 curl +$ kubectl delete svc httpbin +{{< /text >}} From 8bfb124440f86f14990b00e6f99549419b254a79 Mon Sep 17 00:00:00 2001 From: Mohammad Sahihi Benis Date: Sun, 1 Jun 2025 14:24:41 +0200 Subject: [PATCH 2/4] doc: fix linting issues --- .../traffic-management/mirroring/index.md | 119 +++++++++--------- 1 file changed, 61 insertions(+), 58 deletions(-) diff --git a/content/en/docs/tasks/traffic-management/mirroring/index.md b/content/en/docs/tasks/traffic-management/mirroring/index.md index 3a46239ef462..26c64236829d 100644 --- a/content/en/docs/tasks/traffic-management/mirroring/index.md +++ b/content/en/docs/tasks/traffic-management/mirroring/index.md @@ -224,35 +224,36 @@ EOF {{< /tabset >}} 1. Now, with all traffic directed to `httpbin:v1`, send a request to the service: -{{< text bash json >}} -$ kubectl exec deploy/curl -c curl -- curl -sS http://httpbin:8000/headers -{ - "headers": { - "Accept": "*/*", - "Content-Length": "0", - "Host": "httpbin:8000", - "User-Agent": "curl/7.35.0", - "X-B3-Parentspanid": "57784f8bff90ae0b", - "X-B3-Sampled": "1", - "X-B3-Spanid": "3289ae7257c3f159", - "X-B3-Traceid": "b56eebd279a76f0b57784f8bff90ae0b", - "X-Envoy-Attempt-Count": "1", - "X-Forwarded-Client-Cert": "By=spiffe://cluster.local/ns/default/sa/default;Hash=20afebed6da091c850264cc751b8c9306abac02993f80bdb76282237422bd098;Subject=\"\";URI=spiffe://cluster.local/ns/default/sa/default" - } -} -{{< /text >}} + + {{< text bash json >}} + $ kubectl exec deploy/curl -c curl -- curl -sS http://httpbin:8000/headers + { + "headers": { + "Accept": "*/*", + "Content-Length": "0", + "Host": "httpbin:8000", + "User-Agent": "curl/7.35.0", + "X-B3-Parentspanid": "57784f8bff90ae0b", + "X-B3-Sampled": "1", + "X-B3-Spanid": "3289ae7257c3f159", + "X-B3-Traceid": "b56eebd279a76f0b57784f8bff90ae0b", + "X-Envoy-Attempt-Count": "1", + "X-Forwarded-Client-Cert": "By=spiffe://cluster.local/ns/default/sa/default;Hash=20afebed6da091c850264cc751b8c9306abac02993f80bdb76282237422bd098;Subject=\"\";URI=spiffe://cluster.local/ns/default/sa/default" + } + } + {{< /text >}} 1. Check the logs from `httpbin-v1` and `httpbin-v2` pods. You should see access log entries for `v1` and none for `v2`: -{{< text bash >}} -$ kubectl logs deploy/httpbin-v1 -c httpbin -127.0.0.1 - - [07/Mar/2018:19:02:43 +0000] "GET /headers HTTP/1.1" 200 321 "-" "curl/7.35.0" -{{< /text >}} + {{< text bash >}} + $ kubectl logs deploy/httpbin-v1 -c httpbin + 127.0.0.1 - - [07/Mar/2018:19:02:43 +0000] "GET /headers HTTP/1.1" 200 321 "-" "curl/7.35.0" + {{< /text >}} -{{< text bash >}} -$ kubectl logs deploy/httpbin-v2 -c httpbin - -{{< /text >}} + {{< text bash >}} + $ kubectl logs deploy/httpbin-v2 -c httpbin + + {{< /text >}} ## Mirroring traffic to `httpbin-v2` @@ -340,51 +341,53 @@ forget", which means that the responses are discarded. 1. Send the traffic: -{{< text bash >}} -$ kubectl exec deploy/curl -c curl -- curl -sS http://httpbin:8000/headers -{{< /text >}} + {{< text bash >}} + $ kubectl exec deploy/curl -c curl -- curl -sS http://httpbin:8000/headers + {{< /text >}} -Now, you should see access logging for both `v1` and `v2`. The access logs -created in `v2` are the mirrored requests that are actually going to `v1`. + Now, you should see access logging for both `v1` and `v2`. The access logs + created in `v2` are the mirrored requests that are actually going to `v1`. -{{< text bash >}} -$ kubectl logs deploy/httpbin-v1 -c httpbin -127.0.0.1 - - [07/Mar/2018:19:02:43 +0000] "GET /headers HTTP/1.1" 200 321 "-" "curl/7.35.0" -127.0.0.1 - - [07/Mar/2018:19:26:44 +0000] "GET /headers HTTP/1.1" 200 321 "-" "curl/7.35.0" -{{< /text >}} + {{< text bash >}} + $ kubectl logs deploy/httpbin-v1 -c httpbin + 127.0.0.1 - - [07/Mar/2018:19:02:43 +0000] "GET /headers HTTP/1.1" 200 321 "-" "curl/7.35.0" + 127.0.0.1 - - [07/Mar/2018:19:26:44 +0000] "GET /headers HTTP/1.1" 200 321 "-" "curl/7.35.0" + {{< /text >}} -{{< text bash >}} -$ kubectl logs deploy/httpbin-v2 -c httpbin -127.0.0.1 - - [07/Mar/2018:19:26:44 +0000] "GET /headers HTTP/1.1" 200 361 "-" "curl/7.35.0" -{{< /text >}} + {{< text bash >}} + $ kubectl logs deploy/httpbin-v2 -c httpbin + 127.0.0.1 - - [07/Mar/2018:19:26:44 +0000] "GET /headers HTTP/1.1" 200 361 "-" "curl/7.35.0" + {{< /text >}} ## Cleaning up 1. Remove the rules: -{{< tabset category-name="config-api" >}} -{{< tab name="Istio APIs" category-value="istio-apis" >}} + {{< tabset category-name="config-api" >}} -{{< text bash >}} -$ kubectl delete virtualservice httpbin -$ kubectl delete destinationrule httpbin -{{< /text >}} + {{< tab name="Istio APIs" category-value="istio-apis" >}} -{{< /tab >}} + {{< text bash >}} + $ kubectl delete virtualservice httpbin + $ kubectl delete destinationrule httpbin + {{< /text >}} -{{< tab name="Gateway API" category-value="gateway-api" >}} + {{< /tab >}} -{{< text bash >}} -$ kubectl delete httproute httpbin -$ kubectl delete svc httpbin-v1 httpbin-v2 -{{< /text >}} + {{< tab name="Gateway API" category-value="gateway-api" >}} -{{< /tab >}} + {{< text bash >}} + $ kubectl delete httproute httpbin + $ kubectl delete svc httpbin-v1 httpbin-v2 + {{< /text >}} -{{< /tabset >}} + {{< /tab >}} -1. Delete `httpbin` and `curl` deployments and `httpbin` service: -{{< text bash >}} -$ kubectl delete deploy httpbin-v1 httpbin-v2 curl -$ kubectl delete svc httpbin -{{< /text >}} + {{< /tabset >}} + +2. Delete `httpbin` and `curl` deployments and `httpbin` service: + + {{< text bash >}} + $ kubectl delete deploy httpbin-v1 httpbin-v2 curl + $ kubectl delete svc httpbin + {{< /text >}} From a2876fd0daea2e70998ab5657a2a622e1f8a5e17 Mon Sep 17 00:00:00 2001 From: Mohammad Sahihi Benis Date: Sun, 1 Jun 2025 14:33:29 +0200 Subject: [PATCH 3/4] doc: fix linting issues --- content/en/docs/tasks/traffic-management/mirroring/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/tasks/traffic-management/mirroring/index.md b/content/en/docs/tasks/traffic-management/mirroring/index.md index 26c64236829d..7794a952dfaf 100644 --- a/content/en/docs/tasks/traffic-management/mirroring/index.md +++ b/content/en/docs/tasks/traffic-management/mirroring/index.md @@ -385,7 +385,7 @@ forget", which means that the responses are discarded. {{< /tabset >}} -2. Delete `httpbin` and `curl` deployments and `httpbin` service: +1. Delete `httpbin` and `curl` deployments and `httpbin` service: {{< text bash >}} $ kubectl delete deploy httpbin-v1 httpbin-v2 curl From 7fc93b907e5b72e0ef4b57e3f6cfd5e50de03dcc Mon Sep 17 00:00:00 2001 From: Mohammad Sahihi Benis Date: Wed, 4 Jun 2025 09:38:32 +0200 Subject: [PATCH 4/4] doc: review feedback --- .../traffic-management/mirroring/index.md | 366 +++++++++--------- 1 file changed, 184 insertions(+), 182 deletions(-) diff --git a/content/en/docs/tasks/traffic-management/mirroring/index.md b/content/en/docs/tasks/traffic-management/mirroring/index.md index 7794a952dfaf..660ee702edae 100644 --- a/content/en/docs/tasks/traffic-management/mirroring/index.md +++ b/content/en/docs/tasks/traffic-management/mirroring/index.md @@ -22,6 +22,7 @@ you will apply a rule to mirror a portion of traffic to `v2`. ## Before you begin 1. Set up Istio by following the [Installation guide](/docs/setup/). + 1. Start by deploying two versions of the [httpbin]({{< github_tree >}}/samples/httpbin) service that have access logging enabled: 1. Deploy `httpbin-v1`: @@ -106,29 +107,29 @@ you will apply a rule to mirror a portion of traffic to `v2`. 1. Deploy the `curl` workload you'll use to send requests to the `httpbin` service: -{{< text bash >}} -$ cat <}} + $ cat <}} + replicas: 1 + selector: + matchLabels: + app: curl + template: + metadata: + labels: + app: curl + spec: + containers: + - name: curl + image: curlimages/curl + command: ["/bin/sleep","3650d"] + imagePullPolicy: IfNotPresent + EOF + {{< /text >}} ## Creating a default routing policy @@ -136,92 +137,93 @@ By default Kubernetes load balances across both versions of the `httpbin` servic In this step, you will change that behavior so that all traffic goes to `v1`. 1. Create a default route rule to route all traffic to `v1` of the service: -{{< tabset category-name="config-api" >}} - -{{< tab name="Istio APIs" category-value="istio-apis" >}} - -{{< text bash >}} -$ kubectl apply -f - <}} - -{{< /tab >}} - -{{< tab name="Gateway API" category-value="gateway-api" >}} - -{{< text bash >}} -$ kubectl apply -f - <}} - -{{< /tab >}} - -{{< /tabset >}} + + {{< tabset category-name="config-api" >}} + + {{< tab name="Istio APIs" category-value="istio-apis" >}} + + {{< text bash >}} + $ kubectl apply -f - <}} + + {{< /tab >}} + + {{< tab name="Gateway API" category-value="gateway-api" >}} + + {{< text bash >}} + $ kubectl apply -f - <}} + + {{< /tab >}} + + {{< /tabset >}} 1. Now, with all traffic directed to `httpbin:v1`, send a request to the service: @@ -258,86 +260,86 @@ EOF ## Mirroring traffic to `httpbin-v2` 1. Change the route rule to mirror traffic to `httpbin-v2`: -{{< tabset category-name="config-api" >}} - -{{< tab name="Istio APIs" category-value="istio-apis" >}} - -{{< text bash >}} -$ kubectl apply -f - <}} - -This route rule sends 100% of the traffic to `v1`. The last stanza specifies -that you want to mirror (i.e., also send) 100% of the same traffic to the -`httpbin:v2` service. When traffic gets mirrored, -the requests are sent to the mirrored service with their Host/Authority headers -appended with `-shadow`. For example, `cluster-1` becomes `cluster-1-shadow`. - -Also, it is important to note that these requests are mirrored as "fire and -forget", which means that the responses are discarded. - -You can use the `value` field under the `mirrorPercentage` field to mirror a fraction of the traffic, -instead of mirroring all requests. If this field is absent, all traffic will be mirrored. - -{{< /tab >}} - -{{< tab name="Gateway API" category-value="gateway-api" >}} - -{{< text bash >}} -$ kubectl apply -f - <}} + + {{< tab name="Istio APIs" category-value="istio-apis" >}} + + {{< text bash >}} + $ kubectl apply -f - <}} + + This route rule sends 100% of the traffic to `v1`. The last stanza specifies + that you want to mirror (i.e., also send) 100% of the same traffic to the + `httpbin:v2` service. When traffic gets mirrored, + the requests are sent to the mirrored service with their Host/Authority headers + appended with `-shadow`. For example, `cluster-1` becomes `cluster-1-shadow`. + + Also, it is important to note that these requests are mirrored as "fire and + forget", which means that the responses are discarded. + + You can use the `value` field under the `mirrorPercentage` field to mirror a fraction of the traffic, + instead of mirroring all requests. If this field is absent, all traffic will be mirrored. + + {{< /tab >}} + + {{< tab name="Gateway API" category-value="gateway-api" >}} + + {{< text bash >}} + $ kubectl apply -f - <}} + EOF + {{< /text >}} -This route rule sends 100% of the traffic to `v1`. The `RequestMirror` filter -specifies that you want to mirror (i.e., also send) 100% of the same traffic to the -`httpbin:v2` service. When traffic gets mirrored, -the requests are sent to the mirrored service with their Host/Authority headers -appended with `-shadow`. For example, `cluster-1` becomes `cluster-1-shadow`. + This route rule sends 100% of the traffic to `v1`. The `RequestMirror` filter + specifies that you want to mirror (i.e., also send) 100% of the same traffic to the + `httpbin:v2` service. When traffic gets mirrored, + the requests are sent to the mirrored service with their Host/Authority headers + appended with `-shadow`. For example, `cluster-1` becomes `cluster-1-shadow`. -Also, it is important to note that these requests are mirrored as "fire and -forget", which means that the responses are discarded. + Also, it is important to note that these requests are mirrored as "fire and + forget", which means that the responses are discarded. -{{< /tab >}} + {{< /tab >}} -{{< /tabset >}} + {{< /tabset >}} 1. Send the traffic: