第 17 章 消息排队

消息排队服务于 OpenStack 中的进程间通信。这可以通过这些消息排队服务后端完成:

  • RabbitMQ - Red Hat OpenStack Platform 默认使用 RabbitMQ。
  • qpid

RabbitMQ 和 Qpid 都是高级消息队列协议(AMQP)框架,它为对等到对等通信提供消息队列。队列实施通常部署为中央或分散的队列服务器池。

消息队列在 OpenStack 部署之间有效有助于命令和控制功能。允许访问队列后,不会执行进一步的授权检查。通过队列访问的服务会验证实际消息有效负载中的上下文和令牌。但是,您必须注意令牌的过期日期,因为令牌可能会重新显示,并可授权基础架构中其他服务。

OpenStack 不支持消息级的关注,如消息签名。因此,您必须保护并验证消息传输本身。对于高可用性(HA)配置,您必须执行队列到队列的身份验证和加密。

17.1. 消息传递传输安全性

基于 AMQP 的解决方案(Qpid 和 RabbitMQ)支持使用 TLS 的传输级别安全性。

考虑为您的消息队列启用传输级别的加密。将 TLS 用于消息传递客户端连接可防止通信被篡改并窃取到消息传递服务器。以下是通常如何为两个流行的消息传递服务器配置 TLS 的指导:qpid 和 RabbitMQ。在配置您的消息传递服务器用来验证客户端连接的可信证书颁发机构(CA)捆绑包时,建议只限于用于节点的 CA,最好是内部管理的 CA。可信 CA 的捆绑包将决定哪个客户端证书将被授权,并传递设置 TLS 连接的 client-server 验证步骤。

注意

安装证书和密钥文件时,请确保限制文件权限,例如使用 chmod 0600,其所有权仅限于消息传递服务器守护进程用户,以防止消息传递服务器上的其他进程和用户未经授权访问。

17.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 选项应该仅限于仅侦听服务的管理网络。