4.2. 安装 cert-manager
您可以通过部署 istio-csr
将 cert-manager 与 OpenShift Service Mesh 集成,然后创建一个使用 istio-csr
代理来处理工作负载和 control plane 证书签名请求的 Istio
资源。这个示例创建了一个自签名的 Issuer
,但可以使用任何其他 Issuer
。
在安装 Istio
资源前,您必须安装 cert-manager。
步骤
运行以下命令来创建
istio-system
命名空间:oc create namespace istio-system
$ oc create namespace istio-system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过在 YAML 文件中创建
Issuer
对象来创建 root 签发者。创建类似以下示例的
Issuer
对象:issuer.yaml
文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建对象:
oc apply -f issuer.yaml
$ oc apply -f issuer.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,等待
istio-ca
证书包含 "Ready" 状态条件:oc wait --for=condition=Ready certificates/istio-ca -n istio-system
$ oc wait --for=condition=Ready certificates/istio-ca -n istio-system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
将
istio-ca
证书复制到cert-manager
命名空间中,以便 istio-csr 可以使用它:运行以下命令,将 secret 复制到本地文件中:
oc get -n istio-system secret istio-ca -o jsonpath='{.data.tls\.crt}' | base64 -d > ca.pem
$ oc get -n istio-system secret istio-ca -o jsonpath='{.data.tls\.crt}' | base64 -d > ca.pem
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,从
cert-manager
命名空间中的本地证书文件创建 secret:oc create secret generic -n cert-manager istio-root-ca --from-file=ca.pem=ca.pem
$ oc create secret generic -n cert-manager istio-root-ca --from-file=ca.pem=ca.pem
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
后续步骤
要安装 istio-csr
,您必须遵循 istio-csr
安装说明的所需更新策略类型。默认情况下,在创建并安装 Istio
资源时,spec.updateStrategy
被设置为 InPlace
。安装 istio-csr
后,您可以创建并安装 Istio
资源。
4.2.1. 使用原位更新策略安装 istio-csr 代理 复制链接链接已复制到粘贴板!
Istio 资源默认使用 in place 更新策略。如果您计划在创建并安装 Istio
资源时将 spec.updateStrategy
设置为 InPlace
,请按照以下步骤操作。
步骤
运行以下命令,将 Jetstack chart 仓库添加到本地 Helm 仓库中:
helm repo add jetstack https://charts.jetstack.io --force-update
$ helm repo add jetstack https://charts.jetstack.io --force-update
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来安装
istio-csr
chart:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
后续步骤
4.2.2. 使用基于修订的更新策略安装 istio-csr 代理 复制链接链接已复制到粘贴板!
Istio 资源默认使用 in place 更新策略。如果您计划在创建并安装 Istio
资源时将 spec.updateStrategy
更改为 RevisionBased
,请按照以下步骤操作。
步骤
-
指定
istio-csr
部署的所有 Istio 修订版本。请参阅"istio-csr 部署"。 运行以下命令,将 Jetstack chart 添加到本地 Helm 仓库中:
helm repo add jetstack https://charts.jetstack.io --force-update
$ helm repo add jetstack https://charts.jetstack.io --force-update
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,使用您的修订名称安装
istio-csr
chart:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意修订名称采用以下格式 <
istio-name>-v<major_version>-<minor_version>-<patch_version>
。例如:default-v1-24-3
。
其他资源
后续步骤
4.2.3. 安装 Istio 资源 复制链接链接已复制到粘贴板!
按照原位或基于修订的更新策略的流程安装了 istio-csr
后,您可以安装 Istio
资源。
您需要禁用 Istio 在 CA 服务器中构建,并告知 istiod 使用 istio-csr
CA 服务器。istio-csr
CA 服务器为 istiod 和用户工作负载发布证书。
步骤
创建
Istio
对象,如下例所示:istio.yaml
对象示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果您安装了带有基于修订的更新策略的 CSR 代理,则需要在
Istio
对象 YAML 中添加以下内容:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
Istio
资源:oc apply -f istio.yaml
$ oc apply -f istio.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令等待
Istio
对象就绪:oc wait --for=condition=Ready istios/default -n istio-system
$ oc wait --for=condition=Ready istios/default -n istio-system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2.4. 验证 cert-manager 安装 复制链接链接已复制到粘贴板!
您可以使用示例 httpbin
服务和 sleep
应用程序来检查工作负载之间的通信。您还可以检查代理的工作负载证书,以验证是否已正确安装了 cert-manager 工具。
步骤
运行以下命令来创建
示例
命名空间:oc new-project sample
$ oc new-project sample
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令查找活跃的 Istio 修订版本:
oc get istios default -o jsonpath='{.status.activeRevisionName}'
$ oc get istios default -o jsonpath='{.status.activeRevisionName}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,将活跃修订版本的注入标签添加到
示例
命名空间中:oc label namespace sample istio.io/rev=<your-active-revision-name> --overwrite=true
$ oc label namespace sample istio.io/rev=<your-active-revision-name> --overwrite=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来部署示例
httpbin
服务:oc apply -n sample -f https://raw.githubusercontent.com/openshift-service-mesh/istio/refs/heads/master/samples/httpbin/httpbin.yaml
$ oc apply -n sample -f https://raw.githubusercontent.com/openshift-service-mesh/istio/refs/heads/master/samples/httpbin/httpbin.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来部署示例
sleep
应用程序:oc apply -n sample -f https://raw.githubusercontent.com/openshift-service-mesh/istio/refs/heads/master/samples/sleep/sleep.yaml
$ oc apply -n sample -f https://raw.githubusercontent.com/openshift-service-mesh/istio/refs/heads/master/samples/sleep/sleep.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令等待两个应用程序就绪:
oc rollout status -n sample deployment httpbin sleep
$ oc rollout status -n sample deployment httpbin sleep
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证
sleep
应用程序是否可以访问httpbin
服务:oc exec "$(oc get pod -l app=sleep -n sample \ -o jsonpath={.items..metadata.name})" -c sleep -n sample -- \ curl http://httpbin.sample:8000/ip -s -o /dev/null \ -w "%{http_code}\n"
$ oc exec "$(oc get pod -l app=sleep -n sample \ -o jsonpath={.items..metadata.name})" -c sleep -n sample -- \ curl http://httpbin.sample:8000/ip -s -o /dev/null \ -w "%{http_code}\n"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 成功输出示例
200
200
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令输出
httpbin
服务的工作负载证书并验证输出:istioctl proxy-config secret -n sample $(oc get pods -n sample -o jsonpath='{.items..metadata.name}' --selector app=httpbin) -o json | jq -r '.dynamicActiveSecrets[0].secret.tlsCertificate.certificateChain.inlineBytes' | base64 --decode | openssl x509 -text -noout
$ istioctl proxy-config secret -n sample $(oc get pods -n sample -o jsonpath='{.items..metadata.name}' --selector app=httpbin) -o json | jq -r '.dynamicActiveSecrets[0].secret.tlsCertificate.certificateChain.inlineBytes' | base64 --decode | openssl x509 -text -noout
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
... Issuer: O = cert-manager + O = cluster.local, CN = istio-ca ... X509v3 Subject Alternative Name: URI:spiffe://cluster.local/ns/sample/sa/httpbin
... Issuer: O = cert-manager + O = cluster.local, CN = istio-ca ... X509v3 Subject Alternative Name: URI:spiffe://cluster.local/ns/sample/sa/httpbin
Copy to Clipboard Copied! Toggle word wrap Toggle overflow