1.13.4. 添加外部证书颁发机构密钥和证书
默认情况下,Red Hat OpenShift Service Mesh 生成自签名 root 证书和密钥,并使用它们为工作负载证书签名。您还可以使用用户定义的证书和密钥使用用户定义的 root 证书为工作负载证书签名。此任务演示了一个将证书和密钥插入 Service Mesh 的示例。
先决条件
- 在启用了 mutual TLS 配置证书的情况下安装 Red Hat OpenShift Service Mesh。
- 本例使用 Maistra 仓库 的证书。对于生产环境,请使用您自己的证书颁发机构提供的证书。
- 部署 Bookinfo 示例应用程序以按照以下说明验证结果。
- 需要 openssl 才能验证证书。
1.13.4.1. 添加一个现有证书和密钥
要使用现有签名(CA)证书和密钥,必须创建一个信任文件链,其中包括 CA 证书、密钥和 root 证书。您必须为每个对应证书使用以下准确文件名称。CA 证书名为 ca-cert.pem
,密钥是 ca-key.pem
,签名 ca-cert.pem
的 root 证书名为 root-cert.pem
。如果您的工作负载使用中间证书,则必须在 cert-chain.pem
文件中指定它们。
-
本地保存 Maistra repo 中的示例证书,,将
<path>
替换为证书的路径。 创建名为
cacert
的 secret,其中包含输入文件ca-cert.pem
、ca-key.pem
、root-cert.pem
和cert-chain.pem
。$ oc create secret generic cacerts -n istio-system --from-file=<path>/ca-cert.pem \ --from-file=<path>/ca-key.pem --from-file=<path>/root-cert.pem \ --from-file=<path>/cert-chain.pem
在
ServiceMeshControlPlane
资源中将spec.security.dataPlane.mtls
设置为true
,并配置certificateAuthority
字段,如下例所示。默认rootCADir
是/etc/cacerts
。如果在默认位置挂载了密钥和证书,则不需要设置privateKey
。Service Mesh 从 secret-mount 文件中读取证书和密钥。apiVersion: maistra.io/v2 kind: ServiceMeshControlPlane spec: security: dataPlane: mtls: true certificateAuthority: type: Istiod istiod: type: PrivateKey privateKey: rootCADir: /etc/cacerts
创建/更改/取消设置
cacert
secret 后,Service Mesh control planeistiod
和网关
pod 必须重启,以便更改生效。使用以下命令重启 pod:$ oc -n istio-system delete pods -l 'app in (istiod,istio-ingressgateway, istio-egressgateway)'
Operator 会在 pod 被删除后自动重新创建。
重启 bookinfo 应用程序 pod,以便 sidecar 代理会获取 secret 的更改。使用以下命令重启 pod:
$ oc -n bookinfo delete pods --all
您应该看到类似如下的输出:
pod "details-v1-6cd699df8c-j54nh" deleted pod "productpage-v1-5ddcb4b84f-mtmf2" deleted pod "ratings-v1-bdbcc68bc-kmng4" deleted pod "reviews-v1-754ddd7b6f-lqhsv" deleted pod "reviews-v2-675679877f-q67r2" deleted pod "reviews-v3-79d7549c7-c2gjs" deleted
使用以下命令验证 pod 是否已创建并就绪:
$ oc get pods -n bookinfo