首页 > 解决方案 > 无法从 EC2 实例连接到负载均衡器

问题描述

我希望自动扩展组中的 EC2 实例能够连接到背后有 RabbitMQ 服务器的经典负载均衡器。

这是我的配置:

EC2s的安全组:

my-private-sg( sg-00xxxxxxxxxxxxxxx)

经典负载均衡器的安全组:

rabbitmq-elb-sg( sg-11xxxxxxxxxxxxxxx)

rabbitmq-elb-sg安全组包含以下入站规则

在此处输入图像描述

在此配置下,EC2 内的 RabbitMQ 客户端无法连接到负载均衡器。

但是,在我将源设置为AnyWhere.

在此处输入图像描述

为什么会这样?

这份文件

Another security group. This allows instances associated with the specified security group to access instances associated with this security group. 

EC2、负载均衡器和负载均衡器后面的 EC2 在同一个 VPC 中。

我使用经典的负载均衡器,因为我使用这个terraform 脚本来构建 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。

标签: amazon-web-servicesamazon-ec2rabbitmqaws-security-group

解决方案


我的经典负载均衡器是internet-facing负载均衡器。将其更改为 后internal,安全组rabbitmq-elb-sg (sg-11xxxxxxxxxxxxxxx)可以正常工作。

我不必再AnyWhereSource外地写字了。

EC2 实例尝试通过专用网络连接到负载均衡器。将 EC2 的安全组 (sg-00xxxxxxxxxxxxxxx) 添加到 rabbitmq-elb-sg (sg-11xxxxxxxxxxxxxxx) 的源字段仅适用于私有网络。

但是,我仍然不确定为什么在我的情况下使用面向 Internet 的负载均衡器不起作用。

在AWS 文档中哪里可以找到对这种现象的解释?


推荐阅读