7.4.3 检查新证书

下面我们以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。