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"。

流程

  1. 创建定义 IssuerCertificate 对象的 YAML 文件:

    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
    ---
    apiVersion: cert-manager.io/v1
    kind: Issuer 
    4
    
    metadata:
      name: istio-ca
      namespace: <istio_project_name> 
    5
    
    spec:
      ca:
        secretName: istio-ca
    Copy to Clipboard Toggle word wrap

    1 3 4
    指定 IssuerClusterIssuer
    2 5
    指定 Istio 项目的名称。

验证

  • 运行以下命令验证 Issuer 是否已创建并可使用:

    $ oc get issuer istio-ca -n <istio_project_name>
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME       READY   AGE
    istio-ca   True    3m
    Copy to Clipboard Toggle word wrap

9.10.1.2. 创建 IstioCSR 自定义资源

使用这个流程,通过 Red Hat OpenShift 的 cert-manager Operator 安装 Istio-CSR 代理。

先决条件

  • 您可以使用 cluster-admin 权限访问集群。
  • 您已启用了 Istio-CSR 功能。
  • 您已创建了为 Istio-CSR 代理生成证书所需的 IssuerClusterIssuer 资源。

    注意

    如果使用 Issuer 资源,请在 Red Hat OpenShift Service Mesh 或 Istiod 命名空间中创建 IssuerCertificate 资源。证书请求会在同一命名空间中生成,并且相应地配置基于角色的访问控制(RBAC)。

流程

  1. 运行以下命令,为安装 Istio-CSR 创建一个新项目。如果您有一个现有项目用于安装 Istio-CSR,请跳过这一步。

    $ oc new-project <istio_csr_project_name>
    Copy to Clipboard Toggle word wrap
  2. 创建 IstioCSR 自定义资源,为 Red Hat OpenShift 为 Red Hat OpenShift 启用由 cert-manager Operator 管理的 Istio-CSR 代理,以处理 Istio 工作负载和 control plane 证书签名请求。

    注意

    一次只支持一个 IstioCSR 自定义资源 (CR)。如果创建了多个 IstioCSR CR,则只有一个将处于活跃状态。使用 IstioCSRstatus 子资源检查资源是否未被处理。

    • 如果同时创建多个 IstioCSR CR,则不会处理任何 IstioCSR CR。
    • 如果按顺序创建多个 IstioCSR CR,则只有第一个 IstioCSR CR 会被处理。
    • 要防止新请求被拒绝,请删除任何未处理的 IstioCSR CR。
    • Operator 不会自动删除为 IstioCSR 创建的对象。如果删除了活跃的 IstioCSR 资源,并在没有删除之前的部署的情况下创建新资源,则多个 istio-csr 部署可能会保持活动状态。不建议使用此行为,且不被支持。
    1. 创建定义 IstioCSR 对象的 YAML 文件:

      IstioCSR CR 示例

      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_project_name>
      Copy to Clipboard Toggle word wrap

      1
      指定 IssuerClusterIssuer 名称。它应与 issuer.yaml 文件中定义的 CA 签发者名称相同。
      2
      指定 IssuerClusterIssuer kind。它应该与 issuer.yaml 文件中定义的 CA 签发者相同。
    2. 运行以下命令来创建 IstioCSR 自定义资源:

      $ oc create -f IstioCSR.yaml
      Copy to Clipboard Toggle word wrap

验证

  1. 运行以下命令验证 Istio-CSR 部署是否已就绪:

    $ oc get deployment -n <istio_csr_project_name>
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME                     READY   UP-TO-DATE   AVAILABLE   AGE
    cert-manager-istio-csr   1/1     1            1           24s
    Copy to Clipboard Toggle word wrap

  2. 运行以下命令验证 Istio-CSR pod 是否正在运行:

    $ oc get pod -n <istio_csr_project_name>
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME                                  	 READY   STATUS	  RESTARTS    AGE
    cert-manager-istio-csr-5c979f9b7c-bv57w  1/1     Running  0           45s
    Copy to Clipboard Toggle word wrap

    • 运行以下命令,验证 Istio-CSR pod 是否没有报告日志中的任何错误:

      $ oc -n <istio_csr_project_name> logs <istio_csr_pod_name>
      Copy to Clipboard Toggle word wrap
    • 运行以下命令,验证 Red Hat OpenShift pod 的 cert-manager Operator 是否没有报告任何错误:

      $ oc -n cert-manager-operator logs <cert_manager_operator_pod_name>
      Copy to Clipboard Toggle word wrap

9.10.2. 自定义 IstioCSR 自定义资源

您可以修改 IstioCSR 自定义资源(CR),以定义 Istio 工作负载如何与 cert-manager Operator 交互。

9.10.2.1. 为 istio-csr 组件设置日志级别

您可以为 istio-csr 组件设置日志级别,以控制其日志消息的详细程度和格式。

先决条件

  • 您可以使用 cluster-admin 权限访问集群。
  • 您已创建了 IstioCSR 自定义资源(CR)。

流程

  1. 运行以下命令来编辑 IstioCSR CR:

    oc edit istiocsrs.operator.openshift.io default -n <istio_csr_project_name> 
    1
    Copy to Clipboard Toggle word wrap
    1
    <istio_csr_project_name> 替换为您创建 IstioCSR CR 的命名空间。
  2. spec.istioCSRConfig 部分中配置日志级别和格式:

    用于设置日志级别的 IstioCSR CR 配置示例

    apiVersion: operator.openshift.io/v1alpha1
    kind: IstioCSR
    ...
    spec:
      istioCSRConfig:
        logFormat: text 
    1
    
        logLevel: 2 
    2
    
    # ...
    Copy to Clipboard Toggle word wrap

    1
    指定日志输出格式。您可以将此字段设置为 textjson
    2
    设置日志级别。支持的值的范围为 15,如 Kubernetes 日志记录指南所定义。默认值为 1
  3. 保存并关闭编辑器以应用您的更改。应用更改后,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)。

流程

  1. 运行以下命令来编辑 IstioCSR CR:

    oc edit istiocsrs.operator.openshift.io default -n <istio_csr_project_name> 
    1
    Copy to Clipboard Toggle word wrap
    1
    <istio_csr_project_name> 替换为您创建 IstioCSR CR 的命名空间。
  2. 配置 spec.istioCSRConfig.istioDataPlaneNamespaceSelector 部分来设置命名空间选择器:

    使用命名空间选择器的 IstioCSR CR 配置示例

    apiVersion: operator.openshift.io/v1alpha1
    kind: IstioCSR
    ...
    spec:
      istioCSRConfig:
        istioDataPlaneNamespaceSelector: maistra.io/member-of=istio-system 
    1
    
    # ...
    Copy to Clipboard Toggle word wrap

    1
    maistra.io/member-of=istio-system 替换为标识服务网格中命名空间的标签键和值。使用 <key>=<value> 格式。
    注意

    istio-csr 组件不会删除或管理与配置的选择器不匹配的命名空间中的 ConfigMap 对象。如果在部署 IstioCSR CR 后创建或更新选择器,或者从命名空间中删除标签,您必须手动删除这些 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; \
    done
    Copy to Clipboard Toggle word wrap
  3. 保存并关闭编辑器以应用您的更改。应用更改后,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)。

流程

  1. 运行以下命令来编辑 IstioCSR CR:

    oc edit istiocsrs.operator.openshift.io default -n <istio_csr_project_name> 
    1
    Copy to Clipboard Toggle word wrap
    1
    <istio_csr_project_name> 替换为您创建 IstioCSR CR 的命名空间。
  2. 通过编辑 spec.istioCSRConfig.certManager 部分来配置 CA 捆绑包:

    带有 CA 捆绑包配置的 IstioCSR CR 示例

    apiVersion: operator.openshift.io/v1alpha1
    kind: IstioCSR
    ...
    spec:
      istioCSRConfig:
        certManager:
          istioCACertificate:
            key: <key_in_the_configmap> 
    1
    
            name: <configmap_name> 
    2
    
            namespace: <configmap_namespace> 
    3
    Copy to Clipboard Toggle word wrap

    1
    指定包含 CA 捆绑包的 ConfigMap 中的键名称。
    2
    指定 ConfigMap 的名称。在更新此字段前,请确保引用的 ConfigMap 和密钥存在。
    3
    可选:指定 ConfigMap 存在的命名空间。如果没有设置此字段,cert-manager Operator for Red Hat OpenShift 会在安装 IstioCSR CR 的命名空间中搜索 ConfigMap
    注意

    每当轮转 CA 证书时,必须使用最新的证书手动更新 ConfigMap

  3. 保存并关闭编辑器以应用您的更改。应用更改后,cert-manager Operator 会更新 istio-csr 操作对象的 CA 捆绑包。

使用这个流程为 Red Hat OpenShift 卸载由 cert-manager Operator 管理的 Istio-CSR 代理。

先决条件

  • 您可以使用 cluster-admin 权限访问集群。
  • 您已启用了 Istio-CSR 功能。
  • 您已创建了 IstioCSR 自定义资源。

流程

  1. 运行以下命令来删除 IstioCSR 自定义资源:

    $ oc -n <istio_csr_project_name> delete istiocsrs.operator.openshift.io default
    Copy to Clipboard Toggle word wrap
  2. 删除相关资源:

    重要

    为了避免破坏任何 Red Hat OpenShift Service Mesh 或 Istio 组件,请确保在删除以下资源前没有引用 Istio-CSR 服务或为 Istio 发布的证书。

    1. 运行以下命令列出 cluster scoped-resources,并保存列出的资源的名称以供以后参考:

      $ oc get clusterrolebindings,clusterroles -l "app=cert-manager-istio-csr,app.kubernetes.io/name=cert-manager-istio-csr"
      Copy to Clipboard Toggle word wrap
    2. 运行以下命令列出 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>
      Copy to Clipboard Toggle word wrap
    3. 运行以下命令,列出 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>
      Copy to Clipboard Toggle word wrap
    4. 对于前面步骤中列出的每个资源,运行以下命令来删除资源:

      $ oc -n <istio_csr_project_name> delete <resource_type>/<resource_name>
      Copy to Clipboard Toggle word wrap

      重复此过程,直到所有相关资源都已被删除。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat