10.8. 使用您自己的 CA 证书和私钥


安装和使用您自己的 CA 证书和私钥,而不是使用 Cluster Operator 生成的默认值。您可以替换集群和客户端 CA 证书和私钥。

您可以使用以下方法切换到使用您自己的 CA 证书和私钥:

  • 在部署 Kafka 集群前安装您自己的 CA 证书和私钥
  • 在部署 Kafka 集群后,将默认 CA 证书和私钥替换为您自己的密钥

部署 Kafka 集群后替换默认 CA 证书和私钥的步骤与用来更新您自己的 CA 证书和私钥的步骤相同。

如果您使用自己的证书,则不会自动更新它们。您需要先续订 CA 证书和私钥,然后再过期。

续订选项:

  • 只续订 CA 证书
  • 续订 CA 证书和私钥(或替换默认值)

10.8.1. 安装您自己的 CA 证书和私钥

安装您自己的 CA 证书和私钥,而不是使用由 Cluster Operator 生成的集群和客户端 CA 证书和私钥。

默认情况下,AMQ Streams 使用以下 集群 CA 和客户端 CA secret,这些 secret 会被自动更新。

  • 集群 CA secret

    • <cluster_name>-cluster-ca
    • <cluster_name>-cluster-ca-cert
  • 客户端 CA secret

    • <cluster_name>-clients-ca
    • <cluster_name>-clients-ca-cert

要安装您自己的证书,请使用相同的名称。

先决条件

  • Cluster Operator 正在运行。
  • Kafka 集群尚未部署。

    如果您已经部署了 Kafka 集群,您可以将 默认 CA 证书替换为您自己的

  • 您自己的 X.509 证书和密钥,采用 PEM 格式集群 CA 或客户端 CA。

    • 如果要使用不是 Root CA 的集群或客户端 CA,则必须在证书文件中包括整个链。链应该按照以下顺序:

      1. 集群或客户端 CA
      2. 一个或多个中间 CA
      3. Root CA
    • 链中的所有 CA 都应该使用 X509v3 基本限制扩展进行配置。基本限制限制证书链的路径长度。
  • 用于转换证书的 OpenSSL TLS 管理工具。

开始前

Cluster Operator 使用 PEM (Privacy Enhanced Mail)和 PKCS #12 (Public-Key Cryptography Standards)格式生成密钥和证书。您可以以任何格式添加自己的证书。

有些应用程序无法使用 PEM 证书并支持 PKCS #12 证书。如果您没有 PKCS #12 格式的集群证书,请使用 OpenSSL TLS 管理工具从 ca.crt 文件中生成一个。

证书生成命令示例

openssl pkcs12 -export -in ca.crt -nokeys -out ca.p12 -password pass:<P12_password> -caname ca.crt
Copy to Clipboard Toggle word wrap

<P12_password > 替换为您自己的密码。

流程

  1. 创建包含 CA 证书的新 secret。

    仅在 PEM 格式使用证书创建客户端 secret

    oc create secret generic <cluster_name>-clients-ca-cert --from-file=ca.crt=ca.crt
    Copy to Clipboard Toggle word wrap

    使用 PEM 和 PKCS #12 格式的证书创建集群 secret

    oc create secret generic <cluster_name>-cluster-ca-cert \
      --from-file=ca.crt=ca.crt \
      --from-file=ca.p12=ca.p12 \
      --from-literal=ca.password=P12-PASSWORD
    Copy to Clipboard Toggle word wrap

    <cluster_name > 替换为 Kafka 集群的名称。

  2. 创建包含私钥的新 secret。

    oc create secret generic CA-KEY-SECRET --from-file=ca.key=ca.key
    Copy to Clipboard Toggle word wrap
  3. 标记 secret。

    oc label secret CA-CERTIFICATE-SECRET strimzi.io/kind=Kafka strimzi.io/cluster=<cluster_name>
    Copy to Clipboard Toggle word wrap
    oc label secret CA-KEY-SECRET strimzi.io/kind=Kafka strimzi.io/cluster=<cluster_name>
    Copy to Clipboard Toggle word wrap
    • 标签 strimzi.io/kind=Kafka 标识 Kafka 自定义资源。
    • 标签 strimzi.io/cluster= &lt;cluster_name& gt; 标识 Kafka 集群。
  4. 注解 secret

    oc annotate secret CA-CERTIFICATE-SECRET strimzi.io/ca-cert-generation=CA-CERTIFICATE-GENERATION
    Copy to Clipboard Toggle word wrap
    oc annotate secret CA-KEY-SECRET strimzi.io/ca-key-generation=CA-KEY-GENERATION
    Copy to Clipboard Toggle word wrap
    • 注解 strimzi.io/ca-cert-generation=CA-CERTIFICATE-GENERATION 定义新 CA 证书的生成。
    • 注解 strimzi.io/ca-key-generation=CA-KEY-GENERATION 定义新 CA 密钥的生成。

      从 0 (零)开始,作为您自己的 CA 证书的增量值(strimzi.io/ca-cert-generation=0)。在更新证书时设置更高的增量值。

  5. 为集群创建 Kafka 资源,配置 Kafka.spec.clusterCaKafka.spec.clientsCa 对象来 不使用 生成的 CA。

    配置集群 CA 的片段 Kafka 资源示例,使用您提供的证书

    kind: Kafka
    version: kafka.strimzi.io/v1beta2
    spec:
      # ...
      clusterCa:
        generateCertificateAuthority: false
    Copy to Clipboard Toggle word wrap

10.8.2. 更新您自己的 CA 证书

如果您使用自己的 CA 证书,则需要手动更新它们。Cluster Operator 不会自动续订。在续订周期过期前续订 CA 证书。

当您续订 CA 证书并继续使用相同的私钥时,请执行此流程中的步骤。如果您要更新自己的 CA 证书和私钥,请参阅 第 10.8.3 节 “使用您自己的续订或替换 CA 证书和私钥”

该流程描述了 PEM 格式更新 CA 证书。

先决条件

  • Cluster Operator 正在运行。
  • 您有 PEM 格式的新集群或客户端 X.509 证书。

流程

  1. 更新 CA 证书的 Secret

    编辑现有的 secret 以添加新 CA 证书并更新证书生成注解值。

    oc edit secret <ca_certificate_secret_name>
    Copy to Clipboard Toggle word wrap

    <ca_certificate_secret_name > 是 Secret 的名称,这是集群 CA 证书的 < kafka_cluster_name> -cluster-ca-cert,以及客户端 CA 证书的 < kafka_cluster_name> -clients-ca-cert

    以下示例显示了与名为 my-cluster 的 Kafka 集群关联的集群 CA 证书的 secret。

    集群 CA 证书的 secret 配置示例

    apiVersion: v1
    kind: Secret
    data:
      ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0F... 
    1
    
    metadata:
      annotations:
        strimzi.io/ca-cert-generation: "0" 
    2
    
      labels:
        strimzi.io/cluster: my-cluster
        strimzi.io/kind: Kafka
      name: my-cluster-cluster-ca-cert
      #...
    type: Opaque
    Copy to Clipboard Toggle word wrap

    1
    当前 base64 编码的 CA 证书
    2
    当前 CA 证书生成注解值
  2. 将新 CA 证书编码为 base64。

    cat <path_to_new_certificate> | base64
    Copy to Clipboard Toggle word wrap
  3. 更新 CA 证书。

    将上一步中的 base64 编码的 CA 证书复制为 data 下的 ca.crt 属性的值。

  4. 增加 CA 证书生成注解的值。

    使用更高的增量值更新 strimzi.io/ca-cert-generation 注解。例如,将 strimzi.io/ca-cert-generation=0 更改为 strimzi.io/ca-cert-generation=1。如果 Secret 缺少注解,则值将被视为 0, 因此添加带有值 1 的注解。

    当 AMQ Streams 生成证书时,Cluster Operator 会自动递增证书生成注解。对于您自己的 CA 证书,请使用更高的增量值设置注解。该注解需要高于当前 secret 中的值,以便 Cluster Operator 可以部署 Pod 并更新证书。strimzi.io/ca-cert-generation 必须在每次 CA 证书续订时递增。

  5. 使用新的 CA 证书和证书生成注解值保存 secret。

    使用新 CA 证书更新的 secret 配置示例

    apiVersion: v1
    kind: Secret
    data:
      ca.crt: GCa6LS3RTHeKFiFDGBOUDYFAZ0F... 
    1
    
    metadata:
      annotations:
        strimzi.io/ca-cert-generation: "1" 
    2
    
      labels:
        strimzi.io/cluster: my-cluster
        strimzi.io/kind: Kafka
      name: my-cluster-cluster-ca-cert
      #...
    type: Opaque
    Copy to Clipboard Toggle word wrap

    1
    新的 base64 编码的 CA 证书
    2
    新的 CA 证书生成注解值

在下一协调中,Cluster Operator 执行 ZooKeeper、Kafka 和其他组件的滚动更新,以信任新的 CA 证书。

如果配置了维护时间窗口,Cluster Operator 会在下一次维护时间窗口中第一次协调时部署 pod。

如果您使用自己的 CA 证书和私钥,则需要手动更新它们。Cluster Operator 不会自动续订。在续订周期过期前续订 CA 证书。您还可以使用相同的流程将 AMQ Streams Operator 生成的 CA 证书和私钥替换为您自己的。

在更新或替换 CA 证书和私钥时,执行此流程中的步骤。如果您只续订自己的 CA 证书,请参阅 第 10.8.2 节 “更新您自己的 CA 证书”

该流程描述了以 PEM 格式续订 CA 证书和私钥。

在执行以下步骤前,请确保新 CA 证书的 CN (Common Name)与当前证书不同。例如,当 Cluster Operator 自动续订证书时,它会添加一个 v<version_number& gt; 后缀来标识版本。在每个续订中添加不同的后缀,对您自己的 CA 证书执行相同的操作。通过使用不同的密钥来生成新的 CA 证书,您可以保留 Secret 中存储的当前 CA 证书。

先决条件

  • Cluster Operator 正在运行。
  • 您有 PEM 格式的新集群或客户端 X.509 证书和密钥。

流程

  1. 暂停 Kafka 自定义资源的协调。

    1. 在 OpenShift 中注解自定义资源,将 pause-recon ation 注解设置为 true

      oc annotate Kafka <name_of_custom_resource> strimzi.io/pause-reconciliation="true"
      Copy to Clipboard Toggle word wrap

      例如,对于名为 my-clusterKafka 自定义资源:

      oc annotate Kafka my-cluster strimzi.io/pause-reconciliation="true"
      Copy to Clipboard Toggle word wrap
    2. 检查自定义资源的状态条件是否显示 Reconliation Paused 的更改:

      oc describe Kafka <name_of_custom_resource>
      Copy to Clipboard Toggle word wrap

      lastTransitionTimetype 条件会变为 ReconciliationPaused

  2. 更新 CA 证书的 Secret

    1. 编辑现有的 secret 以添加新 CA 证书并更新证书生成注解值。

      oc edit secret <ca_certificate_secret_name>
      Copy to Clipboard Toggle word wrap

      <ca_certificate_secret_name > 是 Secret 的名称,它是 KAFKA-CLUSTER-NAME-cluster-ca-cert,用于集群 CA 证书和 KAFKA-CLUSTER-NAME-clients-ca-cert

      以下示例显示了与名为 my-cluster 的 Kafka 集群关联的集群 CA 证书的 secret。

      集群 CA 证书的 secret 配置示例

      apiVersion: v1
      kind: Secret
      data:
        ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0F... 
      1
      
      metadata:
        annotations:
          strimzi.io/ca-cert-generation: "0" 
      2
      
        labels:
          strimzi.io/cluster: my-cluster
          strimzi.io/kind: Kafka
        name: my-cluster-cluster-ca-cert
        #...
      type: Opaque
      Copy to Clipboard Toggle word wrap

      1
      当前 base64 编码的 CA 证书
      2
      当前 CA 证书生成注解值
    2. 重命名当前 CA 证书以保留它。

      data 下的 ca.crt 属性重命名为 ca- <date&gt; .crt,其中 & lt;date > 是证书过期日期,格式为 YEAR-MONTH-DAYTHOUR-MINUTE-SECONDZ。例如,ca-2022-01-26T17-32-00Z.crt:保留 属性的值,因为它要保留当前的 CA 证书。

    3. 将新 CA 证书编码为 base64。

      cat <path_to_new_certificate> | base64
      Copy to Clipboard Toggle word wrap
    4. 更新 CA 证书。

      data 下创建一个新的 ca.crt 属性,并将上一步中的 base64 编码的 CA 证书复制为 ca.crt 属性的值。

    5. 增加 CA 证书生成注解的值。

      使用更高的增量值更新 strimzi.io/ca-cert-generation 注解。例如,将 strimzi.io/ca-cert-generation=0 更改为 strimzi.io/ca-cert-generation=1。如果 Secret 缺少注解,则值将被视为 0, 因此添加带有值 1 的注解。

      当 AMQ Streams 生成证书时,Cluster Operator 会自动递增证书生成注解。对于您自己的 CA 证书,请使用更高的增量值设置注解。该注解需要高于当前 secret 中的值,以便 Cluster Operator 可以部署 Pod 并更新证书。strimzi.io/ca-cert-generation 必须在每次 CA 证书续订时递增。

    6. 使用新的 CA 证书和证书生成注解值保存 secret。

      使用新 CA 证书更新的 secret 配置示例

      apiVersion: v1
      kind: Secret
      data:
        ca.crt: GCa6LS3RTHeKFiFDGBOUDYFAZ0F... 
      1
      
        ca-2022-01-26T17-32-00Z.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0F... 
      2
      
      metadata:
        annotations:
          strimzi.io/ca-cert-generation: "1" 
      3
      
        labels:
          strimzi.io/cluster: my-cluster
          strimzi.io/kind: Kafka
        name: my-cluster-cluster-ca-cert
        #...
      type: Opaque
      Copy to Clipboard Toggle word wrap

      1
      新的 base64 编码的 CA 证书
      2
      旧的 base64 编码的 CA 证书
      3
      新的 CA 证书生成注解值
  3. 更新用于为新 CA 证书签名的 CA 密钥的 Secret

    1. 编辑现有 secret 以添加新 CA 密钥并更新密钥生成注解值。

      oc edit secret <ca_key_name>
      Copy to Clipboard Toggle word wrap

      <ca_key_name > 是 CA 键的名称,它是集群 CA 键的 < kafka_cluster_name> -cluster-ca,客户端 CA 键的 < kafka_cluster_name> -clients-ca

      以下示例显示了与名为 my-cluster 的 Kafka 集群关联的集群 CA 密钥的 secret。

      集群 CA 密钥的 secret 配置示例

      apiVersion: v1
      kind: Secret
      data:
        ca.key: SA1cKF1GFDzOIiPOIUQBHDNFGDFS... 
      1
      
      metadata:
        annotations:
          strimzi.io/ca-key-generation: "0" 
      2
      
        labels:
          strimzi.io/cluster: my-cluster
          strimzi.io/kind: Kafka
        name: my-cluster-cluster-ca
        #...
      type: Opaque
      Copy to Clipboard Toggle word wrap

      1
      当前 base64 编码的 CA 密钥
      2
      当前 CA 密钥生成注解值
    2. 将 CA 密钥编码为 base64。

      cat <path_to_new_key> | base64
      Copy to Clipboard Toggle word wrap
    3. 更新 CA 密钥。

      将上一步中的 base64 编码的 CA 密钥复制为 data 下的 ca.key 属性的值。

    4. 增加 CA 密钥生成注解的值。

      使用更高的增量值更新 strimzi.io/ca-key-generation 注解。例如,将 strimzi.io/ca-key-generation=0 更改为 strimzi.io/ca-key-generation=1。如果 Secret 缺少注解,它将被视为 0, 因此添加带有值 1 的注解。

      当 AMQ Streams 生成证书时,Cluster Operator 会自动递增密钥生成注解。对于您自己的 CA 证书以及新的 CA 密钥,请使用更高的增量值设置注解。该注解需要高于当前 secret 中的值,以便 Cluster Operator 可以部署 Pod 并更新证书和密钥。strimzi.io/ca-key-generation 必须在每次 CA 证书续订时递增。

  4. 使用新的 CA 密钥和密钥生成注解值保存 secret。

    使用新的 CA 密钥更新 secret 配置示例

    apiVersion: v1
    kind: Secret
    data:
      ca.key: AB0cKF1GFDzOIiPOIUQWERZJQ0F... 
    1
    
    metadata:
      annotations:
        strimzi.io/ca-key-generation: "1" 
    2
    
      labels:
        strimzi.io/cluster: my-cluster
        strimzi.io/kind: Kafka
      name: my-cluster-cluster-ca
      #...
    type: Opaque
    Copy to Clipboard Toggle word wrap

    1
    新的 base64 编码的 CA 密钥
    2
    新的 CA 密钥生成注解值
  5. 从暂停中恢复。

    要恢复 Kafka 自定义资源协调,请将 pause-reconation 注解设置为 false

    oc annotate --overwrite Kafka <name_of_custom_resource> strimzi.io/pause-reconciliation="false"
    Copy to Clipboard Toggle word wrap

    您还可以通过删除 pause-reconciliation 注解来执行此操作。

    oc annotate Kafka <name_of_custom_resource> strimzi.io/pause-reconciliation-
    Copy to Clipboard Toggle word wrap

在下一协调中,Cluster Operator 执行 ZooKeeper、Kafka 和其他组件的滚动更新,以信任新的 CA 证书。滚动更新完成后,Cluster Operator 将启动一个新服务器证书,以生成由新 CA 密钥签名的新服务器证书。

如果配置了维护时间窗口,Cluster Operator 会在下一次维护时间窗口中第一次协调时部署 pod。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat