Обратите внимание, что при запуске curl http://httpbin.foo:8000
из модуля, внедренного в Istio, происходит следующее:
- Ваш HTTP-запрос поступает на прокси-сервер Istio колоды вашего модуля (
sleep
) - Прокси-сервер sidecar инкапсулирует ваш запрос в соединение mTLS с httpbin.foo:8000
- Прокси-сервер sidecar
httpbin.foo
выполняет завершение TLS (декапсулирует исходный HTTP-запрос) и перенаправляет его на httpbin.foo
служба - Служба
httpbin.foo
получает исходный простой HTTP-запрос - Служба
httpbin.foo
отправляет простой HTTP-ответ - Прокси-сервер боковой панели
httpbin.foo
инкапсулируетответ и возвращает ответ вашему прокси-серверу - Ваш прокси-сервер возвращает ответ обратно вашему curl
Обратите внимание, что ваш curl получит простой HTTP-ответ службы httpbin.foo
,который не знает об Istio mTLS.Istio mTLS похож на туннель для связи между вашим curl и httpbin.foo
, сертификат из туннеля не будет возвращен вашему curl.
Чтобы получить сертификат прокси-сервера sidecar httpbin.foo
, вынеобходимо отправить запрос в службу httbin.foo
напрямую (она поступит на прокси-сервер колонтитула httpbin.foo
), минуя прокси-сервер колонтитула Istio вашего исходного модуля (sleep
).
Для этого вы можетеразверните модуль sleep
в некоторое пространство имен без внедрения Istio, а затем используйте openssl
для получения сертификата:
kubectl create namespace without-istio
kubectl apply -f samples/sleep/sleep.yaml -n without-istio
kubectl exec -it $(kubectl get pod -l app=sleep -n without-istio -o jsonpath={.items..metadata.name}) -n without-istio -c sleep -- openssl s_client -connect httpbin.foo:8000