使用 Elastic Beanstalk 和 NAT 进行多区域负载均衡

Multi-Zone Load Balancing with Elastic Beanstalk and NAT

提问人:Joe 提问时间:5/25/2021 更新时间:5/31/2021 访问量:352

问:

我一直在尝试设置 Elastic Beanstalk,以便跨多个可用区的所有实例在外部显示为具有相同的静态 IP 地址。为此,我按照以下说明进行操作:

https://aws.amazon.com/premiumsupport/knowledge-center/elastic-beanstalk-static-IP-address/

我还遵循了以下先决条件:

https://aws.amazon.com/premiumsupport/knowledge-center/nat-gateway-vpc-private-subnet/

我创建了一个演示环境 (PHP) 并安装了示例应用程序 - 只是为了概念验证。只要我只使用一个可用区(负载均衡器位于公有子网中,每个实例还有另外两个私有子网 - 但所有子网都位于同一可用区中),一切正常。当我尝试修改 Elastic Beanstalk 以使某些实例位于不同的可用区时,我得到了好坏参半的结果。有时我能够让应用程序加载到我的浏览器中,而其他时候它只是超时。我尝试了启用/禁用跨区域负载平衡的各种组合,无论哪种方式,我都得到了相同的结果。

当我查看负载均衡器时,所有实例都显示“服务中”,并且 Elastic Beanstalk 报告状态为“正常”。当我运行 VPC 可访问性分析器时,它显示每个实例都可以从 Internet 网关访问。

这是我设置的配置:

可用区 us-east-1c

  • 子网 1(公共):此子网将流量路由到 Internet 网关。这是负载均衡器所在的子网。
  • 子网 2(专用):此子网不会将任何内容路由到 Internet 网关。相反,它会将所有出站流量路由到 NAT(也驻留在公有子网中)。
  • 子网 3(私有):此子网与子网 2 相同(使用相同的路由表)。

可用区 us-east-1b

  • 子网 4(私有):此子网与子网 2 相同(使用相同的路由表)。

可用区 us-east-1d

  • 子网 5(私有):此子网与子网 2 相同。

因此,我看到的是,只要我只将实例部署到子网 2 和 3,一切正常。一旦我尝试在子网 4 或 5 中添加实例,应用程序就会开始变得间歇性。有时有效,有时无效。

我还应该指出,我正在尝试通过引用负载均衡器的 URL 以及环境自动生成的 Elastic Beanstalk URL 在浏览器中加载此应用程序。在这两种情况下,行为是相同的。

我做错了什么?

amazon-web-services amazon-elastic-beanstalk amazon-elb

评论

0赞 Rohan 5/30/2021
我有几个问题。它是哪个负载均衡器?应用程序还是网络?我过去曾遇到过这样的问题,但我的应用程序负载均衡器位于私有子网中。我将其部署在公有子网中,目标组具有私有子网的实例。一旦 tg 运行状况检查通过,我的请求就开始通过。另外,您是否检查了请求是否进入服务器?
0赞 Joe 5/31/2021
这是一个经典的负载均衡器,我找到了解决方案。我又创建了两个公有子网 - 一个在 us-east-1b 中,一个在 us-east-1d 中。现在,我在每个可用区中都有一个公有子网。我将负载均衡器部署到所有这些公有子网,然后一切开始工作。因此,为了让负载均衡器与私有子网中的实例进行通信,似乎需要将其部署到同一可用区中的公有子网。

答:

0赞 Joe 5/31/2021 #1

我能够通过在每个可用区中创建一个公有子网并将负载均衡器部署到每个公有子网来解决此问题。在那之后,一切都奏效了。