使用 TLS 保护客户端连接
当生产者、消费者、自动化工具或管理员通过不受信任的网络、外部 主机端口 或 负载均衡器,或者跨集群连接到 RabbitMQ 时,请使用 TLS。TLS 可保护 AMQP 流量和管理 HTTP API,避免以明文传输。
本指南介绍用于客户端访问的 RabbitMQ 监听器 TLS。它不能替代用户、虚拟主机或权限控制。请在生产工作负载中同时配置 TLS 和最小权限的 RabbitMQ 用户。
前提条件
在启用 TLS 之前,请确保满足以下条件:
- 你有一个
RabbitmqCluster实例。 - 你有供客户端使用的 RabbitMQ 访问名称对应的服务器证书和私钥。
- 证书的 Subject Alternative Name 包含集群内服务的 DNS 名称,以及客户端使用的任何外部 DNS 名称或 IP 地址。
- 如果客户端必须验证私有 CA,你已经有 CA 证书。
- 在禁用非 TLS 监听器后,应用已准备好使用
amqps://和 TLS 管理端点。
将 spec.tls.disableNonTLSListeners 设置为 true 会为 RabbitMQ、management 插件以及受支持的协议插件禁用非 TLS 监听器。仅当所有客户端和运维工具都能够使用 TLS 端点后再启用此设置。
操作步骤
1. 创建 TLS secret
在与 RabbitmqCluster 相同的 namespace 中创建 TLS secret:
如果客户端使用私有 CA,请创建 CA secret:
2. 配置 RabbitmqCluster
更新 RabbitmqCluster 以引用 TLS secret。当 broker 必须信任私有 CA 以进行双向 TLS,或者为了 web_stomp 和 web_mqtt 等相关协议插件时,请包含 caSecretName。外部 AMQP 或管理客户端仍然需要在其自己的信任存储中包含 CA 证书。
如果你正在迁移现有客户端,请在迁移窗口期间保持 disableNonTLSListeners 未设置,或者将其设置为 false。在所有客户端都使用 TLS 之后,将该字段更新为 true。
3. 等待滚动更新完成
等待实例返回到 active 阶段,并且所有 RabbitMQ Pod 都处于就绪状态:
4. 验证 TLS 监听器
从 RabbitMQ Pod 中检查监听器列表:
对于仅 TLS 配置,输出应包含 TLS 监听器,并且不应再显示已禁用协议的纯 AMQP 或纯 HTTP 监听器。
同时验证暴露给客户端的 Kubernetes Service 端口:
5. 使用 TLS 连接
AMQP 客户端请使用 amqps://:
%2f 是默认 / 虚拟主机的 URL 编码形式。请将其替换为你的应用所使用的 URL 编码虚拟主机。
在针对 management API 运行 rabbitmqadmin 时,请使用 TLS 选项:
如果客户端证书、密钥或 CA 路径错误,rabbitmqadmin 会在向 RabbitMQ 进行身份验证之前失败。
验证
启用 TLS 后,请使用以下检查项: