来自 ec2 实例的端口 80 的 ELB 连接问题

ELB connection issue for port 80 from ec2 instance

我有一个负载均衡器 classic2-**.us-east-1.elb.amazonaws.com 及其 public ,我已将所有连接的端口 443 和 80 列入白名单,并且从另一个 public ec2 服务器符合预期:

...
ec21~]#telnet classic2-**.us-east-1.elb.amazonaws.com 80
Trying ***...
Connected to ec2-***.compute-1.amazonaws.com.
Escape character is '^]'.
...

后来我更改了80端口的负载均衡器的传入安全组,只允许ec2访问负载均衡器的80端口。为此,我编辑了负载均衡器入站规则的安全组,并将源添加为 ec2 安全组名称 (sg-****)。保存该规则后,我尝试从 ssh telnet 到端口 80 到负载均衡器,但它不接受连接:

....
# telnet classic2-**.us-east-1.elb.amazonaws.com 80
Trying ****...
telnet: connect to address ****: Connection timed out
....

不确定为什么拒绝。实例和 elb 都在 public 子网中,elb 不使用 ec2 实例安全组作为源。

任何建议,谢谢

我怀疑负载均衡器配置为 Public 负载均衡器。因此,DNS 名称将解析为 Public IP 地址。因此,telnet 连接将连接到负载均衡器的 Public IP 地址。 (您可以通过将 DNS 名称解析为 IP 地址来测试这一点,例如使用 nslookup 甚至 ping。)

但是,当一个安全组引用另一个安全组时,它允许通过私有 IP 地址 进行连接,因为它希望连接完全发生在 VPC 内。

有两种方法可以解决这个问题:

  • 将负载平衡器更改为内部负载平衡器
  • 更改安全组以允许来自实例的 Public IP 地址的入站连接,而不是安全组标识符