15.6. 使用您自己的 CA 证书和私钥
安装和使用您自己的 CA 证书和私钥,而不是使用 Cluster Operator 生成的默认值。您可以替换集群和客户端 CA 证书和私钥。
您可以使用以下方法切换到使用您自己的 CA 证书和私钥:
- 在部署 Kafka 集群前安装您自己的 CA 证书和私钥
- 在部署 Kafka 集群后,将默认 CA 证书和私钥替换为您自己的默认 CA 证书和私钥
在部署 Kafka 集群后替换默认 CA 证书和私钥的步骤与用来更新您自己的 CA 证书和私钥的步骤相同。
如果您使用自己的证书,则不会自动更新证书。您需要在 CA 证书和私钥过期前续订它们。
续订选项:
- 仅续订 CA 证书
- 续订 CA 证书和私钥(或替换默认值)
15.6.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 证书替换为您自己的。
集群 CA 或客户端 CA 的 PEM 格式的 X.509 证书和密钥。
如果要使用不是 Root CA 的集群或客户端 CA,则必须在证书文件中包含整个链。链应按以下顺序:
- 集群或客户端 CA
- 一个或多个中间 CA
- root CA
- 链中的所有 CA 都应该使用 X509v3 Basic Constraints 扩展进行配置。基本约束限制证书链的路径长度。
- 用于转换证书的 OpenSSL TLS 管理工具。
开始前
Cluster Operator 以 PEM (Privacy Enhanced Mail) 和 PKCS #12 (Public-Key Cryptography Standards) 格式生成密钥和证书。您可以以任一格式添加自己的证书。
有些应用程序无法使用 PEM 证书,且只支持 PKCS #12 证书。如果您没有 PKCS #12 格式的集群证书,请使用 OpenSSL TLS 管理工具从 ca.crt 文件中生成一个。
certificate 生成命令示例
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.crtCopy 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-PASSWORDCopy 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.keyCopy 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> 标识 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-GENERATIONCopy 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-GENERATIONCopy 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
15.6.2. 续订您自己的 CA 证书 复制链接链接已复制到粘贴板!
如果您使用自己的 CA 证书,则需要手动续订。Cluster Operator 不会自动续订。在续订期间内续订 CA 证书,然后再过期。
当您更新 CA 证书并继续同一私钥时,执行此流程中的步骤。如果您要续订您自己的 CA 证书和私钥,请参阅 第 15.6.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的名称,即 <kafka_cluster_name> -cluster-ca-cert用于集群 CA 证书,<kafka_cluster_name> -clients-ca-cert用于客户端 CA 证书。以下示例显示了与名为
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> | base64Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新 CA 证书。
将上一步中 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 并更新证书。每个 CA 证书续订都必须递增
strimzi.io/ca-cert-generation。使用新的 CA 证书和证书生成注解值保存 secret。
使用新 CA 证书更新的 secret 配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在下一个协调中,Cluster Operator 对 ZooKeeper、Kafka 和其他组件执行滚动更新来信任新的 CA 证书。
如果配置了维护时间窗,Cluster Operator 会在下一次维护时间窗内第一次协调时滚动 pod。
15.6.3. 自行续订或替换 CA 证书和私钥 复制链接链接已复制到粘贴板!
如果您使用自己的 CA 证书和私钥,则需要手动续订它们。Cluster Operator 不会自动续订。在续订期间内续订 CA 证书,然后再过期。您还可以使用相同的流程将 AMQ Streams operator 生成的 CA 证书和私钥替换为您自己的 CA 证书和私钥。
当您续订或替换 CA 证书和私钥时,执行此流程中的步骤。如果您只是续订自己的 CA 证书,请参阅 第 15.6.2 节 “续订您自己的 CA 证书”。
该流程描述了以 PEM 格式续订 CA 证书和私钥。
在执行以下步骤前,请确保新 CA 证书的 CN (Common Name)与当前 CA 证书不同。例如,当 Cluster Operator 自动更新证书时,它会添加 v<version_number& gt; 后缀来识别版本。通过在每个续订中添加不同的后缀,使用您自己的 CA 证书执行相同的操作。通过使用其他密钥生成新的 CA 证书,您可以保留存储在 Secret 中的当前 CA 证书。
先决条件
- Cluster Operator 正在运行。
- 您有 PEM 格式的新集群或客户端 X.509 证书和密钥。
流程
暂停
Kafka自定义资源的协调。在 OpenShift 中注解自定义资源,将
pause-reconciliation注解设置为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 检查自定义资源的状态条件是否显示
ReconciliationPaused的更改: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。
检查
Kafka自定义资源中的generateCertificateAuthority属性的设置。如果属性设为
false,Cluster Operator 不会生成 CA 证书。如果您使用自己的证书,则需要此设置。如果需要,编辑现有
Kafka自定义资源,并将generateCertificateAuthority属性设置为false。oc edit Kafka <name_of_custom_resource>
oc edit Kafka <name_of_custom_resource>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下示例显示了一个
Kafka自定义资源,其集群和客户端 CA 证书生成委派给用户。使用您自己的 CA 证书的
Kafka配置示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新 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用于客户端 CA 证书。以下示例显示了与名为
my-cluster的 Kafka 集群关联的集群 CA 证书的 secret。集群 CA 证书的 secret 配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重命名当前的 CA 证书以保留它。
将数据下的当前ca.crt属性重命名为ca- <date& gt; .crt,其中 & lt;date> 是 YEAR-MONTH-DAYTHOUR-MINUTE-SECONDZ 格式的证书到期日期。例如ca-2023-01-26T17-32-00Z.crt:保留 属性的值,因为它是保留当前的 CA 证书。将新 CA 证书编码为 base64。
cat <path_to_new_certificate> | base64
cat <path_to_new_certificate> | base64Copy 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 并更新证书。每个 CA 证书续订都必须递增
strimzi.io/ca-cert-generation。使用新的 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 密钥的名称,即 <
;kafka_cluster_name> -cluster-ca用于集群 CA 密钥,<kafka_cluster_name> -clients-ca用于客户端 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> | base64Copy 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 并更新证书和密钥。每个 CA 证书续订都必须递增
strimzi.io/ca-key-generation。
使用新的 CA 密钥和密钥生成注解值保存 secret。
使用新 CA 密钥更新的 secret 配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从暂停恢复。
要恢复
Kafka自定义资源协调,请将pause-reconciliation注解设置为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。
- 等待滚动更新移至新的 CA 证书。
从 secret 配置中删除任何过时的证书,以确保集群不再信任它们。
oc edit secret <ca_certificate_secret_name>
oc edit secret <ca_certificate_secret_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除旧证书的 secret 配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启动集群的手动滚动更新,以获取对 secret 配置所做的更改。