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,则必须在证书文件中包括整个链。链应该按照以下顺序:
- 集群或客户端 CA
- 一个或多个中间 CA
- 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
openssl pkcs12 -export -in ca.crt -nokeys -out ca.p12 -password pass:<P12_password> -caname ca.crt
将 <P12_password > 替换为您自己的密码。
流程
创建包含 CA 证书的新 secret。
仅在 PEM 格式使用证书创建客户端 secret
oc create secret generic <cluster_name>-clients-ca-cert --from-file=ca.crt=ca.crt
oc create secret generic <cluster_name>-clients-ca-cert --from-file=ca.crt=ca.crt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 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
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 Copied! Toggle word wrap Toggle overflow 将 <cluster_name > 替换为 Kafka 集群的名称。
创建包含私钥的新 secret。
oc create secret generic CA-KEY-SECRET --from-file=ca.key=ca.key
oc create secret generic CA-KEY-SECRET --from-file=ca.key=ca.key
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 标记 secret。
oc label secret CA-CERTIFICATE-SECRET strimzi.io/kind=Kafka strimzi.io/cluster=<cluster_name>
oc label secret CA-CERTIFICATE-SECRET strimzi.io/kind=Kafka strimzi.io/cluster=<cluster_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc label secret CA-KEY-SECRET strimzi.io/kind=Kafka strimzi.io/cluster=<cluster_name>
oc label secret CA-KEY-SECRET strimzi.io/kind=Kafka strimzi.io/cluster=<cluster_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
标签
strimzi.io/kind=Kafka
标识 Kafka 自定义资源。 -
标签
strimzi.io/cluster= <cluster_name&
gt; 标识 Kafka 集群。
-
标签
注解 secret
oc annotate secret CA-CERTIFICATE-SECRET strimzi.io/ca-cert-generation=CA-CERTIFICATE-GENERATION
oc annotate secret CA-CERTIFICATE-SECRET strimzi.io/ca-cert-generation=CA-CERTIFICATE-GENERATION
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc annotate secret CA-KEY-SECRET strimzi.io/ca-key-generation=CA-KEY-GENERATION
oc annotate secret CA-KEY-SECRET strimzi.io/ca-key-generation=CA-KEY-GENERATION
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
注解
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
)。在更新证书时设置更高的增量值。
-
注解
为集群创建
Kafka
资源,配置Kafka.spec.clusterCa
或Kafka.spec.clientsCa
对象来 不使用 生成的 CA。配置集群 CA 的片段
Kafka
资源示例,使用您提供的证书Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.8.2. 更新您自己的 CA 证书 复制链接链接已复制到粘贴板!
如果您使用自己的 CA 证书,则需要手动更新它们。Cluster Operator 不会自动续订。在续订周期过期前续订 CA 证书。
当您续订 CA 证书并继续使用相同的私钥时,请执行此流程中的步骤。如果您要更新自己的 CA 证书和私钥,请参阅 第 10.8.3 节 “使用您自己的续订或替换 CA 证书和私钥”。
该流程描述了 PEM 格式更新 CA 证书。
先决条件
- Cluster Operator 正在运行。
- 您有 PEM 格式的新集群或客户端 X.509 证书。
流程
更新 CA 证书的
Secret
。编辑现有的 secret 以添加新 CA 证书并更新证书生成注解值。
oc edit secret <ca_certificate_secret_name>
oc edit secret <ca_certificate_secret_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow <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 配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将新 CA 证书编码为 base64。
cat <path_to_new_certificate> | base64
cat <path_to_new_certificate> | base64
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新 CA 证书。
将上一步中的 base64 编码的 CA 证书复制为
data
下的ca.crt
属性的值。增加 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 证书续订时递增。使用新的 CA 证书和证书生成注解值保存 secret。
使用新 CA 证书更新的 secret 配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在下一协调中,Cluster Operator 执行 ZooKeeper、Kafka 和其他组件的滚动更新,以信任新的 CA 证书。
如果配置了维护时间窗口,Cluster Operator 会在下一次维护时间窗口中第一次协调时部署 pod。
10.8.3. 使用您自己的续订或替换 CA 证书和私钥 复制链接链接已复制到粘贴板!
如果您使用自己的 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 证书和密钥。
流程
暂停
Kafka
自定义资源的协调。在 OpenShift 中注解自定义资源,将
pause-recon
ation 注解设置为true
:oc annotate Kafka <name_of_custom_resource> strimzi.io/pause-reconciliation="true"
oc annotate Kafka <name_of_custom_resource> strimzi.io/pause-reconciliation="true"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如,对于名为
my-cluster
的Kafka
自定义资源:oc annotate Kafka my-cluster strimzi.io/pause-reconciliation="true"
oc annotate Kafka my-cluster strimzi.io/pause-reconciliation="true"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查自定义资源的状态条件是否显示 Reconliation
Paused
的更改:oc describe Kafka <name_of_custom_resource>
oc describe Kafka <name_of_custom_resource>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
lastTransitionTime
中type
条件会变为ReconciliationPaused
。
更新 CA 证书的
Secret
。编辑现有的 secret 以添加新 CA 证书并更新证书生成注解值。
oc edit secret <ca_certificate_secret_name>
oc edit secret <ca_certificate_secret_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow <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 配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重命名当前 CA 证书以保留它。
将
data
下的ca.crt
属性重命名为ca- <date> .crt
,其中 & lt;date > 是证书过期日期,格式为 YEAR-MONTH-DAYTHOUR-MINUTE-SECONDZ。例如,ca-2022-01-26T17-32-00Z.crt:
保留 属性的值,因为它要保留当前的 CA 证书。将新 CA 证书编码为 base64。
cat <path_to_new_certificate> | base64
cat <path_to_new_certificate> | base64
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新 CA 证书。
在
data
下创建一个新的ca.crt
属性,并将上一步中的 base64 编码的 CA 证书复制为ca.crt
属性的值。增加 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 证书续订时递增。使用新的 CA 证书和证书生成注解值保存 secret。
使用新 CA 证书更新的 secret 配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
更新用于为新 CA 证书签名的 CA 密钥的
Secret
。编辑现有 secret 以添加新 CA 密钥并更新密钥生成注解值。
oc edit secret <ca_key_name>
oc edit secret <ca_key_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow <ca_key_name > 是 CA 键的名称,它是集群 CA 键的 <
kafka_cluster_name> -cluster-ca
,客户端 CA 键的 <kafka_cluster_name> -clients-ca
。以下示例显示了与名为
my-cluster
的 Kafka 集群关联的集群 CA 密钥的 secret。集群 CA 密钥的 secret 配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 CA 密钥编码为 base64。
cat <path_to_new_key> | base64
cat <path_to_new_key> | base64
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新 CA 密钥。
将上一步中的 base64 编码的 CA 密钥复制为
data
下的ca.key
属性的值。增加 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 证书续订时递增。
使用新的 CA 密钥和密钥生成注解值保存 secret。
使用新的 CA 密钥更新 secret 配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从暂停中恢复。
要恢复
Kafka
自定义资源协调,请将pause-reconation
注解设置为false
。oc annotate --overwrite Kafka <name_of_custom_resource> strimzi.io/pause-reconciliation="false"
oc annotate --overwrite Kafka <name_of_custom_resource> strimzi.io/pause-reconciliation="false"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您还可以通过删除
pause-reconciliation
注解来执行此操作。oc annotate Kafka <name_of_custom_resource> strimzi.io/pause-reconciliation-
oc annotate Kafka <name_of_custom_resource> strimzi.io/pause-reconciliation-
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在下一协调中,Cluster Operator 执行 ZooKeeper、Kafka 和其他组件的滚动更新,以信任新的 CA 证书。滚动更新完成后,Cluster Operator 将启动一个新服务器证书,以生成由新 CA 密钥签名的新服务器证书。
如果配置了维护时间窗口,Cluster Operator 会在下一次维护时间窗口中第一次协调时部署 pod。