AWS 网络负载均衡器不允许从其源实例到其源实例的流量

Lau*_*ard 2 amazon-ec2 nlb amazon-web-services amazon-elb

我有一个 ECS 集群,由不同可用区中的 2 个实例组成。我运行的众多服务之一是 SMTP 中继。我想在这个服务前面使用一个网络负载均衡器来方便地配置其他应用程序来使用中继。

一切就绪后,我面临以下问题:

如果容器存在于实例 'A' 上,则只有实例 'B' 能够访问它,反之亦然,否则它会超时。因此网络负载均衡器似乎阻止访问位于同一实例上的服务。

有什么我在这里想念的吗?有没有人知道这一点并有解决方法?

更新: 将服务扩展到 2 个实例时,它开始工作。我现在倾向于相信它与可用区有关。

小智 5

我遇到了类似的问题。

这是我的设置:

  • 一个 VPC 分布在 3 个可用区。
  • 3 个公共子网(每个 AZ 一个)
  • AZ-a 中公共子网中的 1 个实例
  • 3 个私有子网(每个 AZ 一个)
  • 1 个 NLB 分布在 3 个私有子网中。
  • ECS 实例集群。每个私有子网中有 1 个实例。(AZ-a 中的实例-a,AZ-b 中的实例-b,AZ-c 中的实例-c)
  • 在每个实例上运行的服务;总共3个健康服务分布在注册到 NLB 的 3 个私有子网中。
  • 将“myservice.example.com”映射到 NLB DNS 名称的路由 53 别名记录。

在执行的测试下面:

从私有子网中的实例发起的查询。”

测试 1:从实例 a(在 AZ-a 中),查询“myservice.example.com”。

结果 1:查询在其私有 IP 之一上命中 NLB。如果 IP 与实例 a 位于同一子网中,则查询将超时。如果 IP 在不同的子网中,查询将成功。

Test2:与Test1相同,但从 instance-b(在 AZ-b 中)查询。

结果2:查询在其私有 IP 之一上命中 NLB。如果 IP 与实例 b 位于同一子网中,则查询将超时。如果 IP 在不同的子网中,查询将成功。

与从 instance-c 发起的查询类似的结果。

从公有子网 AZ-a 中的实例发起的查询

测试 3:从 AZ-a 中公有子网中的实例,查询“myservice.example.com”。

结果 3:查询在其私有 IP 之一上命中 NLB。无论命中哪个私有 IP,查询总是成功。

从私有子网 AZ-a 中的额外实例 (instance-a2) 发起的查询

测试 4:我在 AZ-a 的私有子网中启动了一个额外的实例 (instance-a2)。然后,从 instance-a2,查询到“myservice.example.com”。重要信息:此实例不运行任何服务,因此 NLB 永远无法选择它来路由任何请求。

结果4:查询一直成功!即使命中私有子网 A 中的目标(与实例 a2 相同的子网)。

结论

  • 使用Test1Test2,当从托管目标服务的实例进行查询时,我可能会遇到与 Laurent Jalber Simard 相同的问题。
  • 每为Test3的,问题似乎不是来自与目标服务来自同一可用区的请求。
  • 对于Test4,如果查询来自与托管目标服务的实例不同的实例,则问题似乎无法重现;即使它们在同一个子网中。

因此,到目前为止,我的结论是,如果请求的源 ip目标 ip 相同,则 NLB 将超时NLB选择的目标相同。

我找不到 AWS NLB 文档中记录的此问题/限制,到目前为止,Google 搜索中没有任何内容。有没有人得出同样的结论?