具有多个 AZ/subnets 的 Elastic Beanstalk 环境中 NAT/Internet 网关的 HA

HA for NAT / Internet gateways in Elastic Beanstalk environment with multiple AZ/subnets

我有一个关于 NAT 网关和与 elastic beanstalk 相关的互联网网关的问题。我的配置如下:

现在,如果我为这 3 个私有子网创建一个 NAT 网关,这意味着我需要在不同的 AZ 和 3 个不同的弹性 IP 中为每个子网创建一个?我想我遗漏了一些东西,但除非该配置有意义,否则我看不到它。

TL;DR

这是你的选择。从技术上讲,一个 NAT 实例可以为一个 VPC 中的所有私有子网提供服务。

长一点:

首先我们区分 NAT 实例(EC2 实例配置为 NAT GW,由最终用户管理)和 NAT 网关(由 AWS 管理的 NAT 实例)。

如果它是 NAT 实例,那么实施它的人需要更多地了解如何实施它。仅仅回答这个问题是不够的。

如果是 NAT GW,则 AWS says "Each NAT gateway is created in a specific Availability Zone and implemented with redundancy in that zone"。我的解释是:只要整个 AZ 没有宕机,AWS 就保证 NATGW 的 HA(可能有服务中断或降级)。

从技术上讲,只要所有 3 个私有子网的路由 table 提供到此 NATGW 的路由(并且隐式我想 security-group/acl 配置为允许使用该路由)。由于此配置,您当然需要为 AZ 之间的带宽使用付费。

但显然这不是容错的,以防 AZ 宕机。

如果您不希望您的所有私有子网在 NAT GW 关闭时失去 Internet 连接,那么您需要拥有更多的 NAT GW。决定是否拥有多个,如果是,那么我猜有多少 case-to-case。

如果您有 2 个 NAT GW,那么要进行故障转移,您需要设置监控和故障转移以确保如果 AZ 出现故障,所有私有子网(由该 AZ 中的 NAT GW 提供服务)开始向另一个 NAT GW 发送流量。 Good explanation here。这是一点工作 AFAIK。

最后,EIP和NAT GW的关系是one-to-one。所以是的,您必须为您创建的每个 NAT GW 创建一个 EIP。