【问题标题】:Unable to connect to a load balancer from an EC2 instance无法从 EC2 实例连接到负载均衡器
【发布时间】:2020-02-12 17:59:47
【问题描述】:

我希望自动扩展组中的我的 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.217172.31.0.79 是负载均衡器后面的 RabbitMQ 服务器的私有 IP。

【问题讨论】:

  • 所有描述的基础设施是否都在同一个 VPC 中? EC2 实例如何引用 Classic Load Balancer - 是通过域名还是 IP 地址?听起来他们正在尝试通过负载均衡器的公共 IP 地址而不是其私有 IP 地址进行连接。另外,您使用 Classic 负载均衡器是否有原因(现在它已经很老了)?
  • 您是否能够检查访问您的 RabitMQ 服务器的 IP 是否实际上是您的(客户端)EC2 实例的?

标签: amazon-web-services amazon-ec2 rabbitmq aws-security-group


【解决方案1】:

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

我不必再在Source 字段中写AnyWhere

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

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

AWS Documentation哪里可以找到这个现象的解释?

【讨论】:

  • 您选择的子网,是否有带 IGW 路由的路由表?这是公共负载均衡器所必需的
  • 是的,EC2 和负载均衡器位于其路由表中都有 Internet 网关的子网中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-03
  • 2021-06-07
  • 2018-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多