使用 TLS 与消息拓扑 Kubernetes 运营商
如果由消息拓扑运营商管理的 RabbitmqClusters 配置为通过 HTTPS 提供 HTTP API 和管理 UI,则拓扑运营商需要信任签署 RabbitmqClusters 使用的 TLS 证书的证书颁发机构 (CA)。
必须将一个或多个受信任的证书作为卷安装到位于 /etc/ssl/certs/
的拓扑运营商 Pod 的信任存储中。
先决条件
本指南假设您拥有以下内容:
- 在 Kubernetes 集群上安装了RabbitMQ 集群运营商和消息拓扑运营商
- RabbitmqCluster 用于提供流量的已签署 TLS 证书和私钥
- 签署服务器证书和密钥的 CA 的 TLS 证书,其路径导出为 $CA_PATH
步骤
- 按照集群运营商示例中记录的示例,创建通过 TLS 提供流量的 RabbitmqCluster。
- 创建包含签署 RabbitMQ 服务器证书的 CA 证书的 Kubernetes 密钥。
例如:
kubectl -n rabbitmq-system create secret generic rabbitmq-ca --from-file=ca.crt=$CA_PATH
- 将此密钥安装到消息拓扑运营商 Pod 的信任存储中。可以通过编辑 Deployment 清单或通过 kubectl 应用补丁来实现。
kubectl -n rabbitmq-system patch deployment messaging-topology-operator --patch "spec:
template:
spec:
containers:
- name: manager
volumeMounts:
- mountPath: /etc/ssl/certs/rabbitmq-ca.crt
name: rabbitmq-ca
subPath: ca.crt
volumes:
- name: rabbitmq-ca
secret:
defaultMode: 420
secretName: rabbitmq-ca"
拓扑运营商 Pod 将重新创建,并且现在将信任由新安装的 CA 签署的证书。Pod 与 RabbitmqCluster 执行的任何通信都将通过 HTTPS 完成。
限制
- 消息拓扑运营商将无法管理未按照上述方式安装其 CA 的 RabbitmqClusters:此类节点将不接受通过 HTTPS 的客户端连接。
- 如果 HTTPS 可用(即使证书不受信任),消息拓扑运营商也不会尝试通过 HTTP 连接到 RabbitmqCluster。
- 已停用 TLS 的 RabbitmqClusters(即 .spec.tls 下未配置任何内容)将始终通过 HTTP 进行管理。