第 22 章 消息队列
消息队列服务有助于在 OpenStack 中进行进程间通信。这使用这些消息排队服务后端完成:
- RabbitMQ - Red Hat OpenStack Platform 默认使用 RabbitMQ。
- qpid
RabbitMQ 和 Qpid 都是高级消息队列协议(AMQP)框架,它为对等通信提供消息队列。队列实施通常部署为集中或分散的队列服务器池。
消息队列有效地促进 OpenStack 部署之间的命令和控制功能。允许访问队列后,不会执行进一步的授权检查。通过队列访问的服务会验证实际消息有效负载内的上下文和令牌。但是,您必须注意令牌的过期日期,因为令牌可能会重新显示,并可授权基础架构中的其他服务。
OpenStack 不支持消息级信任,如消息签名。因此,您必须保护并验证消息传输本身。对于高可用性(HA)配置,您必须执行队列到队列身份验证和加密。
22.1. 消息传递传输安全性
基于 AMQP 的解决方案(Qpid 和 RabbitMQ)支持使用 TLS 的传输级安全性。
考虑为您的消息队列启用传输级别加密。使用 TLS 进行消息传递客户端连接,可以保护通信免受篡改,并窃取传输至消息传递服务器的通信。以下指导通常如何为两个流行消息传递服务器配置 TLS: Qpid 和 RabbitMQ。当您配置消息传递服务器用来验证客户端连接的可信证书颁发机构(CA)捆绑包时,建议只限于用于节点的 CA,最好是内部管理的 CA。可信 CA 的捆绑包将决定哪些客户端证书被授权,并传递设置 TLS 连接的 client-server 验证步骤。
安装证书和密钥文件时,请确保对文件权限进行限制,例如使用 chmod 0600
,并且所有权仅限于消息传递服务器守护进程用户,以防止由其他进程和消息传递服务器上的用户进行未授权访问。
22.1.1. RabbitMQ 服务器 SSL 配置
以下行应添加到系统范围的 RabbitMQ 配置文件中,通常为 /etc/rabbitmq/rabbitmq.config
:
[ {rabbit, [ {tcp_listeners, [] }, {ssl_listeners, [{"<IP address or hostname of management network interface>", 5671}] }, {ssl_options, [{cacertfile,"/etc/ssl/cacert.pem"}, {certfile,"/etc/ssl/rabbit-server-cert.pem"}, {keyfile,"/etc/ssl/rabbit-server-key.pem"}, {verify,verify_peer}, {fail_if_no_peer_cert,true}]} ]} ].
tcp_listeners
选项被设置为 []
,以防止它侦听非 SSL 端口。ssl_listeners
选项应限制为仅侦听服务的管理网络。