我希望自动伸缩组中的EC2实例能够连接到具有RabbitMQ服务器的经典负载均衡器。
这是我的配置:
EC2的安全组:
my-private-sg
(sg-00xxxxxxxxxxxxxxx
)
经典负载均衡器的安全组:
rabbitmq-elb-sg
(sg-11xxxxxxxxxxxxxxx
)
rabbitmq-elb-sg
安全组包含以下入站规则
在此配置下,EC2内部的RabbitMQ客户端无法连接到负载均衡器。
但是,在将源设置为AnyWhere
之后,它可以连接到负载均衡器。
为什么会这样?
此document说
Another security group. This allows instances associated with the specified security group to access instances associated with this security group.
EC2,负载均衡器和负载均衡器后面的EC2位于同一VPC中。
我使用经典的负载平衡器,因为我使用此terraform script来构建RabbitMQ服务。
我刚刚检查了经典负载均衡器中的日志,然后看到类似以下的内容:
2019-10-16T03:45:09.124234Z rabbitmq-elb 54.178.178.85:45990 172.31.39.217:5672 0.000274 0.000008 0.000015 - - 516 604 "- - - " "-" - -
2019-10-16T03:45:10.340119Z rabbitmq-elb 54.178.178.85:46006 172.31.0.79:5672 0.001159 0.000008 0.000015 - - 516 604 "- - - " "-" - -
54.178.178.85
是我的EC2实例的公共IP。
172.31.39.217
和172.31.0.79
是负载均衡器后面的RabbitMQ服务器的专用IP。
答案 0 :(得分:1)
我的经典负载均衡器是internet-facing
负载均衡器。将其更改为internal
后,安全组rabbitmq-elb-sg (sg-11xxxxxxxxxxxxxxx)
可以正常工作。
我不必再在AnyWhere
字段中写Source
。
EC2实例尝试通过专用网络连接到负载均衡器。将EC2的安全组(sg-00xxxxxxxxxxxxxxx)添加到Rabbitmq-elb-sg(sg-11xxxxxxxxxxxxxxx)的源字段中仅在专用网络下有效。
但是,我仍然不确定为什么在我的情况下不能使用面向Internet的负载均衡器。
在AWS Documentation的哪里可以找到这种现象的解释?