第 15 章 管理 TLS 证书
AMQ Streams 支持 TLS 在 Kafka 和 AMQ Streams 组件之间加密通信。
AMQ Streams 建立加密的 TLS 连接,用于以下组件之间的通信:
- Kafka 代理和 ZooKeeper 节点
- Kafka 代理(interbroker 通信)
- ZooKeeper 节点(中间通信)
- AMQ Streams operator 和 Kafka 和 ZooKeeper
- Cruise Control 和 Kafka
- Kafka Exporter 和 Kafka
客户端和代理之间的连接使用监听程序,您必须将它们配置为使用 TLS 加密通信。您可以在 Kafka
自定义资源中配置这些监听程序,每个监听程序名称和端口号必须在集群中唯一。Kafka 代理和 Kafka 客户端之间的通信会根据为监听程序配置 tls
属性的方式进行加密。如需更多信息,请参阅 第 13 章 设置 Kafka 集群的客户端访问权限。
下图显示了安全通信的连接。
图 15.1. Kafka 和 ZooKeeper 通信由 TLS 加密保护
图中显示的端口如下:
- control plane 侦听器(9090)
- Kafka 控制器和代理之间的连接在端口 9090 上使用内部 control plane 监听程序,促进代理间通信。Kafka 客户端无法访问此监听程序。
- 复制监听程序(9091)
- 代理之间的数据复制以及 AMQ Streams operator、Cruise Control 和 Kafka Exporter 的内部连接,使用端口 9091 上的复制监听程序。Kafka 客户端无法访问此监听程序。
- 客户端连接(9092 或更高版本)的监听程序
- 对于 TLS 加密的通信(通过配置监听程序),内部和外部客户端连接到 Kafka 代理。外部客户端(producers 和 consumers)通过公告的监听程序端口连接到 Kafka 代理。
- zookeeper 端口(2181)
- 用于连接 Kafka 的 ZooKeeper 端口。
- ZooKeeper 间的通信端口(2888)
- ZooKeeper 端口,用于在 ZooKeeper 节点之间进行干预。
- ZooKeeper 领导选举端口(3888)
- ZooKeeper 端口,用于 ZooKeeper 集群中的节点间的领导选举机制。
当为客户端配置监听程序对代理的访问时,您可以使用端口 9092 或更高版本(9093、9094 等),但有一些例外。侦听程序无法配置为使用为 interbroker 通信(9090 和 9091)、Prometheus 指标(9404)和 JMX (Java 管理扩展)监控(9999)保留的端口。
15.1. 内部集群 CA 和客户端 CA 复制链接链接已复制到粘贴板!
要支持加密,每个 AMQ Streams 组件需要自己的私钥和公钥证书。所有组件证书都由名为 集群 CA 的内部 CA (证书颁发机构)签名。
CA (证书授权机构)证书由 Cluster Operator 生成,以验证组件和客户端的身份。
同样,每个使用 mTLS 连接到 AMQ Streams 的 Kafka 客户端应用程序都需要使用私钥和证书。第二个名为 客户端 CA 的内部 CA 用于为 Kafka 客户端签名证书。
集群 CA 和客户端 CA 都有一个自签名公钥证书。
Kafka 代理被配置为信任由集群 CA 或客户端 CA 签名的证书。客户端不需要连接到的组件,如 ZooKeeper,只信任由集群 CA 签名的证书。除非外部监听程序的 TLS 加密被禁用,否则客户端应用程序必须信任由集群 CA 签名的证书。对于执行 mTLS 验证的客户端应用程序,这也也是如此。
默认情况下,AMQ Streams 会自动生成和更新集群 CA 或客户端 CA 发布的 CA 证书。您可以使用 Kafka.spec.clusterCa
和 Kafka.spec.clientsCa
属性来配置这些 CA 证书的管理。
如果您不想使用 Cluster Operator 生成的 CA,您可以安装自己的集群和客户端 CA 证书。您提供的任何证书都不会由 Cluster Operator 更新。