Silence curl command (#8773)

* Silence curl command

* Update more files with -sS (adding S to show errors)

* Over-agressive on the -S and causing some tests to fail.

* Remove more curl -S flags
This commit is contained in:
Eric Van Norman 2021-01-20 11:45:50 -06:00 committed by GitHub
parent 6abdcec827
commit bea8d187e5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
51 changed files with 138 additions and 138 deletions

View File

@ -138,7 +138,7 @@ If you use GKE, please ensure your cluster has at least 4 standard GKE nodes. If
example from `ratings`: example from `ratings`:
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl productpage:9080/productpage | grep -o "<title>.*</title>" $ kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>"
<title>Simple Bookstore App</title> <title>Simple Bookstore App</title>
{{< /text >}} {{< /text >}}

View File

@ -60,7 +60,7 @@ reviews-v3-1813607990-8ch52 2/2 Running 0 6m
ENDSNIP ENDSNIP
snip_start_the_application_services_6() { snip_start_the_application_services_6() {
kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl productpage:9080/productpage | grep -o "<title>.*</title>" kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>"
} }
! read -r -d '' snip_start_the_application_services_6_out <<\ENDSNIP ! read -r -d '' snip_start_the_application_services_6_out <<\ENDSNIP

View File

@ -44,7 +44,7 @@ tests, end-to-end tests and tests in a staging environment.
1. Send a request to the pod and see that it returns the correct result: 1. Send a request to the pod and see that it returns the correct result:
{{< text bash >}} {{< text bash >}}
$ kubectl exec $(kubectl get pod -l app=sleep -o jsonpath='{.items[0].metadata.name}') -- curl "$REVIEWS_V2_POD_IP:9080/reviews/7" $ kubectl exec $(kubectl get pod -l app=sleep -o jsonpath='{.items[0].metadata.name}') -- curl -sS "$REVIEWS_V2_POD_IP:9080/reviews/7"
{"id": "7","reviews": [{ "reviewer": "Reviewer1", "text": "An extremely entertaining play by Shakespeare. The slapstick humour is refreshing!", "rating": {"stars": 5, "color": "black"}},{ "reviewer": "Reviewer2", "text": "Absolutely fun and entertaining. The play lacks thematic depth when compared to other plays by Shakespeare.", "rating": {"stars": 4, "color": "black"}}]} {"id": "7","reviews": [{ "reviewer": "Reviewer1", "text": "An extremely entertaining play by Shakespeare. The slapstick humour is refreshing!", "rating": {"stars": 5, "color": "black"}},{ "reviewer": "Reviewer2", "text": "Absolutely fun and entertaining. The play lacks thematic depth when compared to other plays by Shakespeare.", "rating": {"stars": 4, "color": "black"}}]}
{{< /text >}} {{< /text >}}

View File

@ -97,7 +97,7 @@ microservice.
with a curl command from your testing pod: with a curl command from your testing pod:
{{< text bash >}} {{< text bash >}}
$ kubectl exec $(kubectl get pod -l app=sleep -o jsonpath='{.items[0].metadata.name}') -c sleep -- curl productpage:9080/productpage | grep -o "<title>.*</title>" $ kubectl exec $(kubectl get pod -l app=sleep -o jsonpath='{.items[0].metadata.name}') -c sleep -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>"
<title>Simple Bookstore App</title> <title>Simple Bookstore App</title>
{{< /text >}} {{< /text >}}

View File

@ -17,7 +17,7 @@ Test your microservice, in production!
1. Issue an HTTP request from the testing pod to one of your services: 1. Issue an HTTP request from the testing pod to one of your services:
{{< text bash >}} {{< text bash >}}
$ kubectl exec $(kubectl get pod -l app=sleep -o jsonpath='{.items[0].metadata.name}') -- curl http://ratings:9080/ratings/7 $ kubectl exec $(kubectl get pod -l app=sleep -o jsonpath='{.items[0].metadata.name}') -- curl -sS http://ratings:9080/ratings/7
{{< /text >}} {{< /text >}}
## Chaos testing ## Chaos testing

View File

@ -126,7 +126,7 @@ At this point we should be able to send traffic to `httpbin.default.svc.cluster.
1. Send a request from the `sleep` service on the pod to the VM's HTTP service: 1. Send a request from the `sleep` service on the pod to the VM's HTTP service:
{{< text bash >}} {{< text bash >}}
$ kubectl exec -it sleep-88ddbcfdd-rm42k -c sleep -- curl cloud-vm.${VM_NAMESPACE}.svc.cluster.local:8080 $ kubectl exec -it sleep-88ddbcfdd-rm42k -c sleep -- curl -sS cloud-vm.${VM_NAMESPACE}.svc.cluster.local:8080
{{< /text >}} {{< /text >}}
You should see something similar to the output below. You should see something similar to the output below.

View File

@ -128,7 +128,7 @@ $ curl -v httpbin.default.svc.cluster.local:8000/headers
1. Send a request from the `sleep` service on the pod to the virtual machine HTTP service: 1. Send a request from the `sleep` service on the pod to the virtual machine HTTP service:
{{< text bash >}} {{< text bash >}}
$ kubectl exec -it sleep-88ddbcfdd-rm42k -c sleep -- curl cloud-vm.${VM_NAMESPACE}.svc.cluster.local:8080 $ kubectl exec -it sleep-88ddbcfdd-rm42k -c sleep -- curl -sS cloud-vm.${VM_NAMESPACE}.svc.cluster.local:8080
{{< /text >}} {{< /text >}}
You will see output similar to this: You will see output similar to this:

View File

@ -78,7 +78,7 @@ and how to transition to a new root certificate with a 10 year lifetime.
The following command shows an example to check the Envoys certificate for a pod. The following command shows an example to check the Envoys certificate for a pod.
{{< text bash>}} {{< text bash>}}
$ kubectl exec [YOUR_POD] -c istio-proxy -n [YOUR_NAMESPACE] -- curl http://localhost:15000/certs | head -c 1000 $ kubectl exec [YOUR_POD] -c istio-proxy -n [YOUR_NAMESPACE] -- curl -sS http://localhost:15000/certs | head -c 1000
{ {
"certificates": [ "certificates": [
{ {

View File

@ -161,7 +161,7 @@ Follow these steps to get started with Istio:
checking for the page title in the response: checking for the page title in the response:
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -s productpage:9080/productpage | grep -o "<title>.*</title>" $ kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>"
<title>Simple Bookstore App</title> <title>Simple Bookstore App</title>
{{< /text >}} {{< /text >}}

View File

@ -101,7 +101,7 @@ reviews-v3-7dbcdcbc56-m8dph 2/2 Running 0 2m41s
ENDSNIP ENDSNIP
snip_deploy_the_sample_application_bookinfo_4() { snip_deploy_the_sample_application_bookinfo_4() {
kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -s productpage:9080/productpage | grep -o "<title>.*</title>" kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>"
} }
! read -r -d '' snip_deploy_the_sample_application_bookinfo_4_out <<\ENDSNIP ! read -r -d '' snip_deploy_the_sample_application_bookinfo_4_out <<\ENDSNIP

View File

@ -142,7 +142,7 @@ Send one request from the `Sleep` pod on `cluster1` to the `HelloWorld` service:
$ kubectl exec --context="${CTX_CLUSTER1}" -n sample -c sleep \ $ kubectl exec --context="${CTX_CLUSTER1}" -n sample -c sleep \
"$(kubectl get pod --context="${CTX_CLUSTER1}" -n sample -l \ "$(kubectl get pod --context="${CTX_CLUSTER1}" -n sample -l \
app=sleep -o jsonpath='{.items[0].metadata.name}')" \ app=sleep -o jsonpath='{.items[0].metadata.name}')" \
-- curl helloworld.sample:5000/hello -- curl -sS helloworld.sample:5000/hello
{{< /text >}} {{< /text >}}
Repeat this request several times and verify that the `HelloWorld` version Repeat this request several times and verify that the `HelloWorld` version
@ -160,7 +160,7 @@ Now repeat this process from the `Sleep` pod on `cluster2`:
$ kubectl exec --context="${CTX_CLUSTER2}" -n sample -c sleep \ $ kubectl exec --context="${CTX_CLUSTER2}" -n sample -c sleep \
"$(kubectl get pod --context="${CTX_CLUSTER2}" -n sample -l \ "$(kubectl get pod --context="${CTX_CLUSTER2}" -n sample -l \
app=sleep -o jsonpath='{.items[0].metadata.name}')" \ app=sleep -o jsonpath='{.items[0].metadata.name}')" \
-- curl helloworld.sample:5000/hello -- curl -sS helloworld.sample:5000/hello
{{< /text >}} {{< /text >}}
Repeat this request several times and verify that the `HelloWorld` version Repeat this request several times and verify that the `HelloWorld` version

View File

@ -100,7 +100,7 @@ snip_verifying_crosscluster_traffic_1() {
kubectl exec --context="${CTX_CLUSTER1}" -n sample -c sleep \ kubectl exec --context="${CTX_CLUSTER1}" -n sample -c sleep \
"$(kubectl get pod --context="${CTX_CLUSTER1}" -n sample -l \ "$(kubectl get pod --context="${CTX_CLUSTER1}" -n sample -l \
app=sleep -o jsonpath='{.items[0].metadata.name}')" \ app=sleep -o jsonpath='{.items[0].metadata.name}')" \
-- curl helloworld.sample:5000/hello -- curl -sS helloworld.sample:5000/hello
} }
! read -r -d '' snip_verifying_crosscluster_traffic_2 <<\ENDSNIP ! read -r -d '' snip_verifying_crosscluster_traffic_2 <<\ENDSNIP
@ -113,7 +113,7 @@ snip_verifying_crosscluster_traffic_3() {
kubectl exec --context="${CTX_CLUSTER2}" -n sample -c sleep \ kubectl exec --context="${CTX_CLUSTER2}" -n sample -c sleep \
"$(kubectl get pod --context="${CTX_CLUSTER2}" -n sample -l \ "$(kubectl get pod --context="${CTX_CLUSTER2}" -n sample -l \
app=sleep -o jsonpath='{.items[0].metadata.name}')" \ app=sleep -o jsonpath='{.items[0].metadata.name}')" \
-- curl helloworld.sample:5000/hello -- curl -sS helloworld.sample:5000/hello
} }
! read -r -d '' snip_verifying_crosscluster_traffic_4 <<\ENDSNIP ! read -r -d '' snip_verifying_crosscluster_traffic_4 <<\ENDSNIP

View File

@ -89,7 +89,7 @@ The following table shows an example using the default access log format for a r
1. Send a request from `sleep` to `httpbin`: 1. Send a request from `sleep` to `httpbin`:
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$SOURCE_POD" -c sleep -- curl -v httpbin:8000/status/418 $ kubectl exec "$SOURCE_POD" -c sleep -- curl -sS -v httpbin:8000/status/418
... ...
< HTTP/1.1 418 Unknown < HTTP/1.1 418 Unknown
< server: envoy < server: envoy

View File

@ -35,7 +35,7 @@ ENDSNIP
ENDSNIP ENDSNIP
snip_test_the_access_log_1() { snip_test_the_access_log_1() {
kubectl exec "$SOURCE_POD" -c sleep -- curl -v httpbin:8000/status/418 kubectl exec "$SOURCE_POD" -c sleep -- curl -sS -v httpbin:8000/status/418
} }
! read -r -d '' snip_test_the_access_log_1_out <<\ENDSNIP ! read -r -d '' snip_test_the_access_log_1_out <<\ENDSNIP

View File

@ -319,7 +319,7 @@ spec:
`2xx`. Alternatively, use the following command to verify that Istio generates the data for your new dimension: `2xx`. Alternatively, use the following command to verify that Istio generates the data for your new dimension:
{{< text bash >}} {{< text bash >}}
$ kubectl exec pod-name -c istio-proxy -- curl 'localhost:15000/stats/prometheus' | grep istio_ $ kubectl exec pod-name -c istio-proxy -- curl -sS 'localhost:15000/stats/prometheus' | grep istio_
{{< /text >}} {{< /text >}}
In the output, locate the metric (e.g. `istio_requests_total`) and verify the presence of the new or changed dimension. In the output, locate the metric (e.g. `istio_requests_total`) and verify the presence of the new or changed dimension.

View File

@ -155,7 +155,7 @@ Use the following command to verify that Istio generates the data for your new
or modified dimensions: or modified dimensions:
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$(kubectl get pod -l app=productpage -o jsonpath='{.items[0].metadata.name}')" -c istio-proxy -- curl 'localhost:15000/stats/prometheus' | grep istio_requests_total $ kubectl exec "$(kubectl get pod -l app=productpage -o jsonpath='{.items[0].metadata.name}')" -c istio-proxy -- curl -sS 'localhost:15000/stats/prometheus' | grep istio_requests_total
{{< /text >}} {{< /text >}}
For example, in the output, locate the metric `istio_requests_total` and For example, in the output, locate the metric `istio_requests_total` and

View File

@ -89,7 +89,7 @@ curl "http://$GATEWAY_URL/productpage"
} }
snip_verify_the_results_2() { snip_verify_the_results_2() {
kubectl exec "$(kubectl get pod -l app=productpage -o jsonpath='{.items[0].metadata.name}')" -c istio-proxy -- curl 'localhost:15000/stats/prometheus' | grep istio_requests_total kubectl exec "$(kubectl get pod -l app=productpage -o jsonpath='{.items[0].metadata.name}')" -c istio-proxy -- curl -sS 'localhost:15000/stats/prometheus' | grep istio_requests_total
} }
! read -r -d '' snip_use_expressions_for_values_1 <<\ENDSNIP ! read -r -d '' snip_use_expressions_for_values_1 <<\ENDSNIP

View File

@ -325,7 +325,7 @@ the local rate limit for `productpage` instances allows 10 req/min.
To confirm this, send internal `productpage` requests, from the `ratings` pod, using the following `curl` command: To confirm this, send internal `productpage` requests, from the `ratings` pod, using the following `curl` command:
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl productpage:9080/productpage | grep -o "<title>.*</title>" $ kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>"
<title>Simple Bookstore App</title> <title>Simple Bookstore App</title>
{{< /text >}} {{< /text >}}

View File

@ -56,7 +56,7 @@ $ kubectl exec "$(kubectl get pod -l app=sleep -n bar -o jsonpath={.items..metad
This one-liner command conveniently iterates through all reachability combinations: This one-liner command conveniently iterates through all reachability combinations:
{{< text bash >}} {{< text bash >}}
$ for from in "foo" "bar" "legacy"; do for to in "foo" "bar" "legacy"; do kubectl exec "$(kubectl get pod -l app=sleep -n ${from} -o jsonpath={.items..metadata.name})" -c sleep -n ${from} -- curl "http://httpbin.${to}:8000/ip" -s -o /dev/null -w "sleep.${from} to httpbin.${to}: %{http_code}\n"; done; done $ for from in "foo" "bar" "legacy"; do for to in "foo" "bar" "legacy"; do kubectl exec "$(kubectl get pod -l app=sleep -n ${from} -o jsonpath={.items..metadata.name})" -c sleep -n ${from} -- curl -s "http://httpbin.${to}:8000/ip" -s -o /dev/null -w "sleep.${from} to httpbin.${to}: %{http_code}\n"; done; done
sleep.foo to httpbin.foo: 200 sleep.foo to httpbin.foo: 200
sleep.foo to httpbin.bar: 200 sleep.foo to httpbin.bar: 200
sleep.foo to httpbin.legacy: 200 sleep.foo to httpbin.legacy: 200
@ -99,7 +99,7 @@ upstream request to the backend. That header's presence is evidence that mutual
used. For example: used. For example:
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl http://httpbin.foo:8000/headers -s | grep X-Forwarded-Client-Cert | sed 's/Hash=[a-z0-9]*;/Hash=<redacted>;/' $ kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl -s http://httpbin.foo:8000/headers -s | grep X-Forwarded-Client-Cert | sed 's/Hash=[a-z0-9]*;/Hash=<redacted>;/'
"X-Forwarded-Client-Cert": "By=spiffe://cluster.local/ns/foo/sa/httpbin;Hash=<redacted>;Subject=\"\";URI=spiffe://cluster.local/ns/foo/sa/sleep" "X-Forwarded-Client-Cert": "By=spiffe://cluster.local/ns/foo/sa/httpbin;Hash=<redacted>;Subject=\"\";URI=spiffe://cluster.local/ns/foo/sa/sleep"
{{< /text >}} {{< /text >}}

View File

@ -45,7 +45,7 @@ kubectl exec "$(kubectl get pod -l app=sleep -n bar -o jsonpath={.items..metadat
ENDSNIP ENDSNIP
snip_setup_3() { snip_setup_3() {
for from in "foo" "bar" "legacy"; do for to in "foo" "bar" "legacy"; do kubectl exec "$(kubectl get pod -l app=sleep -n ${from} -o jsonpath={.items..metadata.name})" -c sleep -n ${from} -- curl "http://httpbin.${to}:8000/ip" -s -o /dev/null -w "sleep.${from} to httpbin.${to}: %{http_code}\n"; done; done for from in "foo" "bar" "legacy"; do for to in "foo" "bar" "legacy"; do kubectl exec "$(kubectl get pod -l app=sleep -n ${from} -o jsonpath={.items..metadata.name})" -c sleep -n ${from} -- curl -s "http://httpbin.${to}:8000/ip" -s -o /dev/null -w "sleep.${from} to httpbin.${to}: %{http_code}\n"; done; done
} }
! read -r -d '' snip_setup_3_out <<\ENDSNIP ! read -r -d '' snip_setup_3_out <<\ENDSNIP
@ -77,7 +77,7 @@ kubectl get destinationrules.networking.istio.io --all-namespaces -o yaml | grep
ENDSNIP ENDSNIP
snip_auto_mutual_tls_1() { snip_auto_mutual_tls_1() {
kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl http://httpbin.foo:8000/headers -s | grep X-Forwarded-Client-Cert | sed 's/Hash=[a-z0-9]*;/Hash=<redacted>;/' kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl -s http://httpbin.foo:8000/headers -s | grep X-Forwarded-Client-Cert | sed 's/Hash=[a-z0-9]*;/Hash=<redacted>;/'
} }
! read -r -d '' snip_auto_mutual_tls_1_out <<\ENDSNIP ! read -r -d '' snip_auto_mutual_tls_1_out <<\ENDSNIP

View File

@ -33,7 +33,7 @@ Before tackling this task you must perform the following actions:
* Verify that `sleep` talks to `httpbin` with the following command: * Verify that `sleep` talks to `httpbin` with the following command:
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl http://httpbin.foo:8000/ip -s -o /dev/null -w "%{http_code}\n" $ kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl http://httpbin.foo:8000/ip -sS -o /dev/null -w "%{http_code}\n"
200 200
{{< /text >}} {{< /text >}}
@ -71,14 +71,14 @@ In this case, the policy denies requests if their method is `GET`.
1. Verify that `GET` requests are denied: 1. Verify that `GET` requests are denied:
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/get" -X GET -s -o /dev/null -w "%{http_code}\n" $ kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/get" -X GET -sS -o /dev/null -w "%{http_code}\n"
403 403
{{< /text >}} {{< /text >}}
1. Verify that `POST` requests are allowed: 1. Verify that `POST` requests are allowed:
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/post" -X POST -s -o /dev/null -w "%{http_code}\n" $ kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/post" -X POST -sS -o /dev/null -w "%{http_code}\n"
200 200
{{< /text >}} {{< /text >}}
@ -112,14 +112,14 @@ a header value that is not `admin`:
1. Verify that `GET` requests with the HTTP header `x-token: admin` are allowed: 1. Verify that `GET` requests with the HTTP header `x-token: admin` are allowed:
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/get" -X GET -H "x-token: admin" -s -o /dev/null -w "%{http_code}\n" $ kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/get" -X GET -H "x-token: admin" -sS -o /dev/null -w "%{http_code}\n"
200 200
{{< /text >}} {{< /text >}}
1. Verify that GET requests with the HTTP header `x-token: guest` are denied: 1. Verify that GET requests with the HTTP header `x-token: guest` are denied:
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/get" -X GET -H "x-token: guest" -s -o /dev/null -w "%{http_code}\n" $ kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/get" -X GET -H "x-token: guest" -sS -o /dev/null -w "%{http_code}\n"
403 403
{{< /text >}} {{< /text >}}

View File

@ -27,7 +27,7 @@ kubectl apply -f <(istioctl kube-inject -f samples/sleep/sleep.yaml) -n foo
} }
snip_before_you_begin_2() { snip_before_you_begin_2() {
kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl http://httpbin.foo:8000/ip -s -o /dev/null -w "%{http_code}\n" kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl http://httpbin.foo:8000/ip -sS -o /dev/null -w "%{http_code}\n"
} }
! read -r -d '' snip_before_you_begin_2_out <<\ENDSNIP ! read -r -d '' snip_before_you_begin_2_out <<\ENDSNIP
@ -54,7 +54,7 @@ EOF
} }
snip_explicitly_deny_a_request_2() { snip_explicitly_deny_a_request_2() {
kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/get" -X GET -s -o /dev/null -w "%{http_code}\n" kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/get" -X GET -sS -o /dev/null -w "%{http_code}\n"
} }
! read -r -d '' snip_explicitly_deny_a_request_2_out <<\ENDSNIP ! read -r -d '' snip_explicitly_deny_a_request_2_out <<\ENDSNIP
@ -62,7 +62,7 @@ kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadat
ENDSNIP ENDSNIP
snip_explicitly_deny_a_request_3() { snip_explicitly_deny_a_request_3() {
kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/post" -X POST -s -o /dev/null -w "%{http_code}\n" kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/post" -X POST -sS -o /dev/null -w "%{http_code}\n"
} }
! read -r -d '' snip_explicitly_deny_a_request_3_out <<\ENDSNIP ! read -r -d '' snip_explicitly_deny_a_request_3_out <<\ENDSNIP
@ -92,7 +92,7 @@ EOF
} }
snip_explicitly_deny_a_request_5() { snip_explicitly_deny_a_request_5() {
kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/get" -X GET -H "x-token: admin" -s -o /dev/null -w "%{http_code}\n" kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/get" -X GET -H "x-token: admin" -sS -o /dev/null -w "%{http_code}\n"
} }
! read -r -d '' snip_explicitly_deny_a_request_5_out <<\ENDSNIP ! read -r -d '' snip_explicitly_deny_a_request_5_out <<\ENDSNIP
@ -100,7 +100,7 @@ kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadat
ENDSNIP ENDSNIP
snip_explicitly_deny_a_request_6() { snip_explicitly_deny_a_request_6() {
kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/get" -X GET -H "x-token: guest" -s -o /dev/null -w "%{http_code}\n" kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/get" -X GET -H "x-token: guest" -sS -o /dev/null -w "%{http_code}\n"
} }
! read -r -d '' snip_explicitly_deny_a_request_6_out <<\ENDSNIP ! read -r -d '' snip_explicitly_deny_a_request_6_out <<\ENDSNIP

View File

@ -48,7 +48,7 @@ function verify {
for ((i=1; i<="$REPEAT"; i++)); do for ((i=1; i<="$REPEAT"; i++)); do
set +e set +e
response=$(kubectl exec "${sleep_pod}" -c sleep -n "default" -- curl "${ingress_url}" -s -w "\n%{http_code}\n") response=$(kubectl exec "${sleep_pod}" -c sleep -n "default" -- curl "${ingress_url}" -sS -w "\n%{http_code}\n")
set -e set -e
mapfile -t respArray <<< "$response" mapfile -t respArray <<< "$response"
code=${respArray[-1]} code=${respArray[-1]}

View File

@ -35,7 +35,7 @@ Deploy the example namespace and workloads using these commands:
* Verify that `sleep` successfully communicates with `httpbin` using this command: * Verify that `sleep` successfully communicates with `httpbin` using this command:
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl http://httpbin.foo:8000/ip -s -o /dev/null -w "%{http_code}\n" $ kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl http://httpbin.foo:8000/ip -sS -o /dev/null -w "%{http_code}\n"
200 200
{{< /text >}} {{< /text >}}
@ -70,14 +70,14 @@ accepts a JWT issued by `testing@secure.istio.io`:
1. Verify that a request with an invalid JWT is denied: 1. Verify that a request with an invalid JWT is denied:
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/headers" -s -o /dev/null -H "Authorization: Bearer invalidToken" -w "%{http_code}\n" $ kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/headers" -sS -o /dev/null -H "Authorization: Bearer invalidToken" -w "%{http_code}\n"
401 401
{{< /text >}} {{< /text >}}
1. Verify that a request without a JWT is allowed because there is no authorization policy: 1. Verify that a request without a JWT is allowed because there is no authorization policy:
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/headers" -s -o /dev/null -w "%{http_code}\n" $ kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/headers" -sS -o /dev/null -w "%{http_code}\n"
200 200
{{< /text >}} {{< /text >}}
@ -117,14 +117,14 @@ This causes Istio to generate the attribute `requestPrincipal` with the value `t
1. Verify that a request with a valid JWT is allowed: 1. Verify that a request with a valid JWT is allowed:
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/headers" -s -o /dev/null -H "Authorization: Bearer $TOKEN" -w "%{http_code}\n" $ kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/headers" -sS -o /dev/null -H "Authorization: Bearer $TOKEN" -w "%{http_code}\n"
200 200
{{< /text >}} {{< /text >}}
1. Verify that a request without a JWT is denied: 1. Verify that a request without a JWT is denied:
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/headers" -s -o /dev/null -w "%{http_code}\n" $ kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/headers" -sS -o /dev/null -w "%{http_code}\n"
403 403
{{< /text >}} {{< /text >}}
@ -167,14 +167,14 @@ the JWT to have a claim named `groups` containing the value `group1`:
1. Verify that a request with the JWT that includes `group1` in the `groups` claim is allowed: 1. Verify that a request with the JWT that includes `group1` in the `groups` claim is allowed:
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/headers" -s -o /dev/null -H "Authorization: Bearer $TOKEN_GROUP" -w "%{http_code}\n" $ kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/headers" -sS -o /dev/null -H "Authorization: Bearer $TOKEN_GROUP" -w "%{http_code}\n"
200 200
{{< /text >}} {{< /text >}}
1. Verify that a request with a JWT, which doesnt have the `groups` claim is rejected: 1. Verify that a request with a JWT, which doesnt have the `groups` claim is rejected:
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/headers" -s -o /dev/null -H "Authorization: Bearer $TOKEN" -w "%{http_code}\n" $ kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/headers" -sS -o /dev/null -H "Authorization: Bearer $TOKEN" -w "%{http_code}\n"
403 403
{{< /text >}} {{< /text >}}

View File

@ -27,7 +27,7 @@ kubectl apply -f <(istioctl kube-inject -f samples/sleep/sleep.yaml) -n foo
} }
snip_before_you_begin_2() { snip_before_you_begin_2() {
kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl http://httpbin.foo:8000/ip -s -o /dev/null -w "%{http_code}\n" kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl http://httpbin.foo:8000/ip -sS -o /dev/null -w "%{http_code}\n"
} }
! read -r -d '' snip_before_you_begin_2_out <<\ENDSNIP ! read -r -d '' snip_before_you_begin_2_out <<\ENDSNIP
@ -52,7 +52,7 @@ EOF
} }
snip_allow_requests_with_valid_jwt_and_listtyped_claims_2() { snip_allow_requests_with_valid_jwt_and_listtyped_claims_2() {
kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/headers" -s -o /dev/null -H "Authorization: Bearer invalidToken" -w "%{http_code}\n" kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/headers" -sS -o /dev/null -H "Authorization: Bearer invalidToken" -w "%{http_code}\n"
} }
! read -r -d '' snip_allow_requests_with_valid_jwt_and_listtyped_claims_2_out <<\ENDSNIP ! read -r -d '' snip_allow_requests_with_valid_jwt_and_listtyped_claims_2_out <<\ENDSNIP
@ -60,7 +60,7 @@ kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadat
ENDSNIP ENDSNIP
snip_allow_requests_with_valid_jwt_and_listtyped_claims_3() { snip_allow_requests_with_valid_jwt_and_listtyped_claims_3() {
kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/headers" -s -o /dev/null -w "%{http_code}\n" kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/headers" -sS -o /dev/null -w "%{http_code}\n"
} }
! read -r -d '' snip_allow_requests_with_valid_jwt_and_listtyped_claims_3_out <<\ENDSNIP ! read -r -d '' snip_allow_requests_with_valid_jwt_and_listtyped_claims_3_out <<\ENDSNIP
@ -95,7 +95,7 @@ TOKEN=$(curl https://raw.githubusercontent.com/istio/istio/release-1.9/security/
ENDSNIP ENDSNIP
snip_allow_requests_with_valid_jwt_and_listtyped_claims_6() { snip_allow_requests_with_valid_jwt_and_listtyped_claims_6() {
kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/headers" -s -o /dev/null -H "Authorization: Bearer $TOKEN" -w "%{http_code}\n" kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/headers" -sS -o /dev/null -H "Authorization: Bearer $TOKEN" -w "%{http_code}\n"
} }
! read -r -d '' snip_allow_requests_with_valid_jwt_and_listtyped_claims_6_out <<\ENDSNIP ! read -r -d '' snip_allow_requests_with_valid_jwt_and_listtyped_claims_6_out <<\ENDSNIP
@ -103,7 +103,7 @@ kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadat
ENDSNIP ENDSNIP
snip_allow_requests_with_valid_jwt_and_listtyped_claims_7() { snip_allow_requests_with_valid_jwt_and_listtyped_claims_7() {
kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/headers" -s -o /dev/null -w "%{http_code}\n" kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/headers" -sS -o /dev/null -w "%{http_code}\n"
} }
! read -r -d '' snip_allow_requests_with_valid_jwt_and_listtyped_claims_7_out <<\ENDSNIP ! read -r -d '' snip_allow_requests_with_valid_jwt_and_listtyped_claims_7_out <<\ENDSNIP
@ -141,7 +141,7 @@ TOKEN_GROUP=$(curl https://raw.githubusercontent.com/istio/istio/release-1.9/sec
ENDSNIP ENDSNIP
snip_allow_requests_with_valid_jwt_and_listtyped_claims_10() { snip_allow_requests_with_valid_jwt_and_listtyped_claims_10() {
kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/headers" -s -o /dev/null -H "Authorization: Bearer $TOKEN_GROUP" -w "%{http_code}\n" kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/headers" -sS -o /dev/null -H "Authorization: Bearer $TOKEN_GROUP" -w "%{http_code}\n"
} }
! read -r -d '' snip_allow_requests_with_valid_jwt_and_listtyped_claims_10_out <<\ENDSNIP ! read -r -d '' snip_allow_requests_with_valid_jwt_and_listtyped_claims_10_out <<\ENDSNIP
@ -149,7 +149,7 @@ kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadat
ENDSNIP ENDSNIP
snip_allow_requests_with_valid_jwt_and_listtyped_claims_11() { snip_allow_requests_with_valid_jwt_and_listtyped_claims_11() {
kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/headers" -s -o /dev/null -H "Authorization: Bearer $TOKEN" -w "%{http_code}\n" kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl "http://httpbin.foo:8000/headers" -sS -o /dev/null -H "Authorization: Bearer $TOKEN" -w "%{http_code}\n"
} }
! read -r -d '' snip_allow_requests_with_valid_jwt_and_listtyped_claims_11_out <<\ENDSNIP ! read -r -d '' snip_allow_requests_with_valid_jwt_and_listtyped_claims_11_out <<\ENDSNIP

View File

@ -70,14 +70,14 @@ Notice that it may take tens of seconds for the authorization policy to be propa
* `sleep` in the `default` namespace are denied. * `sleep` in the `default` namespace are denied.
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name})" -c sleep -- curl http://httpbin.default:8000/ip -s -o /dev/null -w "%{http_code}\n" $ kubectl exec "$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name})" -c sleep -- curl http://httpbin.default:8000/ip -sS -o /dev/null -w "%{http_code}\n"
403 403
{{< /text >}} {{< /text >}}
* `sleep` in the `sleep-allow` namespace are allowed. * `sleep` in the `sleep-allow` namespace are allowed.
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$(kubectl -n sleep-allow get pod -l app=sleep -o jsonpath={.items..metadata.name})" -c sleep -n sleep-allow -- curl http://httpbin.default:8000/ip -s -o /dev/null -w "%{http_code}\n" $ kubectl exec "$(kubectl -n sleep-allow get pod -l app=sleep -o jsonpath={.items..metadata.name})" -c sleep -n sleep-allow -- curl http://httpbin.default:8000/ip -sS -o /dev/null -w "%{http_code}\n"
200 200
{{< /text >}} {{< /text >}}
@ -110,12 +110,12 @@ Notice that it may take tens of seconds for the authorization policy to be propa
1. Verify that requests to `httpbin` from both `sleep` in `default` namespace and `sleep-allow` namespace are denied. 1. Verify that requests to `httpbin` from both `sleep` in `default` namespace and `sleep-allow` namespace are denied.
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name})" -c sleep -- curl http://httpbin.default:8000/ip -s -o /dev/null -w "%{http_code}\n" $ kubectl exec "$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name})" -c sleep -- curl http://httpbin.default:8000/ip -sS -o /dev/null -w "%{http_code}\n"
403 403
{{< /text >}} {{< /text >}}
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$(kubectl -n sleep-allow get pod -l app=sleep -o jsonpath={.items..metadata.name})" -c sleep -n sleep-allow -- curl http://httpbin.default:8000/ip -s -o /dev/null -w "%{http_code}\n" $ kubectl exec "$(kubectl -n sleep-allow get pod -l app=sleep -o jsonpath={.items..metadata.name})" -c sleep -n sleep-allow -- curl http://httpbin.default:8000/ip -sS -o /dev/null -w "%{http_code}\n"
403 403
{{< /text >}} {{< /text >}}
@ -148,14 +148,14 @@ Notice that it may take tens of seconds for the authorization policy to be propa
* `sleep` in the `default` namespace are denied. * `sleep` in the `default` namespace are denied.
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name})" -c sleep -- curl http://httpbin.default:8000/ip -s -o /dev/null -w "%{http_code}\n" $ kubectl exec "$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name})" -c sleep -- curl http://httpbin.default:8000/ip -sS -o /dev/null -w "%{http_code}\n"
403 403
{{< /text >}} {{< /text >}}
* `sleep` in the `sleep-allow` namespace are allowed. * `sleep` in the `sleep-allow` namespace are allowed.
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$(kubectl -n sleep-allow get pod -l app=sleep -o jsonpath={.items..metadata.name})" -c sleep -n sleep-allow -- curl http://httpbin.default:8000/ip -s -o /dev/null -w "%{http_code}\n" $ kubectl exec "$(kubectl -n sleep-allow get pod -l app=sleep -o jsonpath={.items..metadata.name})" -c sleep -n sleep-allow -- curl http://httpbin.default:8000/ip -sS -o /dev/null -w "%{http_code}\n"
200 200
{{< /text >}} {{< /text >}}

View File

@ -58,7 +58,7 @@ EOF
} }
snip_before_you_begin_4() { snip_before_you_begin_4() {
kubectl exec "$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name})" -c sleep -- curl http://httpbin.default:8000/ip -s -o /dev/null -w "%{http_code}\n" kubectl exec "$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name})" -c sleep -- curl http://httpbin.default:8000/ip -sS -o /dev/null -w "%{http_code}\n"
} }
! read -r -d '' snip_before_you_begin_4_out <<\ENDSNIP ! read -r -d '' snip_before_you_begin_4_out <<\ENDSNIP
@ -66,7 +66,7 @@ kubectl exec "$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name}
ENDSNIP ENDSNIP
snip_before_you_begin_5() { snip_before_you_begin_5() {
kubectl exec "$(kubectl -n sleep-allow get pod -l app=sleep -o jsonpath={.items..metadata.name})" -c sleep -n sleep-allow -- curl http://httpbin.default:8000/ip -s -o /dev/null -w "%{http_code}\n" kubectl exec "$(kubectl -n sleep-allow get pod -l app=sleep -o jsonpath={.items..metadata.name})" -c sleep -n sleep-allow -- curl http://httpbin.default:8000/ip -sS -o /dev/null -w "%{http_code}\n"
} }
! read -r -d '' snip_before_you_begin_5_out <<\ENDSNIP ! read -r -d '' snip_before_you_begin_5_out <<\ENDSNIP
@ -90,7 +90,7 @@ kubectl delete pod --all -n sleep-allow
} }
snip_migrate_trust_domain_without_trust_domain_aliases_5() { snip_migrate_trust_domain_without_trust_domain_aliases_5() {
kubectl exec "$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name})" -c sleep -- curl http://httpbin.default:8000/ip -s -o /dev/null -w "%{http_code}\n" kubectl exec "$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name})" -c sleep -- curl http://httpbin.default:8000/ip -sS -o /dev/null -w "%{http_code}\n"
} }
! read -r -d '' snip_migrate_trust_domain_without_trust_domain_aliases_5_out <<\ENDSNIP ! read -r -d '' snip_migrate_trust_domain_without_trust_domain_aliases_5_out <<\ENDSNIP
@ -98,7 +98,7 @@ kubectl exec "$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name}
ENDSNIP ENDSNIP
snip_migrate_trust_domain_without_trust_domain_aliases_6() { snip_migrate_trust_domain_without_trust_domain_aliases_6() {
kubectl exec "$(kubectl -n sleep-allow get pod -l app=sleep -o jsonpath={.items..metadata.name})" -c sleep -n sleep-allow -- curl http://httpbin.default:8000/ip -s -o /dev/null -w "%{http_code}\n" kubectl exec "$(kubectl -n sleep-allow get pod -l app=sleep -o jsonpath={.items..metadata.name})" -c sleep -n sleep-allow -- curl http://httpbin.default:8000/ip -sS -o /dev/null -w "%{http_code}\n"
} }
! read -r -d '' snip_migrate_trust_domain_without_trust_domain_aliases_6_out <<\ENDSNIP ! read -r -d '' snip_migrate_trust_domain_without_trust_domain_aliases_6_out <<\ENDSNIP
@ -119,7 +119,7 @@ istioctl install --set profile=demo -f td-installation.yaml -y
} }
snip_migrate_trust_domain_with_trust_domain_aliases_2() { snip_migrate_trust_domain_with_trust_domain_aliases_2() {
kubectl exec "$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name})" -c sleep -- curl http://httpbin.default:8000/ip -s -o /dev/null -w "%{http_code}\n" kubectl exec "$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name})" -c sleep -- curl http://httpbin.default:8000/ip -sS -o /dev/null -w "%{http_code}\n"
} }
! read -r -d '' snip_migrate_trust_domain_with_trust_domain_aliases_2_out <<\ENDSNIP ! read -r -d '' snip_migrate_trust_domain_with_trust_domain_aliases_2_out <<\ENDSNIP
@ -127,7 +127,7 @@ kubectl exec "$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name}
ENDSNIP ENDSNIP
snip_migrate_trust_domain_with_trust_domain_aliases_3() { snip_migrate_trust_domain_with_trust_domain_aliases_3() {
kubectl exec "$(kubectl -n sleep-allow get pod -l app=sleep -o jsonpath={.items..metadata.name})" -c sleep -n sleep-allow -- curl http://httpbin.default:8000/ip -s -o /dev/null -w "%{http_code}\n" kubectl exec "$(kubectl -n sleep-allow get pod -l app=sleep -o jsonpath={.items..metadata.name})" -c sleep -n sleep-allow -- curl http://httpbin.default:8000/ip -sS -o /dev/null -w "%{http_code}\n"
} }
! read -r -d '' snip_migrate_trust_domain_with_trust_domain_aliases_3_out <<\ENDSNIP ! read -r -d '' snip_migrate_trust_domain_with_trust_domain_aliases_3_out <<\ENDSNIP

View File

@ -93,7 +93,7 @@ You can then decide to [configure access to external services](#controlled-acces
successful `200` responses: successful `200` responses:
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$SOURCE_POD" -c sleep -- curl -sI https://www.google.com | grep "HTTP/"; kubectl exec "$SOURCE_POD" -c sleep -- curl -sI https://edition.cnn.com | grep "HTTP/" $ kubectl exec "$SOURCE_POD" -c sleep -- curl -sSI https://www.google.com | grep "HTTP/"; kubectl exec "$SOURCE_POD" -c sleep -- curl -sI https://edition.cnn.com | grep "HTTP/"
HTTP/2 200 HTTP/2 200
HTTP/2 200 HTTP/2 200
{{< /text >}} {{< /text >}}
@ -191,7 +191,7 @@ any other unintentional accesses.
1. Make a request to the external HTTP service from `SOURCE_POD`: 1. Make a request to the external HTTP service from `SOURCE_POD`:
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$SOURCE_POD" -c sleep -- curl -s http://httpbin.org/headers $ kubectl exec "$SOURCE_POD" -c sleep -- curl -sS http://httpbin.org/headers
{ {
"headers": { "headers": {
"Accept": "*/*", "Accept": "*/*",
@ -240,7 +240,7 @@ any other unintentional accesses.
1. Make a request to the external HTTPS service from `SOURCE_POD`: 1. Make a request to the external HTTPS service from `SOURCE_POD`:
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$SOURCE_POD" -c sleep -- curl -sI https://www.google.com | grep "HTTP/" $ kubectl exec "$SOURCE_POD" -c sleep -- curl -sSI https://www.google.com | grep "HTTP/"
HTTP/2 200 HTTP/2 200
{{< /text >}} {{< /text >}}
@ -264,7 +264,7 @@ In this example, you set a timeout rule on calls to the `httpbin.org` service.
httpbin.org external service: httpbin.org external service:
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$SOURCE_POD" -c sleep -- time curl -o /dev/null -s -w "%{http_code}\n" http://httpbin.org/delay/5 $ kubectl exec "$SOURCE_POD" -c sleep -- time curl -o /dev/null -sS -w "%{http_code}\n" http://httpbin.org/delay/5
200 200
real 0m5.024s real 0m5.024s
user 0m0.003s user 0m0.003s
@ -296,7 +296,7 @@ In this example, you set a timeout rule on calls to the `httpbin.org` service.
1. Wait a few seconds, then make the _curl_ request again: 1. Wait a few seconds, then make the _curl_ request again:
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$SOURCE_POD" -c sleep -- time curl -o /dev/null -s -w "%{http_code}\n" http://httpbin.org/delay/5 $ kubectl exec "$SOURCE_POD" -c sleep -- time curl -o /dev/null -sS -w "%{http_code}\n" http://httpbin.org/delay/5
504 504
real 0m3.149s real 0m3.149s
user 0m0.004s user 0m0.004s
@ -421,7 +421,7 @@ within the cluster. Any external request bypasses the sidecar and goes straight
For example: For example:
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$SOURCE_POD" -c sleep -- curl -s http://httpbin.org/headers $ kubectl exec "$SOURCE_POD" -c sleep -- curl -sS http://httpbin.org/headers
{ {
"headers": { "headers": {
"Accept": "*/*", "Accept": "*/*",

View File

@ -41,7 +41,7 @@ ALLOW_ANY
ENDSNIP ENDSNIP
snip_envoy_passthrough_to_external_services_3() { snip_envoy_passthrough_to_external_services_3() {
kubectl exec "$SOURCE_POD" -c sleep -- curl -sI https://www.google.com | grep "HTTP/"; kubectl exec "$SOURCE_POD" -c sleep -- curl -sI https://edition.cnn.com | grep "HTTP/" kubectl exec "$SOURCE_POD" -c sleep -- curl -sSI https://www.google.com | grep "HTTP/"; kubectl exec "$SOURCE_POD" -c sleep -- curl -sI https://edition.cnn.com | grep "HTTP/"
} }
! read -r -d '' snip_envoy_passthrough_to_external_services_3_out <<\ENDSNIP ! read -r -d '' snip_envoy_passthrough_to_external_services_3_out <<\ENDSNIP
@ -84,7 +84,7 @@ EOF
} }
snip_access_an_external_http_service_2() { snip_access_an_external_http_service_2() {
kubectl exec "$SOURCE_POD" -c sleep -- curl -s http://httpbin.org/headers kubectl exec "$SOURCE_POD" -c sleep -- curl -sS http://httpbin.org/headers
} }
! read -r -d '' snip_access_an_external_http_service_2_out <<\ENDSNIP ! read -r -d '' snip_access_an_external_http_service_2_out <<\ENDSNIP
@ -127,7 +127,7 @@ EOF
} }
snip_access_an_external_https_service_2() { snip_access_an_external_https_service_2() {
kubectl exec "$SOURCE_POD" -c sleep -- curl -sI https://www.google.com | grep "HTTP/" kubectl exec "$SOURCE_POD" -c sleep -- curl -sSI https://www.google.com | grep "HTTP/"
} }
! read -r -d '' snip_access_an_external_https_service_2_out <<\ENDSNIP ! read -r -d '' snip_access_an_external_https_service_2_out <<\ENDSNIP
@ -143,7 +143,7 @@ kubectl logs "$SOURCE_POD" -c istio-proxy | tail
ENDSNIP ENDSNIP
snip_manage_traffic_to_external_services_1() { snip_manage_traffic_to_external_services_1() {
kubectl exec "$SOURCE_POD" -c sleep -- time curl -o /dev/null -s -w "%{http_code}\n" http://httpbin.org/delay/5 kubectl exec "$SOURCE_POD" -c sleep -- time curl -o /dev/null -sS -w "%{http_code}\n" http://httpbin.org/delay/5
} }
! read -r -d '' snip_manage_traffic_to_external_services_1_out <<\ENDSNIP ! read -r -d '' snip_manage_traffic_to_external_services_1_out <<\ENDSNIP
@ -172,7 +172,7 @@ EOF
} }
snip_manage_traffic_to_external_services_3() { snip_manage_traffic_to_external_services_3() {
kubectl exec "$SOURCE_POD" -c sleep -- time curl -o /dev/null -s -w "%{http_code}\n" http://httpbin.org/delay/5 kubectl exec "$SOURCE_POD" -c sleep -- time curl -o /dev/null -sS -w "%{http_code}\n" http://httpbin.org/delay/5
} }
! read -r -d '' snip_manage_traffic_to_external_services_3_out <<\ENDSNIP ! read -r -d '' snip_manage_traffic_to_external_services_3_out <<\ENDSNIP
@ -213,7 +213,7 @@ kubectl describe pod kube-apiserver -n kube-system | grep 'service-cluster-ip-ra
ENDSNIP ENDSNIP
snip_access_the_external_services_1() { snip_access_the_external_services_1() {
kubectl exec "$SOURCE_POD" -c sleep -- curl -s http://httpbin.org/headers kubectl exec "$SOURCE_POD" -c sleep -- curl -sS http://httpbin.org/headers
} }
! read -r -d '' snip_access_the_external_services_1_out <<\ENDSNIP ! read -r -d '' snip_access_the_external_services_1_out <<\ENDSNIP

View File

@ -73,7 +73,7 @@ snip_before_you_begin_3
echo "SOURCE_POD: $SOURCE_POD" echo "SOURCE_POD: $SOURCE_POD"
kubectl exec "$SOURCE_POD" -c sleep -- curl -v http://httpbin.org/headers kubectl exec "$SOURCE_POD" -c sleep -- curl -sS -v http://httpbin.org/headers
#_verify_elided snip_access_the_external_services_1 "$snip_access_the_external_services_1_out" #_verify_elided snip_access_the_external_services_1 "$snip_access_the_external_services_1_out"
# TODO This doesn't work, curl returns 502. # TODO This doesn't work, curl returns 502.

View File

@ -330,7 +330,7 @@ to hold the configuration of the NGINX server:
1. Send an HTTP request to `http://my-nginx.mesh-external.svc.cluster.local`: 1. Send an HTTP request to `http://my-nginx.mesh-external.svc.cluster.local`:
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name})" -c sleep -- curl -s http://my-nginx.mesh-external.svc.cluster.local $ kubectl exec "$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name})" -c sleep -- curl -sS http://my-nginx.mesh-external.svc.cluster.local
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
@ -659,7 +659,7 @@ to hold the configuration of the NGINX server:
1. Send an HTTP request to `http://my-nginx.mesh-external.svc.cluster.local`: 1. Send an HTTP request to `http://my-nginx.mesh-external.svc.cluster.local`:
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name})" -c sleep -- curl -s http://my-nginx.mesh-external.svc.cluster.local $ kubectl exec "$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name})" -c sleep -- curl -sS http://my-nginx.mesh-external.svc.cluster.local
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>

View File

@ -247,7 +247,7 @@ EOF
} }
snip_configure_simple_tls_origination_for_egress_traffic_5() { snip_configure_simple_tls_origination_for_egress_traffic_5() {
kubectl exec "$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name})" -c sleep -- curl -s http://my-nginx.mesh-external.svc.cluster.local kubectl exec "$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name})" -c sleep -- curl -sS http://my-nginx.mesh-external.svc.cluster.local
} }
! read -r -d '' snip_configure_simple_tls_origination_for_egress_traffic_5_out <<\ENDSNIP ! read -r -d '' snip_configure_simple_tls_origination_for_egress_traffic_5_out <<\ENDSNIP
@ -500,7 +500,7 @@ EOF
} }
snip_configure_mutual_tls_origination_for_egress_traffic_using_sds_5() { snip_configure_mutual_tls_origination_for_egress_traffic_using_sds_5() {
kubectl exec "$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name})" -c sleep -- curl -s http://my-nginx.mesh-external.svc.cluster.local kubectl exec "$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name})" -c sleep -- curl -sS http://my-nginx.mesh-external.svc.cluster.local
} }
! read -r -d '' snip_configure_mutual_tls_origination_for_egress_traffic_using_sds_5_out <<\ENDSNIP ! read -r -d '' snip_configure_mutual_tls_origination_for_egress_traffic_using_sds_5_out <<\ENDSNIP

View File

@ -92,7 +92,7 @@ be done by the egress gateway, as opposed to by the sidecar in the previous exam
1. Verify that your `ServiceEntry` was applied correctly by sending a request to [http://edition.cnn.com/politics](https://edition.cnn.com/politics). 1. Verify that your `ServiceEntry` was applied correctly by sending a request to [http://edition.cnn.com/politics](https://edition.cnn.com/politics).
{{< text bash >}} {{< text bash >}}
$ kubectl exec "${SOURCE_POD}" -c sleep -- curl -sL -o /dev/null -D - http://edition.cnn.com/politics $ kubectl exec "${SOURCE_POD}" -c sleep -- curl -sSL -o /dev/null -D - http://edition.cnn.com/politics
HTTP/1.1 301 Moved Permanently HTTP/1.1 301 Moved Permanently
... ...
location: https://edition.cnn.com/politics location: https://edition.cnn.com/politics
@ -201,7 +201,7 @@ be done by the egress gateway, as opposed to by the sidecar in the previous exam
1. Send an HTTP request to [http://edition.cnn.com/politics](https://edition.cnn.com/politics). 1. Send an HTTP request to [http://edition.cnn.com/politics](https://edition.cnn.com/politics).
{{< text bash >}} {{< text bash >}}
$ kubectl exec "${SOURCE_POD}" -c sleep -- curl -sL -o /dev/null -D - http://edition.cnn.com/politics $ kubectl exec "${SOURCE_POD}" -c sleep -- curl -sSL -o /dev/null -D - http://edition.cnn.com/politics
HTTP/1.1 200 OK HTTP/1.1 200 OK
... ...
{{< /text >}} {{< /text >}}
@ -578,7 +578,7 @@ to hold the configuration of the NGINX server:
1. Send an HTTP request to `http://my-nginx.mesh-external.svc.cluster.local`: 1. Send an HTTP request to `http://my-nginx.mesh-external.svc.cluster.local`:
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name})" -c sleep -- curl -s http://my-nginx.mesh-external.svc.cluster.local $ kubectl exec "$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name})" -c sleep -- curl -sS http://my-nginx.mesh-external.svc.cluster.local
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>

View File

@ -61,7 +61,7 @@ EOF
} }
snip_perform_tls_origination_with_an_egress_gateway_2() { snip_perform_tls_origination_with_an_egress_gateway_2() {
kubectl exec "${SOURCE_POD}" -c sleep -- curl -sL -o /dev/null -D - http://edition.cnn.com/politics kubectl exec "${SOURCE_POD}" -c sleep -- curl -sSL -o /dev/null -D - http://edition.cnn.com/politics
} }
! read -r -d '' snip_perform_tls_origination_with_an_egress_gateway_2_out <<\ENDSNIP ! read -r -d '' snip_perform_tls_origination_with_an_egress_gateway_2_out <<\ENDSNIP
@ -163,7 +163,7 @@ EOF
} }
snip_perform_tls_origination_with_an_egress_gateway_5() { snip_perform_tls_origination_with_an_egress_gateway_5() {
kubectl exec "${SOURCE_POD}" -c sleep -- curl -sL -o /dev/null -D - http://edition.cnn.com/politics kubectl exec "${SOURCE_POD}" -c sleep -- curl -sSL -o /dev/null -D - http://edition.cnn.com/politics
} }
! read -r -d '' snip_perform_tls_origination_with_an_egress_gateway_5_out <<\ENDSNIP ! read -r -d '' snip_perform_tls_origination_with_an_egress_gateway_5_out <<\ENDSNIP
@ -455,7 +455,7 @@ EOF
} }
snip_configure_mutual_tls_origination_for_egress_traffic_4() { snip_configure_mutual_tls_origination_for_egress_traffic_4() {
kubectl exec "$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name})" -c sleep -- curl -s http://my-nginx.mesh-external.svc.cluster.local kubectl exec "$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name})" -c sleep -- curl -sS http://my-nginx.mesh-external.svc.cluster.local
} }
! read -r -d '' snip_configure_mutual_tls_origination_for_egress_traffic_4_out <<\ENDSNIP ! read -r -d '' snip_configure_mutual_tls_origination_for_egress_traffic_4_out <<\ENDSNIP

View File

@ -116,7 +116,7 @@ First create a `ServiceEntry` to allow direct traffic to an external service.
1. Verify that your `ServiceEntry` was applied correctly by sending an HTTP request to [http://edition.cnn.com/politics](http://edition.cnn.com/politics). 1. Verify that your `ServiceEntry` was applied correctly by sending an HTTP request to [http://edition.cnn.com/politics](http://edition.cnn.com/politics).
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$SOURCE_POD" -c sleep -- curl -sL -o /dev/null -D - http://edition.cnn.com/politics $ kubectl exec "$SOURCE_POD" -c sleep -- curl -sSL -o /dev/null -D - http://edition.cnn.com/politics
... ...
HTTP/1.1 301 Moved Permanently HTTP/1.1 301 Moved Permanently
... ...
@ -211,7 +211,7 @@ First create a `ServiceEntry` to allow direct traffic to an external service.
1. Resend the HTTP request to [http://edition.cnn.com/politics](https://edition.cnn.com/politics). 1. Resend the HTTP request to [http://edition.cnn.com/politics](https://edition.cnn.com/politics).
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$SOURCE_POD" -c sleep -- curl -sL -o /dev/null -D - http://edition.cnn.com/politics $ kubectl exec "$SOURCE_POD" -c sleep -- curl -sSL -o /dev/null -D - http://edition.cnn.com/politics
... ...
HTTP/1.1 301 Moved Permanently HTTP/1.1 301 Moved Permanently
... ...
@ -279,7 +279,7 @@ You need to specify port 443 with protocol `TLS` in a corresponding `ServiceEntr
1. Verify that your `ServiceEntry` was applied correctly by sending an HTTPS request to [https://edition.cnn.com/politics](https://edition.cnn.com/politics). 1. Verify that your `ServiceEntry` was applied correctly by sending an HTTPS request to [https://edition.cnn.com/politics](https://edition.cnn.com/politics).
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$SOURCE_POD" -c sleep -- curl -sL -o /dev/null -D - https://edition.cnn.com/politics $ kubectl exec "$SOURCE_POD" -c sleep -- curl -sSL -o /dev/null -D - https://edition.cnn.com/politics
... ...
HTTP/2 200 HTTP/2 200
Content-Type: text/html; charset=utf-8 Content-Type: text/html; charset=utf-8
@ -364,7 +364,7 @@ You need to specify port 443 with protocol `TLS` in a corresponding `ServiceEntr
The output should be the same as before. The output should be the same as before.
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$SOURCE_POD" -c sleep -- curl -sL -o /dev/null -D - https://edition.cnn.com/politics $ kubectl exec "$SOURCE_POD" -c sleep -- curl -sSL -o /dev/null -D - https://edition.cnn.com/politics
... ...
HTTP/2 200 HTTP/2 200
Content-Type: text/html; charset=utf-8 Content-Type: text/html; charset=utf-8
@ -508,7 +508,7 @@ external service.
bypass its sidecar proxy, it will not be able to access external sites and will be blocked by the network policy. bypass its sidecar proxy, it will not be able to access external sites and will be blocked by the network policy.
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$(kubectl get pod -n test-egress -l app=sleep -o jsonpath={.items..metadata.name})" -n test-egress -c sleep -- curl -v https://edition.cnn.com/politics $ kubectl exec "$(kubectl get pod -n test-egress -l app=sleep -o jsonpath={.items..metadata.name})" -n test-egress -c sleep -- curl -v -sS https://edition.cnn.com/politics
Hostname was NOT found in DNS cache Hostname was NOT found in DNS cache
Trying 151.101.65.67... Trying 151.101.65.67...
Trying 2a04:4e42:200::323... Trying 2a04:4e42:200::323...
@ -563,7 +563,7 @@ external service.
Network Policy you defined. `istio-egressgateway` forwards the traffic to `edition.cnn.com`. Network Policy you defined. `istio-egressgateway` forwards the traffic to `edition.cnn.com`.
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$(kubectl get pod -n test-egress -l app=sleep -o jsonpath={.items..metadata.name})" -n test-egress -c sleep -- curl -s -o /dev/null -w "%{http_code}\n" https://edition.cnn.com/politics $ kubectl exec "$(kubectl get pod -n test-egress -l app=sleep -o jsonpath={.items..metadata.name})" -n test-egress -c sleep -- curl -sS -o /dev/null -w "%{http_code}\n" https://edition.cnn.com/politics
200 200
{{< /text >}} {{< /text >}}

View File

@ -54,7 +54,7 @@ EOF
} }
snip_egress_gateway_for_http_traffic_2() { snip_egress_gateway_for_http_traffic_2() {
kubectl exec "$SOURCE_POD" -c sleep -- curl -sL -o /dev/null -D - http://edition.cnn.com/politics kubectl exec "$SOURCE_POD" -c sleep -- curl -sSL -o /dev/null -D - http://edition.cnn.com/politics
} }
! read -r -d '' snip_egress_gateway_for_http_traffic_2_out <<\ENDSNIP ! read -r -d '' snip_egress_gateway_for_http_traffic_2_out <<\ENDSNIP
@ -135,7 +135,7 @@ EOF
} }
snip_egress_gateway_for_http_traffic_5() { snip_egress_gateway_for_http_traffic_5() {
kubectl exec "$SOURCE_POD" -c sleep -- curl -sL -o /dev/null -D - http://edition.cnn.com/politics kubectl exec "$SOURCE_POD" -c sleep -- curl -sSL -o /dev/null -D - http://edition.cnn.com/politics
} }
! read -r -d '' snip_egress_gateway_for_http_traffic_5_out <<\ENDSNIP ! read -r -d '' snip_egress_gateway_for_http_traffic_5_out <<\ENDSNIP
@ -183,7 +183,7 @@ EOF
} }
snip_egress_gateway_for_https_traffic_2() { snip_egress_gateway_for_https_traffic_2() {
kubectl exec "$SOURCE_POD" -c sleep -- curl -sL -o /dev/null -D - https://edition.cnn.com/politics kubectl exec "$SOURCE_POD" -c sleep -- curl -sSL -o /dev/null -D - https://edition.cnn.com/politics
} }
! read -r -d '' snip_egress_gateway_for_https_traffic_2_out <<\ENDSNIP ! read -r -d '' snip_egress_gateway_for_https_traffic_2_out <<\ENDSNIP
@ -260,7 +260,7 @@ EOF
} }
snip_egress_gateway_for_https_traffic_4() { snip_egress_gateway_for_https_traffic_4() {
kubectl exec "$SOURCE_POD" -c sleep -- curl -sL -o /dev/null -D - https://edition.cnn.com/politics kubectl exec "$SOURCE_POD" -c sleep -- curl -sSL -o /dev/null -D - https://edition.cnn.com/politics
} }
! read -r -d '' snip_egress_gateway_for_https_traffic_4_out <<\ENDSNIP ! read -r -d '' snip_egress_gateway_for_https_traffic_4_out <<\ENDSNIP
@ -344,7 +344,7 @@ EOF
} }
snip_apply_kubernetes_network_policies_8() { snip_apply_kubernetes_network_policies_8() {
kubectl exec "$(kubectl get pod -n test-egress -l app=sleep -o jsonpath={.items..metadata.name})" -n test-egress -c sleep -- curl -v https://edition.cnn.com/politics kubectl exec "$(kubectl get pod -n test-egress -l app=sleep -o jsonpath={.items..metadata.name})" -n test-egress -c sleep -- curl -v -sS https://edition.cnn.com/politics
} }
! read -r -d '' snip_apply_kubernetes_network_policies_8_out <<\ENDSNIP ! read -r -d '' snip_apply_kubernetes_network_policies_8_out <<\ENDSNIP
@ -392,7 +392,7 @@ EOF
} }
snip_apply_kubernetes_network_policies_13() { snip_apply_kubernetes_network_policies_13() {
kubectl exec "$(kubectl get pod -n test-egress -l app=sleep -o jsonpath={.items..metadata.name})" -n test-egress -c sleep -- curl -s -o /dev/null -w "%{http_code}\n" https://edition.cnn.com/politics kubectl exec "$(kubectl get pod -n test-egress -l app=sleep -o jsonpath={.items..metadata.name})" -n test-egress -c sleep -- curl -sS -o /dev/null -w "%{http_code}\n" https://edition.cnn.com/politics
} }
! read -r -d '' snip_apply_kubernetes_network_policies_13_out <<\ENDSNIP ! read -r -d '' snip_apply_kubernetes_network_policies_13_out <<\ENDSNIP

View File

@ -95,7 +95,7 @@ Kubernetes Services for egress traffic work with other protocols as well.
Note that the _curl_ command below uses the [Kubernetes DNS format for services](https://v1-13.docs.kubernetes.io/docs/concepts/services-networking/dns-pod-service/#a-records): `<service name>.<namespace>.svc.cluster.local`. Note that the _curl_ command below uses the [Kubernetes DNS format for services](https://v1-13.docs.kubernetes.io/docs/concepts/services-networking/dns-pod-service/#a-records): `<service name>.<namespace>.svc.cluster.local`.
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$SOURCE_POD_WITHOUT_ISTIO" -n without-istio -c sleep -- curl my-httpbin.default.svc.cluster.local/headers $ kubectl exec "$SOURCE_POD_WITHOUT_ISTIO" -n without-istio -c sleep -- curl -sS my-httpbin.default.svc.cluster.local/headers
{ {
"headers": { "headers": {
"Accept": "*/*", "Accept": "*/*",
@ -128,7 +128,7 @@ Kubernetes Services for egress traffic work with other protocols as well.
the `Host` header equals to your service's hostname. the `Host` header equals to your service's hostname.
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$SOURCE_POD" -c sleep -- curl my-httpbin.default.svc.cluster.local/headers $ kubectl exec "$SOURCE_POD" -c sleep -- curl -sS my-httpbin.default.svc.cluster.local/headers
{ {
"headers": { "headers": {
"Accept": "*/*", "Accept": "*/*",
@ -201,7 +201,7 @@ $ kubectl delete service my-httpbin
Use the `--resolve` option of `curl` to access `wikipedia.org` by the cluster IP: Use the `--resolve` option of `curl` to access `wikipedia.org` by the cluster IP:
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$SOURCE_POD_WITHOUT_ISTIO" -n without-istio -c sleep -- curl -s --resolve en.wikipedia.org:443:"$(kubectl get service my-wikipedia -o jsonpath='{.spec.clusterIP}')" https://en.wikipedia.org/wiki/Main_Page | grep -o "<title>.*</title>" $ kubectl exec "$SOURCE_POD_WITHOUT_ISTIO" -n without-istio -c sleep -- curl -sS --resolve en.wikipedia.org:443:"$(kubectl get service my-wikipedia -o jsonpath='{.spec.clusterIP}')" https://en.wikipedia.org/wiki/Main_Page | grep -o "<title>.*</title>"
<title>Wikipedia, the free encyclopedia</title> <title>Wikipedia, the free encyclopedia</title>
{{< /text >}} {{< /text >}}
@ -225,7 +225,7 @@ $ kubectl delete service my-httpbin
1. Access `wikipedia.org` by your Kubernetes service's cluster IP from the source pod with Istio sidecar: 1. Access `wikipedia.org` by your Kubernetes service's cluster IP from the source pod with Istio sidecar:
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$SOURCE_POD" -c sleep -- curl -s --resolve en.wikipedia.org:443:"$(kubectl get service my-wikipedia -o jsonpath='{.spec.clusterIP}')" https://en.wikipedia.org/wiki/Main_Page | grep -o "<title>.*</title>" $ kubectl exec "$SOURCE_POD" -c sleep -- curl -sS --resolve en.wikipedia.org:443:"$(kubectl get service my-wikipedia -o jsonpath='{.spec.clusterIP}')" https://en.wikipedia.org/wiki/Main_Page | grep -o "<title>.*</title>"
<title>Wikipedia, the free encyclopedia</title> <title>Wikipedia, the free encyclopedia</title>
{{< /text >}} {{< /text >}}
@ -234,7 +234,7 @@ $ kubectl delete service my-httpbin
in the output of your service as the cluster IP. in the output of your service as the cluster IP.
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$SOURCE_POD" -c sleep -- curl -v --resolve en.wikipedia.org:443:"$(kubectl get service my-wikipedia -o jsonpath='{.spec.clusterIP}')" https://en.wikipedia.org/wiki/Main_Page -o /dev/null $ kubectl exec "$SOURCE_POD" -c sleep -- curl -sS -v --resolve en.wikipedia.org:443:"$(kubectl get service my-wikipedia -o jsonpath='{.spec.clusterIP}')" https://en.wikipedia.org/wiki/Main_Page -o /dev/null
* Added en.wikipedia.org:443:172.21.156.230 to DNS cache * Added en.wikipedia.org:443:172.21.156.230 to DNS cache
* Hostname en.wikipedia.org was found in DNS cache * Hostname en.wikipedia.org was found in DNS cache
* Trying 172.21.156.230... * Trying 172.21.156.230...

View File

@ -68,7 +68,7 @@ my-httpbin ExternalName <none> httpbin.org 80/TCP 4s
ENDSNIP ENDSNIP
snip_kubernetes_externalname_service_to_access_an_external_service_3() { snip_kubernetes_externalname_service_to_access_an_external_service_3() {
kubectl exec "$SOURCE_POD_WITHOUT_ISTIO" -n without-istio -c sleep -- curl my-httpbin.default.svc.cluster.local/headers kubectl exec "$SOURCE_POD_WITHOUT_ISTIO" -n without-istio -c sleep -- curl -sS my-httpbin.default.svc.cluster.local/headers
} }
! read -r -d '' snip_kubernetes_externalname_service_to_access_an_external_service_3_out <<\ENDSNIP ! read -r -d '' snip_kubernetes_externalname_service_to_access_an_external_service_3_out <<\ENDSNIP
@ -96,7 +96,7 @@ EOF
} }
snip_kubernetes_externalname_service_to_access_an_external_service_5() { snip_kubernetes_externalname_service_to_access_an_external_service_5() {
kubectl exec "$SOURCE_POD" -c sleep -- curl my-httpbin.default.svc.cluster.local/headers kubectl exec "$SOURCE_POD" -c sleep -- curl -sS my-httpbin.default.svc.cluster.local/headers
} }
! read -r -d '' snip_kubernetes_externalname_service_to_access_an_external_service_5_out <<\ENDSNIP ! read -r -d '' snip_kubernetes_externalname_service_to_access_an_external_service_5_out <<\ENDSNIP
@ -161,7 +161,7 @@ my-wikipedia ClusterIP 172.21.156.230 <none> 443/TCP 21h
ENDSNIP ENDSNIP
snip_use_a_kubernetes_service_with_endpoints_to_access_an_external_service_4() { snip_use_a_kubernetes_service_with_endpoints_to_access_an_external_service_4() {
kubectl exec "$SOURCE_POD_WITHOUT_ISTIO" -n without-istio -c sleep -- curl -s --resolve en.wikipedia.org:443:"$(kubectl get service my-wikipedia -o jsonpath='{.spec.clusterIP}')" https://en.wikipedia.org/wiki/Main_Page | grep -o "<title>.*</title>" kubectl exec "$SOURCE_POD_WITHOUT_ISTIO" -n without-istio -c sleep -- curl -sS --resolve en.wikipedia.org:443:"$(kubectl get service my-wikipedia -o jsonpath='{.spec.clusterIP}')" https://en.wikipedia.org/wiki/Main_Page | grep -o "<title>.*</title>"
} }
! read -r -d '' snip_use_a_kubernetes_service_with_endpoints_to_access_an_external_service_4_out <<\ENDSNIP ! read -r -d '' snip_use_a_kubernetes_service_with_endpoints_to_access_an_external_service_4_out <<\ENDSNIP
@ -183,7 +183,7 @@ EOF
} }
snip_use_a_kubernetes_service_with_endpoints_to_access_an_external_service_6() { snip_use_a_kubernetes_service_with_endpoints_to_access_an_external_service_6() {
kubectl exec "$SOURCE_POD" -c sleep -- curl -s --resolve en.wikipedia.org:443:"$(kubectl get service my-wikipedia -o jsonpath='{.spec.clusterIP}')" https://en.wikipedia.org/wiki/Main_Page | grep -o "<title>.*</title>" kubectl exec "$SOURCE_POD" -c sleep -- curl -sS --resolve en.wikipedia.org:443:"$(kubectl get service my-wikipedia -o jsonpath='{.spec.clusterIP}')" https://en.wikipedia.org/wiki/Main_Page | grep -o "<title>.*</title>"
} }
! read -r -d '' snip_use_a_kubernetes_service_with_endpoints_to_access_an_external_service_6_out <<\ENDSNIP ! read -r -d '' snip_use_a_kubernetes_service_with_endpoints_to_access_an_external_service_6_out <<\ENDSNIP
@ -191,7 +191,7 @@ kubectl exec "$SOURCE_POD" -c sleep -- curl -s --resolve en.wikipedia.org:443:"$
ENDSNIP ENDSNIP
snip_use_a_kubernetes_service_with_endpoints_to_access_an_external_service_7() { snip_use_a_kubernetes_service_with_endpoints_to_access_an_external_service_7() {
kubectl exec "$SOURCE_POD" -c sleep -- curl -v --resolve en.wikipedia.org:443:"$(kubectl get service my-wikipedia -o jsonpath='{.spec.clusterIP}')" https://en.wikipedia.org/wiki/Main_Page -o /dev/null kubectl exec "$SOURCE_POD" -c sleep -- curl -sS -v --resolve en.wikipedia.org:443:"$(kubectl get service my-wikipedia -o jsonpath='{.spec.clusterIP}')" https://en.wikipedia.org/wiki/Main_Page -o /dev/null
} }
! read -r -d '' snip_use_a_kubernetes_service_with_endpoints_to_access_an_external_service_7_out <<\ENDSNIP ! read -r -d '' snip_use_a_kubernetes_service_with_endpoints_to_access_an_external_service_7_out <<\ENDSNIP

View File

@ -85,7 +85,7 @@ This time, however, use a single `ServiceEntry` to enable both HTTP and HTTPS ac
1. Make a request to the external HTTP service: 1. Make a request to the external HTTP service:
{{< text syntax=bash snip_id=curl_simple >}} {{< text syntax=bash snip_id=curl_simple >}}
$ kubectl exec "${SOURCE_POD}" -c sleep -- curl -sL -o /dev/null -D - http://edition.cnn.com/politics $ kubectl exec "${SOURCE_POD}" -c sleep -- curl -sSL -o /dev/null -D - http://edition.cnn.com/politics
HTTP/1.1 301 Moved Permanently HTTP/1.1 301 Moved Permanently
... ...
location: https://edition.cnn.com/politics location: https://edition.cnn.com/politics
@ -157,7 +157,7 @@ Both of these issues can be resolved by configuring Istio to perform TLS origina
1. Send an HTTP request to `http://edition.cnn.com/politics`, as in the previous section: 1. Send an HTTP request to `http://edition.cnn.com/politics`, as in the previous section:
{{< text syntax=bash snip_id=curl_origination_http >}} {{< text syntax=bash snip_id=curl_origination_http >}}
$ kubectl exec "${SOURCE_POD}" -c sleep -- curl -sL -o /dev/null -D - http://edition.cnn.com/politics $ kubectl exec "${SOURCE_POD}" -c sleep -- curl -sSL -o /dev/null -D - http://edition.cnn.com/politics
HTTP/1.1 200 OK HTTP/1.1 200 OK
... ...
{{< /text >}} {{< /text >}}
@ -175,7 +175,7 @@ Both of these issues can be resolved by configuring Istio to perform TLS origina
1. Note that the applications that used HTTPS to access the external service continue to work as before: 1. Note that the applications that used HTTPS to access the external service continue to work as before:
{{< text syntax=bash snip_id=curl_origination_https >}} {{< text syntax=bash snip_id=curl_origination_https >}}
$ kubectl exec "${SOURCE_POD}" -c sleep -- curl -sL -o /dev/null -D - https://edition.cnn.com/politics $ kubectl exec "${SOURCE_POD}" -c sleep -- curl -sSL -o /dev/null -D - https://edition.cnn.com/politics
HTTP/2 200 HTTP/2 200
... ...
{{< /text >}} {{< /text >}}

View File

@ -53,7 +53,7 @@ EOF
} }
snip_curl_simple() { snip_curl_simple() {
kubectl exec "${SOURCE_POD}" -c sleep -- curl -sL -o /dev/null -D - http://edition.cnn.com/politics kubectl exec "${SOURCE_POD}" -c sleep -- curl -sSL -o /dev/null -D - http://edition.cnn.com/politics
} }
! read -r -d '' snip_curl_simple_out <<\ENDSNIP ! read -r -d '' snip_curl_simple_out <<\ENDSNIP
@ -101,7 +101,7 @@ EOF
} }
snip_curl_origination_http() { snip_curl_origination_http() {
kubectl exec "${SOURCE_POD}" -c sleep -- curl -sL -o /dev/null -D - http://edition.cnn.com/politics kubectl exec "${SOURCE_POD}" -c sleep -- curl -sSL -o /dev/null -D - http://edition.cnn.com/politics
} }
! read -r -d '' snip_curl_origination_http_out <<\ENDSNIP ! read -r -d '' snip_curl_origination_http_out <<\ENDSNIP
@ -110,7 +110,7 @@ HTTP/1.1 200 OK
ENDSNIP ENDSNIP
snip_curl_origination_https() { snip_curl_origination_https() {
kubectl exec "${SOURCE_POD}" -c sleep -- curl -sL -o /dev/null -D - https://edition.cnn.com/politics kubectl exec "${SOURCE_POD}" -c sleep -- curl -sSL -o /dev/null -D - https://edition.cnn.com/politics
} }
! read -r -d '' snip_curl_origination_https_out <<\ENDSNIP ! read -r -d '' snip_curl_origination_https_out <<\ENDSNIP

View File

@ -31,7 +31,7 @@ _wait_for_deployment default sleep
snip_before_you_begin_4 snip_before_you_begin_4
confirm_blocking() { confirm_blocking() {
kubectl exec "$SOURCE_POD" -c sleep -- curl -I https://www.google.com | grep "HTTP/"; kubectl exec "$SOURCE_POD" -c sleep -- curl -I https://edition.cnn.com | grep "HTTP/" kubectl exec "$SOURCE_POD" -c sleep -sS -I https://www.google.com | grep "HTTP/"; kubectl exec "$SOURCE_POD" -c sleep -- curl -sS -I https://edition.cnn.com | grep "HTTP/"
} }
_verify_contains confirm_blocking "command terminated with exit code 35" _verify_contains confirm_blocking "command terminated with exit code 35"

View File

@ -137,7 +137,7 @@ to hold the configuration of the NGINX server:
printed correctly, i.e., `common name (CN)` is equal to `nginx.example.com`. printed correctly, i.e., `common name (CN)` is equal to `nginx.example.com`.
{{< text bash >}} {{< text bash >}}
$ kubectl exec "$(kubectl get pod -l run=my-nginx -o jsonpath={.items..metadata.name})" -c istio-proxy -- curl -v -k --resolve nginx.example.com:443:127.0.0.1 https://nginx.example.com $ kubectl exec "$(kubectl get pod -l run=my-nginx -o jsonpath={.items..metadata.name})" -c istio-proxy -- curl -sS -v -k --resolve nginx.example.com:443:127.0.0.1 https://nginx.example.com
... ...
SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384 SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
ALPN, server accepted to use http/1.1 ALPN, server accepted to use http/1.1

View File

@ -115,7 +115,7 @@ EOF
} }
snip_deploy_an_nginx_server_5() { snip_deploy_an_nginx_server_5() {
kubectl exec "$(kubectl get pod -l run=my-nginx -o jsonpath={.items..metadata.name})" -c istio-proxy -- curl -v -k --resolve nginx.example.com:443:127.0.0.1 https://nginx.example.com kubectl exec "$(kubectl get pod -l run=my-nginx -o jsonpath={.items..metadata.name})" -c istio-proxy -- curl -sS -v -k --resolve nginx.example.com:443:127.0.0.1 https://nginx.example.com
} }
! read -r -d '' snip_deploy_an_nginx_server_5_out <<\ENDSNIP ! read -r -d '' snip_deploy_an_nginx_server_5_out <<\ENDSNIP

View File

@ -68,7 +68,7 @@ Call the `HelloWorld` service from the `Sleep` pod:
$ kubectl exec --context="${CTX_R1_Z1}" -n sample -c sleep \ $ kubectl exec --context="${CTX_R1_Z1}" -n sample -c sleep \
"$(kubectl get pod --context="${CTX_R1_Z1}" -n sample -l \ "$(kubectl get pod --context="${CTX_R1_Z1}" -n sample -l \
app=sleep -o jsonpath='{.items[0].metadata.name}')" \ app=sleep -o jsonpath='{.items[0].metadata.name}')" \
-- curl -sL helloworld.sample:5000/hello -- curl -sSL helloworld.sample:5000/hello
{{< /text >}} {{< /text >}}
Repeat this a number of times and verify that the number of replies Repeat this a number of times and verify that the number of replies

View File

@ -49,5 +49,5 @@ snip_verify_the_distribution_1() {
kubectl exec --context="${CTX_R1_Z1}" -n sample -c sleep \ kubectl exec --context="${CTX_R1_Z1}" -n sample -c sleep \
"$(kubectl get pod --context="${CTX_R1_Z1}" -n sample -l \ "$(kubectl get pod --context="${CTX_R1_Z1}" -n sample -l \
app=sleep -o jsonpath='{.items[0].metadata.name}')" \ app=sleep -o jsonpath='{.items[0].metadata.name}')" \
-- curl -sL helloworld.sample:5000/hello -- curl -sSL helloworld.sample:5000/hello
} }

View File

@ -88,7 +88,7 @@ Call the `HelloWorld` service from the `Sleep` pod:
$ kubectl exec --context="${CTX_R1_Z1}" -n sample -c sleep \ $ kubectl exec --context="${CTX_R1_Z1}" -n sample -c sleep \
"$(kubectl get pod --context="${CTX_R1_Z1}" -n sample -l \ "$(kubectl get pod --context="${CTX_R1_Z1}" -n sample -l \
app=sleep -o jsonpath='{.items[0].metadata.name}')" \ app=sleep -o jsonpath='{.items[0].metadata.name}')" \
-- curl -sL helloworld.sample:5000/hello -- curl -sSL helloworld.sample:5000/hello
Hello version: region1.zone1, instance: helloworld-region1.zone1-86f77cd7b-cpxhv Hello version: region1.zone1, instance: helloworld-region1.zone1-86f77cd7b-cpxhv
{{< /text >}} {{< /text >}}
@ -106,7 +106,7 @@ for `HelloWorld` in `region1.zone1`:
$ kubectl --context="${CTX_R1_Z1}" exec \ $ kubectl --context="${CTX_R1_Z1}" exec \
"$(kubectl get pod --context="${CTX_R1_Z1}" -n sample -l app=helloworld \ "$(kubectl get pod --context="${CTX_R1_Z1}" -n sample -l app=helloworld \
-l version=region1.zone1 -o jsonpath='{.items[0].metadata.name}')" \ -l version=region1.zone1 -o jsonpath='{.items[0].metadata.name}')" \
-n sample -c istio-proxy -- curl -sL -X POST 127.0.0.1:15000/drain_listeners -n sample -c istio-proxy -- curl -sSL -X POST 127.0.0.1:15000/drain_listeners
{{< /text >}} {{< /text >}}
Call the `HelloWorld` service from the `Sleep` pod: Call the `HelloWorld` service from the `Sleep` pod:
@ -115,7 +115,7 @@ Call the `HelloWorld` service from the `Sleep` pod:
$ kubectl exec --context="${CTX_R1_Z1}" -n sample -c sleep \ $ kubectl exec --context="${CTX_R1_Z1}" -n sample -c sleep \
"$(kubectl get pod --context="${CTX_R1_Z1}" -n sample -l \ "$(kubectl get pod --context="${CTX_R1_Z1}" -n sample -l \
app=sleep -o jsonpath='{.items[0].metadata.name}')" \ app=sleep -o jsonpath='{.items[0].metadata.name}')" \
-- curl -sL helloworld.sample:5000/hello -- curl -sSL helloworld.sample:5000/hello
Hello version: region1.zone2, instance: helloworld-region1.zone2-86f77cd7b-cpxhv Hello version: region1.zone2, instance: helloworld-region1.zone2-86f77cd7b-cpxhv
{{< /text >}} {{< /text >}}
@ -132,7 +132,7 @@ the `HelloWorld` in `region1.zone2` to fail when called:
$ kubectl --context="${CTX_R1_Z2}" exec \ $ kubectl --context="${CTX_R1_Z2}" exec \
"$(kubectl get pod --context="${CTX_R1_Z2}" -n sample -l app=helloworld \ "$(kubectl get pod --context="${CTX_R1_Z2}" -n sample -l app=helloworld \
-l version=region1.zone2 -o jsonpath='{.items[0].metadata.name}')" \ -l version=region1.zone2 -o jsonpath='{.items[0].metadata.name}')" \
-n sample -c istio-proxy -- curl -sL -X POST 127.0.0.1:15000/drain_listeners -n sample -c istio-proxy -- curl -sSL -X POST 127.0.0.1:15000/drain_listeners
{{< /text >}} {{< /text >}}
Call the `HelloWorld` service from the `Sleep` pod: Call the `HelloWorld` service from the `Sleep` pod:
@ -141,7 +141,7 @@ Call the `HelloWorld` service from the `Sleep` pod:
$ kubectl exec --context="${CTX_R1_Z1}" -n sample -c sleep \ $ kubectl exec --context="${CTX_R1_Z1}" -n sample -c sleep \
"$(kubectl get pod --context="${CTX_R1_Z1}" -n sample -l \ "$(kubectl get pod --context="${CTX_R1_Z1}" -n sample -l \
app=sleep -o jsonpath='{.items[0].metadata.name}')" \ app=sleep -o jsonpath='{.items[0].metadata.name}')" \
-- curl -sL helloworld.sample:5000/hello -- curl -sSL helloworld.sample:5000/hello
Hello version: region2.zone3, instance: helloworld-region2.zone3-86f77cd7b-cpxhv Hello version: region2.zone3, instance: helloworld-region2.zone3-86f77cd7b-cpxhv
{{< /text >}} {{< /text >}}
@ -158,7 +158,7 @@ the `HelloWorld` in `region2.zone3` to fail when called:
$ kubectl --context="${CTX_R2_Z3}" exec \ $ kubectl --context="${CTX_R2_Z3}" exec \
"$(kubectl get pod --context="${CTX_R2_Z3}" -n sample -l app=helloworld \ "$(kubectl get pod --context="${CTX_R2_Z3}" -n sample -l app=helloworld \
-l version=region2.zone3 -o jsonpath='{.items[0].metadata.name}')" \ -l version=region2.zone3 -o jsonpath='{.items[0].metadata.name}')" \
-n sample -c istio-proxy -- curl -sL -X POST 127.0.0.1:15000/drain_listeners -n sample -c istio-proxy -- curl -sSL -X POST 127.0.0.1:15000/drain_listeners
{{< /text >}} {{< /text >}}
Call the `HelloWorld` service from the `Sleep` pod: Call the `HelloWorld` service from the `Sleep` pod:
@ -167,7 +167,7 @@ Call the `HelloWorld` service from the `Sleep` pod:
$ kubectl exec --context="${CTX_R1_Z1}" -n sample -c sleep \ $ kubectl exec --context="${CTX_R1_Z1}" -n sample -c sleep \
"$(kubectl get pod --context="${CTX_R1_Z1}" -n sample -l \ "$(kubectl get pod --context="${CTX_R1_Z1}" -n sample -l \
app=sleep -o jsonpath='{.items[0].metadata.name}')" \ app=sleep -o jsonpath='{.items[0].metadata.name}')" \
-- curl -sL helloworld.sample:5000/hello -- curl -sSL helloworld.sample:5000/hello
Hello version: region3.zone4, instance: helloworld-region3.zone4-86f77cd7b-cpxhv Hello version: region3.zone4, instance: helloworld-region3.zone4-86f77cd7b-cpxhv
{{< /text >}} {{< /text >}}

View File

@ -50,7 +50,7 @@ snip_verify_traffic_stays_in_region1zone1_1() {
kubectl exec --context="${CTX_R1_Z1}" -n sample -c sleep \ kubectl exec --context="${CTX_R1_Z1}" -n sample -c sleep \
"$(kubectl get pod --context="${CTX_R1_Z1}" -n sample -l \ "$(kubectl get pod --context="${CTX_R1_Z1}" -n sample -l \
app=sleep -o jsonpath='{.items[0].metadata.name}')" \ app=sleep -o jsonpath='{.items[0].metadata.name}')" \
-- curl -sL helloworld.sample:5000/hello -- curl -sSL helloworld.sample:5000/hello
} }
! read -r -d '' snip_verify_traffic_stays_in_region1zone1_1_out <<\ENDSNIP ! read -r -d '' snip_verify_traffic_stays_in_region1zone1_1_out <<\ENDSNIP
@ -61,14 +61,14 @@ snip_failover_to_region1zone2_1() {
kubectl --context="${CTX_R1_Z1}" exec \ kubectl --context="${CTX_R1_Z1}" exec \
"$(kubectl get pod --context="${CTX_R1_Z1}" -n sample -l app=helloworld \ "$(kubectl get pod --context="${CTX_R1_Z1}" -n sample -l app=helloworld \
-l version=region1.zone1 -o jsonpath='{.items[0].metadata.name}')" \ -l version=region1.zone1 -o jsonpath='{.items[0].metadata.name}')" \
-n sample -c istio-proxy -- curl -sL -X POST 127.0.0.1:15000/drain_listeners -n sample -c istio-proxy -- curl -sSL -X POST 127.0.0.1:15000/drain_listeners
} }
snip_failover_to_region1zone2_2() { snip_failover_to_region1zone2_2() {
kubectl exec --context="${CTX_R1_Z1}" -n sample -c sleep \ kubectl exec --context="${CTX_R1_Z1}" -n sample -c sleep \
"$(kubectl get pod --context="${CTX_R1_Z1}" -n sample -l \ "$(kubectl get pod --context="${CTX_R1_Z1}" -n sample -l \
app=sleep -o jsonpath='{.items[0].metadata.name}')" \ app=sleep -o jsonpath='{.items[0].metadata.name}')" \
-- curl -sL helloworld.sample:5000/hello -- curl -sSL helloworld.sample:5000/hello
} }
! read -r -d '' snip_failover_to_region1zone2_2_out <<\ENDSNIP ! read -r -d '' snip_failover_to_region1zone2_2_out <<\ENDSNIP
@ -79,14 +79,14 @@ snip_failover_to_region2zone3_1() {
kubectl --context="${CTX_R1_Z2}" exec \ kubectl --context="${CTX_R1_Z2}" exec \
"$(kubectl get pod --context="${CTX_R1_Z2}" -n sample -l app=helloworld \ "$(kubectl get pod --context="${CTX_R1_Z2}" -n sample -l app=helloworld \
-l version=region1.zone2 -o jsonpath='{.items[0].metadata.name}')" \ -l version=region1.zone2 -o jsonpath='{.items[0].metadata.name}')" \
-n sample -c istio-proxy -- curl -sL -X POST 127.0.0.1:15000/drain_listeners -n sample -c istio-proxy -- curl -sSL -X POST 127.0.0.1:15000/drain_listeners
} }
snip_failover_to_region2zone3_2() { snip_failover_to_region2zone3_2() {
kubectl exec --context="${CTX_R1_Z1}" -n sample -c sleep \ kubectl exec --context="${CTX_R1_Z1}" -n sample -c sleep \
"$(kubectl get pod --context="${CTX_R1_Z1}" -n sample -l \ "$(kubectl get pod --context="${CTX_R1_Z1}" -n sample -l \
app=sleep -o jsonpath='{.items[0].metadata.name}')" \ app=sleep -o jsonpath='{.items[0].metadata.name}')" \
-- curl -sL helloworld.sample:5000/hello -- curl -sSL helloworld.sample:5000/hello
} }
! read -r -d '' snip_failover_to_region2zone3_2_out <<\ENDSNIP ! read -r -d '' snip_failover_to_region2zone3_2_out <<\ENDSNIP
@ -97,14 +97,14 @@ snip_failover_to_region3zone4_1() {
kubectl --context="${CTX_R2_Z3}" exec \ kubectl --context="${CTX_R2_Z3}" exec \
"$(kubectl get pod --context="${CTX_R2_Z3}" -n sample -l app=helloworld \ "$(kubectl get pod --context="${CTX_R2_Z3}" -n sample -l app=helloworld \
-l version=region2.zone3 -o jsonpath='{.items[0].metadata.name}')" \ -l version=region2.zone3 -o jsonpath='{.items[0].metadata.name}')" \
-n sample -c istio-proxy -- curl -sL -X POST 127.0.0.1:15000/drain_listeners -n sample -c istio-proxy -- curl -sSL -X POST 127.0.0.1:15000/drain_listeners
} }
snip_failover_to_region3zone4_2() { snip_failover_to_region3zone4_2() {
kubectl exec --context="${CTX_R1_Z1}" -n sample -c sleep \ kubectl exec --context="${CTX_R1_Z1}" -n sample -c sleep \
"$(kubectl get pod --context="${CTX_R1_Z1}" -n sample -l \ "$(kubectl get pod --context="${CTX_R1_Z1}" -n sample -l \
app=sleep -o jsonpath='{.items[0].metadata.name}')" \ app=sleep -o jsonpath='{.items[0].metadata.name}')" \
-- curl -sL helloworld.sample:5000/hello -- curl -sSL helloworld.sample:5000/hello
} }
! read -r -d '' snip_failover_to_region3zone4_2_out <<\ENDSNIP ! read -r -d '' snip_failover_to_region3zone4_2_out <<\ENDSNIP

View File

@ -177,7 +177,7 @@ In this step, you will change that behavior so that all traffic goes to `v1`.
{{< text bash json >}} {{< text bash json >}}
$ export SLEEP_POD=$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name}) $ export SLEEP_POD=$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name})
$ kubectl exec "${SLEEP_POD}" -c sleep -- curl -s http://httpbin:8000/headers $ kubectl exec "${SLEEP_POD}" -c sleep -- curl -sS http://httpbin:8000/headers
{ {
"headers": { "headers": {
"Accept": "*/*", "Accept": "*/*",
@ -250,7 +250,7 @@ log entries for `v1` and none for `v2`:
1. Send in traffic: 1. Send in traffic:
{{< text bash >}} {{< text bash >}}
$ kubectl exec "${SLEEP_POD}" -c sleep -- curl -s http://httpbin:8000/headers $ kubectl exec "${SLEEP_POD}" -c sleep -- curl -sS http://httpbin:8000/headers
{{< /text >}} {{< /text >}}
Now, you should see access logging for both `v1` and `v2`. The access logs Now, you should see access logging for both `v1` and `v2`. The access logs

View File

@ -152,7 +152,7 @@ EOF
snip_creating_a_default_routing_policy_2() { snip_creating_a_default_routing_policy_2() {
export SLEEP_POD=$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name}) export SLEEP_POD=$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name})
kubectl exec "${SLEEP_POD}" -c sleep -- curl -s http://httpbin:8000/headers kubectl exec "${SLEEP_POD}" -c sleep -- curl -sS http://httpbin:8000/headers
} }
! read -r -d '' snip_creating_a_default_routing_policy_2_out <<\ENDSNIP ! read -r -d '' snip_creating_a_default_routing_policy_2_out <<\ENDSNIP
@ -213,7 +213,7 @@ EOF
} }
snip_mirroring_traffic_to_v2_2() { snip_mirroring_traffic_to_v2_2() {
kubectl exec "${SLEEP_POD}" -c sleep -- curl -s http://httpbin:8000/headers kubectl exec "${SLEEP_POD}" -c sleep -- curl -sS http://httpbin:8000/headers
} }
snip_mirroring_traffic_to_v2_3() { snip_mirroring_traffic_to_v2_3() {

View File

@ -43,7 +43,7 @@ function reviews_v3_traffic_percentage() {
local v3_count=0 local v3_count=0
local v3_search_string="glyphicon glyphicon-star" # search string present in reviews_v3 response html local v3_search_string="glyphicon glyphicon-star" # search string present in reviews_v3 response html
for ((i = 1; i <= total_request_count; i++)); do for ((i = 1; i <= total_request_count; i++)); do
if (kubectl exec "${SLEEP_POD}" -c sleep -n "default" -- curl -s $INGRESS_URL/productpage | grep -q "$v3_search_string"); then if (kubectl exec "${SLEEP_POD}" -c sleep -n "default" -- curl -sS $INGRESS_URL/productpage | grep -q "$v3_search_string"); then
v3_count=$((v3_count + 1)) v3_count=$((v3_count + 1))
fi fi
done done

View File

@ -58,7 +58,7 @@ CVE-2020-8663 is addressed in Envoy by adding a configurable limit on [downstrea
{{< text bash >}} {{< text bash >}}
$ ISTIO_INGRESS_PODNAME=$(kubectl get pods -l app=istio-ingressgateway -n istio-system -o jsonpath="{.items[0].metadata.name}") $ ISTIO_INGRESS_PODNAME=$(kubectl get pods -l app=istio-ingressgateway -n istio-system -o jsonpath="{.items[0].metadata.name}")
$ kubectl --namespace istio-system exec -i -t ${ISTIO_INGRESS_PODNAME} -c istio-proxy -- curl http://localhost:15000/runtime $ kubectl --namespace istio-system exec -i -t ${ISTIO_INGRESS_PODNAME} -c istio-proxy -- curl -sS http://localhost:15000/runtime
{ {
"entries": { "entries": {