第 10 章 管理 TLS 证书
AMQ Streams 支持 TLS 用于 Kafka 和 AMQ Streams 组件之间的加密通信。
通信始终在以下组件间加密:
- Kafka 和 ZooKeeper 之间的通信
- Kafka 代理间的 Interbroker 通信
- ZooKeeper 节点间的交互通信
- AMQ Streams operator 通信 Kafka 代理和 ZooKeeper 节点
Kafka 客户端和 Kafka 代理之间的通信会根据集群的配置加密。对于 Kafka 和 AMQ Streams 组件,TLS 证书也用于身份验证。
Cluster Operator 会自动设置并更新 TLS 证书,以便在集群中启用加密和身份验证。如果您想在 Kafka 代理和客户端之间启用加密或 TLS 身份验证,它还设置其他 TLS 证书。
证书颁发机构(CA)证书由 Cluster Operator 生成,以验证组件和客户端的身份。如果您不想使用 Cluster Operator 生成的 CA,您可以安装自己的集群和客户端 CA 证书。
您还可以为启用了 TLS 加密的 TLS 监听器或外部监听程序 提供 Kafka 侦听器证书。使用 Kafka 侦听器证书包含您已掌握的安全基础架构。
您提供的任何证书都不会由 Cluster Operator 更新。
图 10.1. TLS 保护的通信架构示例

10.1. 证书授权
要支持加密,每个 AMQ Streams 组件需要自己的私钥和公钥证书。所有组件证书都由称为 集群 CA 的内部证书颁发机构(CA)签名。
同样,使用 TLS 客户端身份验证连接到 AMQ Streams 的每个 Kafka 客户端应用程序都需要提供私钥和证书。第二个内部 CA 用于指定 客户端 CA,用于为 Kafka 客户端签署证书。
10.1.1. CA 证书
集群 CA 和客户端 CA 都有一个自签名的公钥证书。
Kafka 代理配置为信任由集群 CA 或客户端 CA 签名的证书。客户端不需要连接的组件,如 ZooKeeper,只有由集群 CA 签名的信任证书。除非禁用外部监听器的 TLS 加密,客户端应用程序必须信任由集群 CA 签名的证书。对于执行 相互 TLS 身份验证的客户端应用程序,这也适用。
默认情况下,AMQ Streams 会自动生成并续订由集群 CA 或客户端 CA 发布的 CA 证书。您可以在 Kafka.spec.clusterCa
和 Kafka.spec.clientsCa
对象中配置这些 CA 证书的管理。用户提供的证书不会被更新。
您可以为集群 CA 或客户端 CA 提供自己的 CA 证书。更多信息请参阅 第 10.1.2 节 “安装您自己的 CA 证书”。如果您提供自己的证书,则必须在需要时手动续订。
10.1.2. 安装您自己的 CA 证书
这个步骤描述了如何安装自己的 CA 证书和密钥,而不是使用 Cluster Operator 生成的 CA 证书和私钥。
Cluster Operator 会自动生成和更新以下 secret:
CLUSTER-NAME-cluster-ca
- 包含集群 CA 私钥的集群 secret。
CLUSTER-NAME-cluster-ca-cert
- 包含集群 CA 证书的集群 secret。证书包含验证 Kafka 代理身份的公钥。
CLUSTER-NAME-clients-ca
- 包含客户端 CA 私钥的客户端 secret。
CLUSTER-NAME-clients-ca-cert
- 包含客户端 CA 证书的客户端 secret。证书包含一个公钥,用于验证客户端访问 Kafka 代理的客户端身份。
AMQ Streams 默认使用这些 secret。
此流程描述了替换 secret 使用您自己的集群或客户端 CA 证书的步骤。
先决条件
- Cluster Operator 正在运行。
- Kafka 集群尚未部署。
您自己的 X.509 证书和密钥,采用 PEM 格式集群 CA 或客户端 CA。
如果要使用不是 Root CA 的集群或客户端 CA,则必须在证书文件中包括整个链。链应该按照以下顺序:
- 集群或客户端 CA
- 一个或多个中间 CA
- Root CA
- 链中的所有 CA 都应该使用 X509v3 基本限制扩展进行配置。基本限制限制证书链的路径长度。
- 用于转换证书的 OpenSSL TLS 管理工具。
开始前
Cluster Operator 为 CLUSTER-NAME-cluster-ca-cert
secret 生成以下文件:
-
使用 PEM 格式的 CA.crt
集群证书 -
PKCS #12 格式的 CA
.p12
集群证书 -
ca.password
以访问 PKCS #12 文件
有些应用程序无法使用 PEM 证书并支持 PKCS #12 证书。您还可以使用 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
将 P12-PASSWORD 替换为您自己的密码。
您可以为 CLUSTER-NAME-clients-ca-cert
secret 执行相同的操作,它还会默认在 PEM 和 PKCS #12 格式中包含证书。
流程
替换 Cluster Operator 生成的 CA 证书。
删除现有的 secret。
oc delete secret CA-CERTIFICATE-SECRET
ca-CERTIFICATE-SECRET 是
Secret
的名称:-
集群 CA 证书的
CLUSTER-NAME-cluster-ca-cert
-
CLUSTER-NAME-clients-ca-cert
用于客户端 CA 证书
将 CLUSTER-NAME 替换为 Kafka 集群的名称。
忽略任何 "Not Exists" 错误。
-
集群 CA 证书的
创建新 secret。
仅在 PEM 格式使用证书创建客户端 secret
oc create secret generic CLUSTER-NAME-clients-ca-cert --from-file=ca.crt=ca.crt
使用 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
替换 Cluster Operator 生成的私钥。
删除现有的 secret。
oc delete secret CA-KEY-SECRET
ca-KEY-SECRET 是 CA 密钥的名称:
-
集群 CA 键的
CLUSTER-NAME-cluster-ca
-
客户端 CA 密钥的
CLUSTER-NAME-clients-ca
-
集群 CA 键的
创建新 secret。
oc create secret generic CA-KEY-SECRET --from-file=ca.key=ca.key
标记 secret。
oc label secret CA-CERTIFICATE-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
-
标签
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-KEY-SECRET strimzi.io/ca-key-generation=CA-KEY-GENERATION
-
注解
strimzi.io/ca-cert-generation=CA-CERTIFICATE-GENERATION
定义新 CA 证书的生成。 注解
strimzi.io/ca-key-generation=CA-KEY-GENERATION
定义新 CA 密钥的生成。如果您要自动替换 Cluster Operator 生成的 CA 证书,请使用现有注解中的下一个增量值,并遵循 替换 CA 密钥流程。如果没有 Cluster Operator 会自动生成的 CA 证书,请从 0 (零)开始作为增量值(
strimzi.io/ca-cert-generation=0
)作为您自己的 CA 证书。在更新证书时设置更高的增量值。
-
注解
为集群创建
Kafka
资源,配置Kafka.spec.clusterCa
或Kafka.spec.clientsCa
对象来 不使用 生成的 CA。配置集群 CA 的片段
Kafka
资源示例,使用您提供的证书kind: Kafka version: kafka.strimzi.io/v1beta2 spec: # ... clusterCa: generateCertificateAuthority: false
其他资源
- 要续订之前安装的 CA 证书,请参阅 第 10.3.5 节 “更新您自己的 CA 证书”。
- 要替换您之前安装的 CA 证书的私钥,请参考 第 10.3.6 节 “替换您自己的 CA 证书使用的私钥”。
- 第 10.7.1 节 “提供您自己的 Kafka 侦听器证书”.