下面我们以sleep pod为例,检查这个pod上加载的证书。如果该容器不存在,可以通过如下命令创建:
kubectl apply -f {istio目录}/samples/sleep/sleep.yaml
用变量RATINGSPOD保存pod名称:
RATINGSPOD=`kubectl get pods -l app=sleep -o jsonpath='{.items[0].metadata.name}'`
运行下列命令,获取proxy容器中加载的证书:
kubectl exec -it $RATINGSPOD -c istio-proxy -- /bin/cat /etc/certs/root-cert.pem > ./pod-root-cert.pem // pod-root-cert.pem 文件中包含传播到pod中的根证书。 kubectl exec -it $RATINGSPOD -c istio-proxy -- /bin/cat /etc/certs/cert-chain.pem > ./pod-cert-chain.pem // pod-cert-chain.pem 文件则包含了工作负载证书以及传播到pod中的 CA 证书
检查根证书和前面指定的根证书是否一致:
docker run --rm -v $(pwd):/key-and-certs frapsoft/openssl x509 -in /key-and-certs/pod-root-cert.pem -text -noout > pod-root-cert.crt.txt docker run --rm -v $(pwd):/key-and-certs frapsoft/openssl x509 -in /key-and-certs/root-cert.pem -text -noout > root-cert.crt.txt
对比文件pod-root-cert.crt.txt与root-cert.crt.txt,可以看到内容完全一致。
同样地,检查CA证书和上述指定的证书是否一致:
tail -n 23 pod-cert-chain.pem > pod-cert-chain-ca.pem docker run --rm -v $(pwd):/key-and-certs frapsoft/openssl x509 -in /key-and-certs/pod-cert-chain-ca.pem -text -noout > pod-cert-chain-ca.crt.txt docker run --rm -v $(pwd):/key-and-certs frapsoft/openssl x509 -in /key-and-certs/ca-cert.pem -text -noout > ca-cert.crt.txt
对比文件pod-cert-chain-ca.crt.txt与ca-cert.crt.txt,可以看到内容完全一致。
检查从根证书到工作负载证书的证书链:
head -n 22 pod-cert-chain.pem > pod-cert-chain-workload.pem cat ca-cert.pem root-cert.pem > ca-cert-and-root-cert.pem docker run --rm -v $(pwd):/key-and-certs frapsoft/openssl verify -CAfile /key-and-certs/ca-cert-and-root-cert.pem /key-and-certs/pod-cert-chain-workload.pem
运行显示/key-and-certs/pod-cert-chain-workload.pem:OK。