第 11 章 管理 TLS 证书
AMQ Streams 支持使用 TLS 协议在 Kafka 和 AMQ Streams 组件之间进行加密通信。Kafka 代理(interbroker 通信)、ZooKeeper 节点之间的通信(交互通信)以及这些组件和 AMQ Streams 操作器之间的通信始终会被加密。Kafka 客户端和 Kafka 代理之间的通信会根据集群的配置方式加密。对于 Kafka 和 AMQ Streams 组件,也使用 TLS 证书进行身份验证。
Cluster Operator 自动设置并更新 TLS 证书,以在集群中启用加密和身份验证。如果要在 Kafka 代理和客户端间启用加密或 TLS 身份验证,它也会设置其他 TLS 证书。用户提供的证书不会被续订。
您可以为启用了 TLS 加密的 TLS 监听程序或者外部监听程序提供自己的服务器证书,称为 Kafka 侦听程序证书。如需更多信息,请参阅 第 11.7 节 “Kafka 侦听程序证书”。
图 11.1. TLS 安全通信的示例架构
11.1. 证书颁发机构
为了支持加密,每个 AMQ Streams 组件都需要自己的私钥和公钥证书。所有组件证书都由名为 集群 CA 的内部证书颁发机构(CA)签名。
同样,使用 TLS 客户端身份验证连接到 AMQ Streams 的每个 Kafka 客户端应用程序都需要提供私钥和证书。第二个内部 CA(名为 clients CA )用于为 Kafka 客户端签署证书。
11.1.1. CA 证书
集群 CA 和客户端 CA 都具有自签名证书。
Kafka 代理配置为信任由集群 CA 或客户端 CA 签名的证书。客户端不需要连接的组件,如 ZooKeeper,只信任集群 CA 签名的证书。除非禁用外部监听器的 TLS 加密,否则客户端应用必须信任集群 CA 签名的证书。对于执行 mutual TLS 身份验证 的客户端应用,也是如此。
默认情况下,AMQ Streams 会自动生成和更新集群 CA 或客户端 CA 发布的 CA 证书。您可以在 Kafka.spec. clusterCa 和
对象中配置这些 CA 证书的管理。用户提供的证书不会被续订。
Kafka.spec.clientsCa
您可以为集群 CA 或客户端 CA 提供自己的 CA 证书。如需更多信息,请参阅 第 11.1.2 节 “安装您自己的 CA 证书”。如果您提供自己的证书,则必须在需要时手动更新它们。
11.1.2. 安装您自己的 CA 证书
此流程描述了如何安装您自己的 CA 证书和密钥,而不是使用 Cluster Operator 生成的 CA 证书和私钥。
您可以使用此流程安装自己的集群或客户端 CA 证书。
流程描述了 PEM 格式的 CA 证书续订。您还可以使用 PKCS #12 格式的证书。
先决条件
- Cluster Operator 正在运行。
- Kafka 集群尚未部署。
您自己的 X.509 证书和密钥,采用 PEM 格式用于集群 CA 或客户端 CA。
如果要使用不是 Root CA 的集群或客户端 CA,您必须在证书文件中包含整个链。链应该按照以下顺序排列:
- 集群或客户端 CA
- 一个或多个中间 CA
- 根 CA
- 链中的所有 CA 都应配置为 X509v3 基本约束中的 CA。
流程
将您的 CA 证书放在对应的
Secret 中
。删除现有的 secret:
oc delete secret CA-CERTIFICATE-SECRET
ca-CERTIFICATE-SECRET 是
Secret
的名称,它是集群 CA证书的CLUSTER-NAME-cluster-ca-cert
,用于客户端 CA 证书的CLUSTER-NAME-clients-ca-cert
。忽略任何"Not Exists"错误。
创建并标记新 secret
oc create secret generic CA-CERTIFICATE-SECRET --from-file=ca.crt=CA-CERTIFICATE-FILENAME
将您的 CA 密钥放在对应的
Secret 中
。删除现有的 secret:
oc delete secret CA-KEY-SECRET
ca-KEY-SECRET 是 CA 密钥的名称,这是
用于集群 CA 密钥的
用于客户端 CA 密钥。CLUSTER-NAME
-cluster-ca,创建新 secret:
oc create secret generic CA-KEY-SECRET --from-file=ca.key=CA-KEY-SECRET-FILENAME
使用 labels
strimzi.io/kind=Kafka
和strimzi.io/cluster=CLUSTER-NAME
标记 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
为集群创建
Kafka
资源,将Kafka.spec.clusterCa
或Kafka.spec.clientsCa
对象 配置为不使用 生成的 CA:将集群 CA 配置为使用您自己提供的证书的片段
Kafka
资源示例kind: Kafka version: kafka.strimzi.io/v1beta2 spec: # ... clusterCa: generateCertificateAuthority: false
其它资源
- 要续订您之前安装的 CA 证书,请参阅 第 11.3.5 节 “续订您自己的 CA 证书”。
- 第 11.7.1 节 “提供您自己的 Kafka 侦听程序证书”.