Istio:正在检索另一个pod的证书详细信息
我试图理解mTLS是如何在Istio中实现的,并提出了以下场景。 在我的设置中,我有一个带有两个pod的名称空间foo,如下所示:Istio:正在检索另一个pod的证书详细信息,istio,Istio,我试图理解mTLS是如何在Istio中实现的,并提出了以下场景。 在我的设置中,我有一个带有两个pod的名称空间foo,如下所示: NAME READY STATUS RESTARTS AGE httpbin-75b47445c9-gscrn 2/2 Running 0 1d sleep-6777b55c98-tlqb6 2/2 Running 0 1d 我的要求是
NAME READY STATUS RESTARTS AGE
httpbin-75b47445c9-gscrn 2/2 Running 0 1d
sleep-6777b55c98-tlqb6 2/2 Running 0 1d
我的要求是从sleep
检索httpbin
的公共证书(仅用于测试目的)
因此,我在sleep中获得了一个交互式shell并执行该命令
但我没有从中得到任何结果
但是,如果我替换http://httpbin.foo:8000/ip
与http://google.com
我可以正确获取证书详细信息
请您解释一下这里发生了什么。请注意,当您运行
curl时http://httpbin.foo:8000
从Istio注入吊舱中,发生以下情况:
sleep
)httpbin.foo
的侧车代理执行TLS终止(解除原始HTTP请求的封装)并将其转发给httpbin.foo
服务httpbin.foo
服务接收原始的普通HTTP请求httpbin.foo
服务发送一个简单的HTTP响应httpbin.foo
的sidecar代理封装响应并将响应返回给sidecar代理httpbin.foo
服务的普通HTTP响应,该服务不知道Istio mTLS。Istio mTLS就像curl和httpbin.foo
之间通信的隧道,隧道中的证书不会返回到curl
要获取httpbin.foo
的sidecar代理的证书,您需要直接向httbin.foo
服务发送请求(它将到达httpbin.foo
的sidecar代理),绕过源pod的Istio sidecar代理(sleep
)
为此,您可以将sleep
pod部署到某个名称空间,而不使用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
请注意,当您运行
curl时http://httpbin.foo:8000
从Istio注入吊舱中,发生以下情况:
sleep
)httpbin.foo
的侧车代理执行TLS终止(解除原始HTTP请求的封装)并将其转发给httpbin.foo
服务httpbin.foo
服务接收原始的普通HTTP请求httpbin.foo
服务发送一个简单的HTTP响应httpbin.foo
的sidecar代理封装响应并将响应返回给sidecar代理httpbin.foo
服务的普通HTTP响应,该服务不知道Istio mTLS。Istio mTLS就像curl和httpbin.foo
之间通信的隧道,隧道中的证书不会返回到curl
要获取httpbin.foo
的sidecar代理的证书,您需要直接向httbin.foo
服务发送请求(它将到达httpbin.foo
的sidecar代理),绕过源pod的Istio sidecar代理(sleep
)
为此,您可以将sleep
pod部署到某个名称空间,而不使用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
你能从中得到什么吗?@Crou没有。当我尝试ping它时,我得到了
ping:bad address'http://httpbin.foo:8000/ip
。当我做curl-v时http://httpbin.foo:8000/ip
我得到了一个200 OK
…你能从中得到什么吗?@Crou没有。当我尝试ping它时,我得到了ping:bad address'http://httpbin.foo:8000/ip
。当我做curl-v时http://httpbin.foo:8000/ip
我得到一个200 OK
。。。