为什么目标组中的实例无法通过 NLB 访问到自身?

0

【以下的问题经过翻译处理】 我已经设置了一个 NLB,其目标组包含一个 EC2 实例(通过实例 ID 引用)。在同一个子网中,我部署了第二个实例。 NLB 在端口 80 上侦听,我可以通过 NLB 的 DNS 名称经过 80端口 从实例 A 连接到实例 B。

但是我无法从实例 B 本身使用NLB DNS名 经端口 80 访问到实例 B!? DNS 解析工作正常(即 能看到HTTP 客户端尝试连接到 NLB 的 IP)但请求超时。

简而言之:wget <dns-name-of-NLB> 将在实例 A 上运行,但会在实例 B 上超时。

这是一些 VPC 网络特性还是我遗漏了什么?或两者原因都有么?

profile picture
专家
已提问 6 个月前49 查看次数
1 回答
0

【以下的回答经过翻译处理】 我推断您是有一个内部负载均衡器,其目标由实例 ID 注册。您上述现象的原因是“发夹/环回”(即将来自原始终点的消息按原路径返回)问题导致的。内部网络负载平衡器不支持“发夹或环回”。当您按实例 ID 注册目标时,会保留客户端的源 IP 地址。如果一个实例是它通过实例 ID 注册的内部负载平衡器的客户端,则仅当请求路由到不同的实例时连接才会成功。否则,源IP地址和目的IP地址相同,连接超时。

详细:网络负载均衡器保留源 IP,因此在实例B通过NLB访问实例B的情况下,到达的数据包中源和目标都是目标的私有 IP 地址。此时,主机操作系统将这种数据包视为无效,无法发送响应流量,从而导致连接失败。

解决方法:要达到你的目的,可以使用 IP 目标类型。对于 IP 目标类型,目标会看到网络负载均衡器的 IP 地址。因为源和目标是唯一的,所以连接成功;

总而言之,如果您有通过 NLB 访问同一目标的要求,请使用基于 IP 的目标组。

其他详细信息在这里 - https://aws.amazon.com/premiumsupport/knowledge-center/target-connection-fails-load-balancer/,<https://docs.aws.amazon.com /elasticloadbalancing/latest/network/load-balancer-troubleshooting.html#loopback-timeout>

补充:如果仍使用实例目标类型时,可通过关闭目标组的“保留客户端源地址IP”属性来达到这一目的,但因为关闭了该属性,会导致NLB的目标实例的安全组无法限制访问来源方。

profile picture
专家
已回答 6 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则