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安全组
表 安全组规则
方向 协议端口 目的地址 出方向 全部放通 Default_All
RabbitMQ专享实例所在安全组需要增加如下规则,以保证能被客户端访问。
图 配置RabbitMQ专享实例安全组
表 安全组规则
方向 协议端口 源地址 入方向 全部放通 sg-53d4
- 通过公网访问实例
RabbitMQ实例所在安全组需要增加如下规则,以保证能被客户端访问。
表 安全组规则
方向 协议端口 源地址 入方向 TCP:5672 0.0.0.0/0
具体如下图所示。
图 安全组规则1
RabbitMQ专享实例是否支持公网访问?
RabbitMQ专享实例支持公网访问。
在创建RabbitMQ实例时开启“公网访问”,或创建完后,在实例详情页中将公网访问开关打开。
RabbitMQ实例 是否支持跨Region部署 ?
当前支持跨AZ(可用区),不支持跨Region部署。
RabbitMQ实例 是否支持跨VPC访问 ?
RabbitMQ实例支持跨VPC和子网访问,可以通过创建VPC对等连接,将两个VPC的网络打通,实现跨VPC访问实例。
RabbitMQ专享实例是否支持不同的子网 ?
支持。
客户端与实例在相同VPC内,可以跨子网段访问。同一个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实例?
不可以。客户端可以使用代理、VPN、专线、FullNAT或者反向代理等方式访问RabbitMQ实例。
RabbitMQ实例的Web管理页面无法打开?
可能原因:实例安全组配置不正确。
解决方案:重新配置安全组,具体步骤如下。
- 在实例详情页面的“基本信息 > 网络”,单击安全组名称,跳转到安全组页面。
- 选择“入方向规则”,查看安全组入方向规则。
- 实例未开启SSL开关
- 如果是VPC内访问,实例安全组入方向规则,需要允许端口5672的访问。
- 如果是公网访问,需要允许端口15672的访问。
- 实例已开启SSL开关
- 如果是VPC内访问,实例安全组入方向规则,需要允许端口5671的访问。
- 如果是公网访问,需要运行端口15671的访问。
客户端是否可以连接同个RabbitMQ下多个Vhost?
客户端可以连接同个RabbitMQ下多个Vhost。
Vhost(Virtual Hosts)是RabbitMQ的基本特性,每个Vhost相当于一个相对独立的RabbitMQ服务器,每个Vhost数据目录不同,共用一个进程。性能上,连接多个Vhost和单独使用一个Vhost差别不大,只是RabbitMQ进程多一些对象,建议使用业务模型实测。
Vhost的相关介绍,请参考官网文档Virtual Hosts。
为什么RabbitMQ 集群只有一个连接地址 ?
RabbitMQ集群实例的连接地址,实际上是实例的LVS节点地址(负载均衡地址),客户端连接实例时,通过负载均衡器将客户端请求分发到集群实例的各个节点。