9.10. 将 Red Hat OpenShift 的 cert-manager Operator 与 Istio-CSR 集成
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.10.1.1. 为 Istio-CSR 代理创建根 CA 签发者 复制链接链接已复制到粘贴板!
使用这个流程为 Istio-CSR 代理创建 root CA 签发者。
可以使用其他支持的签发者,但 ACME 签发者除外,这不被支持。如需更多信息,请参阅 "cert-manager Operator for Red Hat OpenShift issuer provider"。
流程
创建定义
Issuer和Certificate对象的 YAML 文件:issuer.yaml文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令验证 Issuer 是否已创建并可使用:
oc get issuer istio-ca -n <istio_project_name>
$ oc get issuer istio-ca -n <istio_project_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY AGE istio-ca True 3m
NAME READY AGE istio-ca True 3mCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.10.1.2. 创建 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 创建一个新项目。如果您有一个现有项目用于安装 Istio-CSR,请跳过这一步。
oc new-project <istio_csr_project_name>
$ oc new-project <istio_csr_project_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
IstioCSR自定义资源,为 Red Hat OpenShift 为 Red Hat OpenShift 启用由 cert-manager Operator 管理的 Istio-CSR 代理,以处理 Istio 工作负载和 control plane 证书签名请求。注意一次只支持一个
IstioCSR自定义资源 (CR)。如果创建了多个IstioCSRCR,则只有一个将处于活跃状态。使用IstioCSR的status子资源检查资源是否未被处理。-
如果同时创建多个
IstioCSRCR,则不会处理任何 IstioCSR CR。 -
如果按顺序创建多个
IstioCSRCR,则只有第一个 IstioCSR CR 会被处理。 -
要防止新请求被拒绝,请删除任何未处理的
IstioCSRCR。 -
Operator 不会自动删除为
IstioCSR创建的对象。如果删除了活跃的IstioCSR资源,并在没有删除之前的部署的情况下创建新资源,则多个istio-csr部署可能会保持活动状态。不建议使用此行为,且不被支持。
创建定义
IstioCSR对象的 YAML 文件:IstioCSRCR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
IstioCSR自定义资源:oc create -f IstioCSR.yaml
$ oc create -f IstioCSR.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
如果同时创建多个
验证
运行以下命令验证 Istio-CSR 部署是否已就绪:
oc get deployment -n <istio_csr_project_name>
$ oc get deployment -n <istio_csr_project_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY UP-TO-DATE AVAILABLE AGE cert-manager-istio-csr 1/1 1 1 24s
NAME READY UP-TO-DATE AVAILABLE AGE cert-manager-istio-csr 1/1 1 1 24sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令验证 Istio-CSR pod 是否正在运行:
oc get pod -n <istio_csr_project_name>
$ oc get pod -n <istio_csr_project_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE cert-manager-istio-csr-5c979f9b7c-bv57w 1/1 Running 0 45s
NAME READY STATUS RESTARTS AGE cert-manager-istio-csr-5c979f9b7c-bv57w 1/1 Running 0 45sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证 Istio-CSR pod 是否没有报告日志中的任何错误:
oc -n <istio_csr_project_name> logs <istio_csr_pod_name>
$ oc -n <istio_csr_project_name> logs <istio_csr_pod_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证 Red Hat OpenShift pod 的 cert-manager Operator 是否没有报告任何错误:
oc -n cert-manager-operator logs <cert_manager_operator_pod_name>
$ oc -n cert-manager-operator logs <cert_manager_operator_pod_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.10.2. 自定义 IstioCSR 自定义资源 复制链接链接已复制到粘贴板!
您可以修改 IstioCSR 自定义资源(CR),以定义 Istio 工作负载如何与 cert-manager Operator 交互。
9.10.2.1. 为 istio-csr 组件设置日志级别 复制链接链接已复制到粘贴板!
您可以为 istio-csr 组件设置日志级别,以控制其日志消息的详细程度和格式。
先决条件
-
您可以使用
cluster-admin权限访问集群。 -
您已创建了
IstioCSR自定义资源(CR)。
流程
运行以下命令来编辑
IstioCSRCR:oc edit istiocsrs.operator.openshift.io default -n <istio_csr_project_name>
oc edit istiocsrs.operator.openshift.io default -n <istio_csr_project_name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<istio_csr_project_name>替换为您创建IstioCSRCR 的命名空间。
在
spec.istioCSRConfig部分中配置日志级别和格式:用于设置日志级别的 IstioCSR CR 配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存并关闭编辑器以应用您的更改。应用更改后,cert-manager Operator 会更新 istio-csr 操作对象的日志配置。
9.10.2.2. 为 CA 捆绑包分发配置命名空间选择器 复制链接链接已复制到粘贴板!
Istio-CSR 代理会创建和更新 istio-ca-root-cert ConfigMap,其中包含 CA 捆绑包。服务网格中的工作负载使用此 CA 捆绑包来验证与 Istio control plane 的连接。您可以配置命名空间选择器,以指定 Istio-CSR 代理在其中创建此 ConfigMap 的命名空间。如果没有配置选择器,Istio-CSR 代理会在所有命名空间中创建 ConfigMap。
先决条件
-
您可以使用
cluster-admin权限访问集群。 -
您已创建了
IstioCSR自定义资源(CR)。
流程
运行以下命令来编辑
IstioCSRCR:oc edit istiocsrs.operator.openshift.io default -n <istio_csr_project_name>
oc edit istiocsrs.operator.openshift.io default -n <istio_csr_project_name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<istio_csr_project_name>替换为您创建IstioCSRCR 的命名空间。
配置
spec.istioCSRConfig.istioDataPlaneNamespaceSelector部分来设置命名空间选择器:使用命名空间选择器的 IstioCSR CR 配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
maistra.io/member-of=istio-system替换为标识服务网格中命名空间的标签键和值。使用<key>=<value>格式。
注意istio-csr 组件不会删除或管理与配置的选择器不匹配的命名空间中的
ConfigMap对象。如果在部署IstioCSRCR 后创建或更新选择器,或者从命名空间中删除标签,您必须手动删除这些ConfigMap对象以避免冲突。您可以运行以下命令来列出不在与选择器匹配的命名空间中的
ConfigMap对象。在本例中,选择器是maistra.io/member-of=istio-system:printf "%-25s %10s\n" "ConfigMap" "Namespace"; \ for ns in $(oc get namespaces -l "maistra.io/member-of!=istio-system" -o=jsonpath='{.items[*].metadata.name}'); do \ oc get configmaps -l "istio.io/config=true" -n $ns --no-headers -o jsonpath='{.items[*].metadata.name}{"\t"}{.items[*].metadata.namespace}{"\n"}' --ignore-not-found; \ doneprintf "%-25s %10s\n" "ConfigMap" "Namespace"; \ for ns in $(oc get namespaces -l "maistra.io/member-of!=istio-system" -o=jsonpath='{.items[*].metadata.name}'); do \ oc get configmaps -l "istio.io/config=true" -n $ns --no-headers -o jsonpath='{.items[*].metadata.name}{"\t"}{.items[*].metadata.namespace}{"\n"}' --ignore-not-found; \ doneCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存并关闭编辑器以应用您的更改。应用更改后,Red Hat OpenShift 的 cert-manager Operator 会更新 istio-csr 操作对象的命名空间选择器配置。
9.10.2.3. 为 Istio 服务器配置 CA 证书 复制链接链接已复制到粘贴板!
您可以配置包含 Istio 工作负载用来验证 Istio 服务器证书的 CA 捆绑包的 ConfigMap。如果没有配置,Red Hat OpenShift 的 cert-manager Operator 会在配置的签发者和包含 Istio 证书的 Kubernetes Secret 中查找 CA 证书。
先决条件
-
您可以使用
cluster-admin权限访问集群。 -
您已创建了
IstioCSR自定义资源(CR)。
流程
运行以下命令来编辑
IstioCSRCR:oc edit istiocsrs.operator.openshift.io default -n <istio_csr_project_name>
oc edit istiocsrs.operator.openshift.io default -n <istio_csr_project_name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<istio_csr_project_name>替换为您创建IstioCSRCR 的命名空间。
通过编辑
spec.istioCSRConfig.certManager部分来配置 CA 捆绑包:带有 CA 捆绑包配置的
IstioCSRCR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意每当轮转 CA 证书时,必须使用最新的证书手动更新
ConfigMap。-
保存并关闭编辑器以应用您的更改。应用更改后,cert-manager Operator 会更新
istio-csr操作对象的 CA 捆绑包。
使用这个流程为 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
$ oc -n <istio_csr_project_name> delete istiocsrs.operator.openshift.io defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 删除相关资源:
重要为了避免破坏任何 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"
$ oc get clusterrolebindings,clusterroles -l "app=cert-manager-istio-csr,app.kubernetes.io/name=cert-manager-istio-csr"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令列出 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>
$ 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>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,列出 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 get roles,rolebindings -l "app=cert-manager-istio-csr,app.kubernetes.io/name=cert-manager-istio-csr" -n <istio_csr_project_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于前面步骤中列出的每个资源,运行以下命令来删除资源:
oc -n <istio_csr_project_name> delete <resource_type>/<resource_name>
$ oc -n <istio_csr_project_name> delete <resource_type>/<resource_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重复此过程,直到所有相关资源都已被删除。