17.3. 证书续订和有效期


集群 CA 和客户端 CA 证书只在有限的时间段内有效,称为有效期。这通常定义为生成证书的天数。

对于 Cluster Operator 自动创建的 CA 证书,使用以下属性在 kafka 资源中为证书配置有效周期:

  • 集群 CA 证书的 Kafka.spec.clusterCa.validityDays
  • Kafka.spec.clientsCa.validityDays 用于客户端 CA 证书

两个证书的默认有效期为 365 天。手动安装的 CA 证书应该定义自己的有效期。

当 CA 证书过期时,仍信任该证书的组件和客户端不接受证书由 CA 私钥签名的对等点的连接。组件和客户端需要信任新的 CA 证书。

要允许在不丢失服务的情况下续订 CA 证书,Cluster Operator 会在旧的 CA 证书过期前启动证书续订。

使用以下属性在 kafka 资源中配置 Cluster Operator 创建的证书的续订周期:

  • 集群 CA 证书的 Kafka.spec.clusterCa.renewalDays
  • Kafka.spec.clientsCa.renewalDays 用于客户端 CA 证书

两个证书的默认续订周期为 30 天。

续订周期从当前证书的到期日期开始向后测量。

针对续订周期的有效期

Not Before                                     Not After
    |                                              |
    |<--------------- validityDays --------------->|
                              <--- renewalDays --->|
Copy to Clipboard Toggle word wrap

要在方便的时间安排续订周期,请使用 维护时间窗

要在创建 Kafka 集群后更改有效期和续订周期,请配置并应用 Kafka 自定义资源,并 手动续订 CA 证书。如果您没有手动续订证书,下次自动更新证书时将使用新周期。

证书有效期和续订周期的 Kafka 配置示例

apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
# ...
spec:
# ...
  clusterCa:
    renewalDays: 30
    validityDays: 365
    generateCertificateAuthority: true
  clientsCa:
    renewalDays: 30
    validityDays: 365
    generateCertificateAuthority: true
# ...
Copy to Clipboard Toggle word wrap

在续订期间 Cluster Operator 的行为取决于集群 CA 和客户端 CA 的 generateCertificateAuthority 证书生成属性的设置。

true
如果属性设为 true,Cluster Operator 会自动生成 CA 证书,并在续订周期内自动更新。
false
如果属性设为 false,Cluster Operator 不会生成 CA 证书。如果您要安装自己的证书,则使用此选项。

17.3.1. 续订自动生成的 CA 证书

当需要续订 CA 证书时,Cluster Operator 执行以下步骤:

  1. 生成新的 CA 证书,但保留现有的密钥。

    新证书将旧证书替换为对应 Secret 中的名称 ca.crt

  2. 生成新的客户端证书(用于 ZooKeeper 节点、Kafka 代理和 Entity Operator)。

    这不是必要的,因为签名密钥没有改变,而是保留客户端证书的有效性周期与 CA 证书同步。

  3. 重启 ZooKeeper 节点以信任新的 CA 证书并使用新的客户端证书。
  4. 重启 Kafka 代理以信任新的 CA 证书并使用新的客户端证书。
  5. 重启 Topic Operator 和 User Operator 以信任新的 CA 证书并使用新的客户端证书。

    用户证书由客户端 CA 签名。当客户端的 CA 续订时,User Operator 会处理续订用户证书。

17.3.2. 续订客户端证书

Cluster Operator 不知道使用 Kafka 集群的客户端应用程序。您必须确保在证书续订后客户端继续工作。续订过程取决于客户端的配置方式。

当连接到集群时,并确保它们正确运行,客户端应用程序必须包括以下配置:

  • < cluster_name>-cluster-ca-cert secret 中的 truststore 凭证来验证 Kafka 集群的身份。
  • 来自 < user_name& gt; secret 的密钥存储凭证,用于在连接到 Kafka 集群时验证用户。

用户 secret 以 PEM 和 PKCS <!- 格式提供凭证,或者在使用 SCRAM-SHA 身份验证时提供密码。User Operator 在创建用户时创建用户凭证。有关在客户端配置中添加证书的示例,请参阅 第 15.4.2 节 “保护用户对 Kafka 的访问”

如果要手动置备客户端证书和密钥,您必须生成新的客户端证书并确保在续订期间客户端使用新证书。在续订周期结束时无法执行此操作可能会导致客户端应用程序无法连接到集群。

注意

对于在同一 OpenShift 集群和命名空间中运行的工作负载,机密可以挂载为卷,以便客户端容器集从机密的当前状态构造其密钥存储和信任存储。有关此过程的详情,请参阅配置内部客户端以信任集群 CA

17.3.3. 调度维护时间窗

将 Cluster Operator 的证书续订更新调度到 Kafka 或 ZooKeeper 集群,以便对客户端应用程序进行最小影响。将时间窗与 Cluster Operator 创建的 CA 证书的续订期间 一起使用(Kafka.spec.clusterCa.renewalDaysKafka.spec.clusterCa.renewalDays)。

更新通常由用户工具的更改触发。在不更改 Kafka 资源的情况下,可能会出现证书过期时间的滚动重启。虽然未调度重启不应该影响服务可用性,但它们可能会影响客户端应用程序的性能。维护时间窗允许为方便的时间调度这些更新。

配置维护时间窗,如下所示:

  • 使用 Kafka 资源的 Kafka.spec.maintenanceTimeWindows 属性配置 字符串数组
  • 每个字符串都是以 UTC (协调世界时间)的 cron 表达式

以下示例配置了一个维护时间窗口,它在午夜开始,并在 01:59am (UTC)结束,在 Sundays, Mondays, Tuesdays, 和 Thursdays 结束。

维护时间窗配置示例

apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  kafka:
    #...
  maintenanceTimeWindows:
    - "* * 0-1 ? * SUN,MON,TUE,WED,THU *"
  #...
Copy to Clipboard Toggle word wrap

注意

对于维护操作,Cluster Operator 不会严格遵循给定的时间窗。维护操作由指定时间窗内发生的第一个协调触发。如果时间窗比协调之间的间隔短,则协调可能会在时间窗之外发生的风险,因此,维护时间窗口必须至少为协调之间的间隔。

17.3.4. 手动续订 Cluster Operator 管理的 CA 证书

Cluster Operator 在相应的证书续订期间开始时自动续订的集群和客户端 CA 证书。但是,您可以使用 strimzi.io/force-renew 注解在证书续订期开始前手动续订这些证书的一个或多个证书。出于安全原因,您可能这样做,或者更改 了证书的续订或有效期周期

更新的证书使用与旧证书相同的私钥。

注意

如果您使用自己的 CA 证书,则无法使用 force-renew 注解。相反,请按照更新 您自己的 CA 证书 的步骤进行操作。

先决条件

在此过程中,我们在 my-project 命名空间中使用名为 my-cluster 的 Kafka 集群。

流程

  1. strimzi.io/force-renew 注解应用到包含您要续订的 CA 证书的 secret。

    续订集群 CA secret

    oc annotate secret my-cluster-cluster-ca-cert -n my-project strimzi.io/force-renew="true"
    Copy to Clipboard Toggle word wrap

    续订客户端 CA secret

    oc annotate secret my-cluster-clients-ca-cert -n my-project strimzi.io/force-renew="true"
    Copy to Clipboard Toggle word wrap

  2. 在下一个协调时,Cluster Operator 会生成新证书。

    如果配置了维护时间窗,Cluster Operator 会在下一次维护时间窗内第一次协调时生成新的 CA 证书。

  3. 检查新 CA 证书的有效性周期。

    检查新集群 CA 证书的有效性周期

    oc get secret my-cluster-cluster-ca-cert -n my-project -o=jsonpath='{.data.ca\.crt}' | base64 -d | openssl x509 -noout -dates
    Copy to Clipboard Toggle word wrap

    检查新客户端 CA 证书的有效性周期

    oc get secret my-cluster-clients-ca-cert -n my-project -o=jsonpath='{.data.ca\.crt}' | base64 -d | openssl x509 -noout -dates
    Copy to Clipboard Toggle word wrap

    该命令返回一个 notBeforenotAfter date,这是 CA 证书的有效开始和结束日期。

  4. 更新客户端配置以信任新的集群 CA 证书。

    请参阅:

Cluster Operator 会在续订周期开始时自动更新集群和客户端 CA 证书。然而,意外的操作问题或中断可能会阻止续订过程,如 Cluster Operator 的停机时间或 Kafka 集群不可用。如果 CA 证书过期,Kafka 集群组件无法相互通信,Cluster Operator 在无需人工干预的情况下无法续订 CA 证书。

要立即执行恢复,请按照给出的顺序操作此流程中所述的步骤。您可以从过期的集群和客户端 CA 证书中恢复。此过程涉及删除包含过期证书的 secret,以便 Cluster Operator 生成新证书的 secret。有关 Apache Kafka 中流管理的 secret 的更多信息,请参阅 第 17.2.2 节 “Cluster Operator 生成的 secret”

注意

如果您使用自己的 CA 证书并使其过期,则该过程类似,但您需要 续订 CA 证书,而不是使用 Cluster Operator 生成的证书。

先决条件

在此过程中,我们在 my-project 命名空间中使用名为 my-cluster 的 Kafka 集群。

流程

  1. 删除包含过期 CA 证书的 secret。

    删除 Cluster CA secret

    oc delete secret my-cluster-cluster-ca-cert -n my-project
    Copy to Clipboard Toggle word wrap

    删除 Clients CA secret

    oc delete secret my-cluster-clients-ca-cert -n my-project
    Copy to Clipboard Toggle word wrap

  2. 等待 Cluster Operator 生成新证书。

    • 新的 CA 集群证书以验证 Kafka 代理的身份在相同名称的 secret 中创建了(my-cluster-cluster-ca-cert)。
    • 在相同名称的 secret 中创建了用于验证 Kafka 用户身份的新 CA 客户端证书(my-cluster-clients-ca-cert)。
  3. 检查新 CA 证书的有效性周期。

    检查新集群 CA 证书的有效性周期

    oc get secret my-cluster-cluster-ca-cert -n my-project -o=jsonpath='{.data.ca\.crt}' | base64 -d | openssl x509 -noout -dates
    Copy to Clipboard Toggle word wrap

    检查新客户端 CA 证书的有效性周期

    oc get secret my-cluster-clients-ca-cert -n my-project -o=jsonpath='{.data.ca\.crt}' | base64 -d | openssl x509 -noout -dates
    Copy to Clipboard Toggle word wrap

    该命令返回一个 notBeforenotAfter date,这是 CA 证书的有效开始和结束日期。

  4. 删除使用 CA 证书的组件 pod 和 secret。

    1. 删除 ZooKeeper secret。
    2. 等待 Cluster Operator 检测缺少的 ZooKeeper secret 并重新创建它。
    3. 删除所有 ZooKeeper pod。
    4. 删除 Kafka secret。
    5. 等待 Cluster Operator 检测缺少的 Kafka secret 并重新创建它。
    6. 删除所有 Kafka pod。

    如果您只恢复客户端 CA 证书,则只需要删除 Kafka secret 和 pod。

    您可以使用以下 oc 命令查找资源,并验证它是否已被删除。

    oc get <resource_type> --all-namespaces | grep <kafka_cluster_name>
    Copy to Clipboard Toggle word wrap

    <resource_type > 替换为资源的类型,如 PodSecret

  5. 等待 Cluster Operator 检测缺少的 Kafka 和 ZooKeeper pod,并使用更新的 CA 证书重新创建它们。

    在协调时,Cluster Operator 会自动更新其他组件以信任新的 CA 证书。

  6. 验证 Cluster Operator 日志中没有与证书验证相关的问题。
  7. 更新客户端配置以信任新的集群 CA 证书。

    请参阅:

您可以替换由 Cluster Operator 生成的集群 CA 和客户端 CA 证书使用的私钥。当替换私钥时,Cluster Operator 会为新私钥生成一个新的 CA 证书。

注意

如果您使用自己的 CA 证书,则无法使用 force-replace 注解。相反,请按照更新 您自己的 CA 证书 的步骤进行操作。

先决条件

  • Cluster Operator 正在运行。
  • 安装 CA 证书和私钥的 Kafka 集群。

流程

  • strimzi.io/force-replace 注解应用到包含您要更新的私钥的 Secret

    Expand
    表 17.13. 替换私钥的命令
    私钥,用于Secret注解命令

    集群 CA

    <cluster_name>-cluster-ca

    oc annotate secret <cluster_name>-cluster-ca strimzi.io/force-replace="true"

    客户端 CA

    <cluster_name>-clients-ca

    oc annotate secret <cluster_name>-clients-ca strimzi.io/force-replace="true"

在下一次协调时,Cluster Operator 将:

  • 为您注解的 Secret 生成新私钥
  • 生成一个新的 CA 证书

如果配置了维护时间窗,Cluster Operator 会在下一次维护时间窗内第一次协调时生成新的私钥和 CA 证书。

客户端应用程序必须重新载入 Cluster Operator 更新的集群和客户端 CA 证书。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部