10.3. 证书续订有效期
集群 CA 和客户端 CA 证书仅在有限的时间段内有效,称为有效期。这通常定义为自生成证书起的天数。
对于 Cluster Operator 自动创建的 CA 证书,您可以配置以下有效期:
-
Cluster CA certificates in
Kafka.spec.clusterCa.validityDays -
Clients CA certificates in
Kafka.spec.clientsCa.validityDays
两个证书的默认有效期周期为 365 天。手动安装的 CA 证书应该定义了自己的有效期。
当 CA 证书过期时,仍信任该证书的组件和客户端不接受与 CA 私钥签名的证书的连接。组件和客户端需要信任新的 CA 证书。
要允许在缺少服务的情况下续订 CA 证书,Cluster Operator 会在旧 CA 证书过期前启动证书续订。
您可以配置 Cluster Operator 创建的证书的续订周期:
-
Kafka.spec.clusterCa.renewalDays中的集群 CA 证书 -
Clients CA certificates in
Kafka.spec.clientsCa.renewalDays
两个证书的默认续订周期为 30 天。
从当前证书的过期日期后,后来测量续订周期。
针对续订的有效期
Not Before Not After
| |
|<--------------- validityDays --------------->|
<--- renewalDays --->|
Not Before Not After
| |
|<--------------- validityDays --------------->|
<--- renewalDays --->|
要在创建 Kafka 集群后更改有效期和续订周期,请配置并应用 Kafka 自定义资源,并 手动更新 CA 证书。如果您不手动续订证书,下一次证书被自动续订时将使用新的周期。
证书有效期和续订周期的 Kafka 配置示例
在续订期间,Cluster Operator 的行为取决于集群 CA 和客户端 CA 的 generateAuthority 证书 生成属性的设置。
true-
如果属性被设置为
true,Cluster Operator 会自动生成 CA 证书,并在续订周期内自动续订。 false-
如果属性设置为
false,Cluster Operator 不会生成 CA 证书。如果您要 安装自己的证书,则使用此选项。
10.3.1. 使用自动生成的 CA 证书的续订过程 复制链接链接已复制到粘贴板!
在更新 CA 证书时,Cluster Operator 会按照这个顺序执行以下进程:
生成新的 CA 证书,但保留现有的密钥。
新证书将旧证书替换为对应
Secret中的名称ca.crt。生成新客户端证书(用于 ZooKeeper 节点、Kafka 代理和实体 Operator)。
这并非绝对必要,因为签名密钥没有更改,但它会使客户端证书的有效性期与 CA 证书保持同步。
- 重启 ZooKeeper 节点,以便它们信任新的 CA 证书并使用新的客户端证书。
- 重启 Kafka 代理,以便它们信任新的 CA 证书并使用新的客户端证书。
重启主题和用户 Operator,以便他们信任新的 CA 证书并使用新的客户端证书。
用户证书由客户端 CA 签名。用户 Operator 生成的用户证书会在客户端 CA 被续订时续订。
10.3.2. 客户端证书续订 复制链接链接已复制到粘贴板!
Cluster Operator 不知道使用 Kafka 集群的客户端应用程序。
当连接到集群时,并确保它们正常工作,客户端应用程序必须:
- 信任 <cluster> - cluster-ca-cert Secret 中发布的集群 CA 证书。
使用 < user-name> Secret 中发布的凭证来连接集群。
User Secret 以 PEM 和 PKCS #12 格式提供凭证,或使用 SCRAM-SHA 身份验证时提供密码。User Operator 在创建用户时创建用户凭证。
您必须确保客户端在证书续订后继续工作。续订过程取决于如何配置客户端。
如果要手动置备客户端证书和密钥,您必须生成新的客户端证书,并确保客户端在续订期间使用新证书。续订周期结束时未能执行此操作,可能会导致客户端应用程序无法连接到集群。
对于在同一 OpenShift 集群和命名空间中运行的工作负载,机密可以挂载为卷,以便客户端 Pod 从 Secret 的当前状态构建其密钥存储和信任存储。有关此步骤的详情,请参阅配置内部客户端以信任集群 CA。
10.3.3. 手动更新 Cluster Operator 生成的 CA 证书 复制链接链接已复制到粘贴板!
Cluster Operator 生成的集群和客户端 CA 证书会在对应的证书续订期间开始自动续订。但是,您可以在证书续订周期开始前,使用 strimzi.io/force-renew 注解手动续订这些证书。出于安全考虑,或者您已 更改了证书的续订或有效期期,您可能会这样做。
续订的证书使用与旧证书相同的私钥。
如果您使用自己的 CA 证书,则无法使用 force-renew 注解。相反,请按照流程 更新您自己的 CA 证书。
先决条件
- Cluster Operator 正在运行。
- 安装 CA 证书和私钥的 Kafka 集群。
流程
将
strimzi.io/force-renew注解应用到包含您要续订的 CA 证书的Secret。Expand 表 10.13. 强制续订证书的 Secret 注解 证书 Secret annotate 命令 集群 CA
KAFKA-CLUSTER-NAME-cluster-ca-cert
oc annotate secret KAFKA-CLUSTER-NAME-cluster-ca-cert strimzi.io/force-renew=true客户端 CA
KAFKA-CLUSTER-NAME-clients-ca-cert
oc annotate secret KAFKA-CLUSTER-NAME-clients-ca-cert strimzi.io/force-renew=true在下一次协调时,Cluster Operator 会为您注解的
Secret生成新的 CA 证书。如果配置了维护时间窗口,Cluster Operator 会在下一次维护时间窗口首次协调时生成新的 CA 证书。客户端应用程序必须重新载入 Cluster Operator 续订的集群和客户端 CA 证书。
检查 CA 证书的期间:
例如,使用
openssl命令:oc get secret CA-CERTIFICATE-SECRET -o 'jsonpath={.data.CA-CERTIFICATE}' | base64 -d | openssl x509 -subject -issuer -startdate -enddate -nooutoc get secret CA-CERTIFICATE-SECRET -o 'jsonpath={.data.CA-CERTIFICATE}' | base64 -d | openssl x509 -subject -issuer -startdate -enddate -nooutCopy to Clipboard Copied! Toggle word wrap Toggle overflow CA-CERTIFICATE-SECRET 是
Secret的名称,即KAFKA-CLUSTER-NAME-cluster-ca-cert,用于集群 CA 证书和KAFKA-CLUSTER-NAME-clients-ca-cert。CA-CERTIFICATE 是 CA 证书的名称,如
jsonpath={.data.ca\.crt}。该命令返回一个
notBefore和notAfter日期,这是 CA 证书的有效性周期。例如,对于集群 CA 证书:
subject=O = io.strimzi, CN = cluster-ca v0 issuer=O = io.strimzi, CN = cluster-ca v0 notBefore=Jun 30 09:43:54 2020 GMT notAfter=Jun 30 09:43:54 2021 GMT
subject=O = io.strimzi, CN = cluster-ca v0 issuer=O = io.strimzi, CN = cluster-ca v0 notBefore=Jun 30 09:43:54 2020 GMT notAfter=Jun 30 09:43:54 2021 GMTCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从 Secret 中删除旧证书。
当组件使用新证书时,旧的证书可能仍在激活。删除旧的证书以移除任何潜在的安全风险。
10.3.4. 替换由 Cluster Operator 生成的 CA 证书使用的私钥 复制链接链接已复制到粘贴板!
您可以替换由 Cluster Operator 生成的集群 CA 和客户端 CA 证书使用的私钥。当替换私钥时,Cluster Operator 会为新私钥生成新的 CA 证书。
如果您使用自己的 CA 证书,则无法使用 force-replace 注解。相反,请按照流程 更新您自己的 CA 证书。
先决条件
- Cluster Operator 正在运行。
- 安装 CA 证书和私钥的 Kafka 集群。
流程
将
strimzi.io/force-replace注解应用到包含您要续订的私钥的Secret。Expand 表 10.14. 替换私钥的命令 私钥: Secret annotate 命令 集群 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 证书。