9.7. 将 Red Hat OpenShift 的 cert-manager Operator 与 Istio-CSR 集成
Red Hat OpenShift 的 cert-manager Operator 的 Istio-CSR 集成只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
Red Hat OpenShift 的 cert-manager Operator 提供了对 Red Hat OpenShift Service Mesh 或 Istio 中保护工作负载和 control plane 组件的支持。这包括启用 mutual TLS (mTLS)的支持,这些 TLS 使用 cert-manager issuers 签名、交付和续订。您可以使用 cert-manager Operator for Red Hat OpenShift 管理的 Istio-CSR 代理来保护 Istio 工作负载和 control plane 组件。
通过这个 Istio-CSR 集成,Istio 现在可从 cert-manager Operator for Red Hat OpenShift 获取证书,从而简化安全性和证书管理。
9.7.1. 通过 cert-manager Operator 为 Red Hat OpenShift 安装 Istio-CSR 代理
9.7.1.1. 启用 Istio-CSR 功能
使用这个流程为 Red Hat OpenShift 在 cert-manager Operator 中启用 Istio-CSR 功能。
先决条件
-
您可以使用具有
cluster-admin
角色的用户访问集群。
流程
运行以下命令,为 Red Hat OpenShift 更新 cert-manager Operator 的部署以使用配置映射:
$ oc -n cert-manager-operator patch subscription openshift-cert-manager-operator --type='merge' -p '{"spec":{"config":{"env":[{"name":"UNSUPPORTED_ADDON_FEATURES","value":"IstioCSR=true"}]}}}'
验证
运行以下命令验证部署是否已推出:
$ oc rollout status deployment/cert-manager-operator-controller-manager -n cert-manager-operator
输出示例
deployment "cert-manager-operator-controller-manager" successfully rolled out
9.7.1.2. 为 Istio-CSR 代理创建根 CA 签发者
使用这个流程为 Istio-CSR 代理创建 root CA 签发者。
可以使用其他支持的签发者,但 ACME 签发者除外,这不被支持。如需更多信息,请参阅 "cert-manager Operator for Red Hat OpenShift issuer provider"。
创建一个 YAML 文件,如
issuer.yaml
,用于定义Issuer
和Certificate
对象:issuer.yaml
文件示例apiVersion: cert-manager.io/v1 kind: Issuer 1 metadata: name: selfsigned namespace: <istio_project_name> 2 spec: selfSigned: {} --- apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: istio-ca namespace: <istio_project_name> spec: isCA: true duration: 87600h # 10 years secretName: istio-ca commonName: istio-ca privateKey: algorithm: ECDSA size: 256 subject: organizations: - cluster.local - cert-manager issuerRef: name: selfsigned kind: Issuer 3 group: cert-manager.io --- kind: Issuer metadata: name: istio-ca namespace: <istio_project_name> 4 spec: ca: secretName: istio-ca
验证
运行以下命令验证 Issuer 是否已创建并可使用:
$ oc get issuer istio-ca -n <istio_project_name>
输出示例
NAME READY AGE istio-ca True 3m
9.7.1.3. 创建 IstioCSR
自定义资源
使用这个流程,通过 Red Hat OpenShift 的 cert-manager Operator 安装 Istio-CSR 代理。
先决条件
-
您可以使用
cluster-admin
权限访问集群。 - 您已启用了 Istio-CSR 功能。
您已创建了为 Istio-CSR 代理生成证书所需的
Issuer
或ClusterIssuer
资源。注意如果使用
Issuer
资源,请在 Red Hat OpenShift Service Mesh 或Istiod
命名空间中创建Issuer
和Certificate
资源。证书请求会在同一命名空间中生成,并且相应地配置基于角色的访问控制(RBAC)。
流程
运行以下命令,为安装 Istio-CSR 创建一个新项目。您可以使用现有项目并跳过这一步。
$ oc new-project <istio_csr_project_name>
创建
IstioCSR
自定义资源,为 Red Hat OpenShift 为 Red Hat OpenShift 启用由 cert-manager Operator 管理的 Istio-CSR 代理,以处理 Istio 工作负载和 control plane 证书签名请求。注意一次只支持一个
IstioCSR
自定义资源(CR)。如果创建了多个IstioCSR
CR,则只有一个将处于活跃状态。使用IstioCSR
的status
子资源检查资源是否未被处理。-
如果同时创建多个
IstioCSR
CR,则不会处理任何 IstioCSR CR。 -
如果按顺序创建多个
IstioCSR
CR,则只有第一个 IstioCSR CR 会被处理。 -
要防止新请求被拒绝,请删除任何未处理的
IstioCSR
CR。 -
Operator 不会自动删除为
IstioCSR
创建的对象。如果删除了活跃的IstioCSR
资源,并在没有删除之前的部署的情况下创建新资源,则多个istio-csr
部署可能会保持活动状态。不建议使用此行为,且不被支持。
创建一个定义
IstioCSR
对象的 YAML 文件,如istiocsr.yaml
:IstioCSR.yaml
文件示例apiVersion: operator.openshift.io/v1alpha1 kind: IstioCSR metadata: name: default namespace: <istio_csr_project_name> spec: IstioCSRConfig: certManager: issuerRef: name: istio-ca 1 kind: Issuer 2 group: cert-manager.io istiodTLSConfig: trustDomain: cluster.local istio: namespace: istio-system
运行以下命令来创建
IstioCSR
自定义资源:$ oc create -f IstioCSR.yaml
-
如果同时创建多个
验证
运行以下命令验证 Istio-CSR 部署是否已就绪:
$ oc get deployment -n <istio_csr_project_name>
输出示例
NAME READY UP-TO-DATE AVAILABLE AGE cert-manager-istio-csr 1/1 1 1 24s
运行以下命令验证 Istio-CSR pod 是否正在运行:
$ oc get pod -n <istio_csr_project_name>
输出示例
NAME READY STATUS RESTARTS AGE cert-manager-istio-csr-5c979f9b7c-bv57w 1/1 Running 0 45s
运行以下命令,验证 Istio-CSR pod 是否没有报告日志中的任何错误:
$ oc -n <istio_csr_project_name> logs <istio_csr_pod_name>
运行以下命令,验证 Red Hat OpenShift pod 的 cert-manager Operator 是否没有报告任何错误:
$ oc -n cert-manager-operator logs <cert_manager_operator_pod_name>
9.7.2. 为 Red Hat OpenShift 卸载由 cert-manager Operator 管理的 Istio-CSR 代理
使用这个流程为 Red Hat OpenShift 卸载由 cert-manager Operator 管理的 Istio-CSR 代理。
先决条件
-
您可以使用
cluster-admin
权限访问集群。 - 您已启用了 Istio-CSR 功能。
-
您已创建了
IstioCSR
自定义资源。
流程
运行以下命令来删除
IstioCSR
自定义资源:$ oc -n <istio-csr_project_name> delete istiocsrs.operator.openshift.io default
删除相关资源:
重要为了避免破坏任何 Red Hat OpenShift Service Mesh 或 Istio 组件,请确保在删除以下资源前没有引用 Istio-CSR 服务或为 Istio 发布的证书。
运行以下命令列出 cluster scoped-resources,并保存列出的资源的名称以供以后参考:
$ oc get clusterrolebindings,clusterroles -l "app=cert-manager-istio-csr,app.kubernetes.io/name=cert-manager-istio-csr"
运行以下命令列出 Istio-csr 部署命名空间中的资源,并保存列出的资源的名称以供以后参考:
$ oc get certificate,deployments,services,serviceaccounts -l "app=cert-manager-istio-csr,app.kubernetes.io/name=cert-manager-istio-csr" -n <istio_csr_project_name>
运行以下命令,列出 Red Hat OpenShift Service Mesh 或 Istio 部署命名空间中的资源,并保存列出的资源的名称以供以后参考:
$ oc get roles,rolebindings -l "app=cert-manager-istio-csr,app.kubernetes.io/name=cert-manager-istio-csr" -n <istio_csr_project_name>
对于前面步骤中列出的每个资源,运行以下命令来删除资源:
$ oc -n <istio_csr_project_name> delete <resource_type>/<resource_name>
重复此过程,直到所有相关资源都已被删除。
9.7.3. 为启用了 Istio-CSR 功能的 Red Hat OpenShift 升级 cert-manager Operator
当启用了 Istio-CSR TechPreview 功能门时,无法升级 Operator。要使用下一个可用版本,您必须为 Red Hat OpenShift 卸载 cert-manager Operator,并在重新安装前删除所有 Istio-CSR 资源。