RabbitMQ如何配置安全组?
RabbitMQ实例支持VPC内访问和公网访问,配置安全组的方式如下:
- VPC内访问实例
客户端只能部署在与RabbitMQ专享实例处于相同虚拟私有云(VPC)和相同子网的弹性云服务器(ECS)上。
除了ECS、RabbitMQ专享实例必须处于相同VPC之外,还需要他们的安全组分别配置了正确的规则,客户端才能访问RabbitMQ专享实例。
- 建议ECS、RabbitMQ专享实例配置相同的安全组。安全组创建后,默认包含组内网络访问不受限制的规则。
- 如果配置了不同安全组,可参考如下配置方式:
说明:
假设ECS、RabbitMQ专享实例分别配置了安全组:sg-53d4、sg-RabbitMQ、Default_All。
以下规则,远端可使用安全组,也可以使用具体的IP地址。
ECS所在安全组需要增加如下规则,以保证客户端能正常访问RabbitMQ专享实例。
图 配置ECS安全组
RabbitMQ专享实例所在安全组需要增加如下规则,以保证能被客户端访问。
图 配置RabbitMQ专享实例安全组
- 通过公网访问实例
RabbitMQ实例安全组需要配置了正确的规则,客户端才能访问RabbitMQ实例。
假设RabbitMQ实例安全组为sg-RabbitMQ,则需要配置如下入方向规则中的其中一种规则:
协议为TCP,端口为5672,源IP为0.0.0.0/0。
协议为Any,源IP为0.0.0.0/0。
具体如下图所示:
图 安全组规则1
图 安全组规则2
RabbitMQ专享实例是否支持公网访****问?
RabbitMQ专享实例支持公网访问。
在创建RabbitMQ专享实例的“更多”选项中,选择开启“公网访问”可自主控制是否进行公网访问,并选择已购买的弹性IP及带宽。或创建完后,在实例详情页中将公网访问开关打开。
RabbitMQ实例 是否支持跨Region部署 ?
当前支持跨AZ(可用区),不支持跨Region部署。
RabbitMQ实例 是否支持跨VPC和跨子网访问 ?
RabbitMQ实例支持跨VPC和子网访问,可以通过创建VPC对等连接,将两个VPC的网络打通,实现跨VPC访问实例。
RabbitMQ专享实例是否支持不同的子网 ?
支持。
客户端与实例在相同VPC内,可以跨子网段访问。
客户端与实例在不同VPC时,可通过创建VPC对等连接,将两个VPC的网络打通,实现跨VPC访问实例。
此外,可以为实例绑定公网地址,客户端访问实例公网地址即可。
SSL方式连接RabbitMQ实例失败?
首先排查安全组的入方向规则,是否放开了端口5671(SSL方式访问)或5672(非SSL访问)。
其次,参考如下内容配置SSL单向认证:
ConnectionFactory factory = new ConnectionFactory();
factory.setHost(host);
factory.setPort(port);
factory.setUsername(user);
factory.setPassword(password);
factory.useSslProtocol();
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
客户端是否可以通过DNAT方式访问RabbitMQ实例?
可以。
RabbitMQ实例的Web管理页面无法打开?
可能原因:实例安全组配置不正确。
解决方案:参考连接RabbitMQ管理页面的操作步骤,配置实例安全组。
为什么RabbitMQ 集群只有一个连接地址 ?
RabbitMQ集群实例的连接地址,实际上是实例的LVS节点地址(负载均衡地址),客户端连接实例时,通过负载均衡器将客户端请求分发到集群实例的各个节点。
客户端是否可以连接同个RabbitMQ下多个Vhost?
客户端可以连接同个RabbitMQ下多个Vhost。
Vhost(Virtual Hosts)是RabbitMQ的基本特性,每个Vhost相当于一个相对独立的RabbitMQ服务器,每个Vhost数据目录不同,共用一个进程。性能上,连接多个Vhost和单独使用一个Vhost差别不大,只是RabbitMQ进程多一些对象,建议使用业务模型实测。
Vhost的相关介绍,请参考官网文档Virtual Hosts。