为什么目标组中的实例无法通过 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
EXPERTE
gefragt vor 6 Monaten58 Aufrufe
1 Antwort
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
EXPERTE
beantwortet vor 6 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen