由于 NAT 网关仅在单个 AZ 内具有冗余,如果我想在每个 AZ 中拥有一对公有/私有子网以实现多 AZ 冗余,我应该在每个 AZ 中都有一个 NAT 网关,不是吗?
否则,如果我只有一个 NAT,如果 AZ 宕机,所有 AZ 中的所有子网都会随之宕机,从而违背了这种多 AZ 部署的目的。
我是对还是错?
由于 NAT 网关仅在单个 AZ 内具有冗余,如果我想在每个 AZ 中拥有一对公有/私有子网以实现多 AZ 冗余,我应该在每个 AZ 中都有一个 NAT 网关,不是吗?
否则,如果我只有一个 NAT,如果 AZ 宕机,所有 AZ 中的所有子网都会随之宕机,从而违背了这种多 AZ 部署的目的。
我是对还是错?
是的,理想情况下,每个可用区 (AZ) 都有一个 NAT 网关。
AWS 在比较 NAT 实例和 NAT 网关 中记录了此建议:
高可用:每个可用区中的 NAT 网关都实现了冗余。在每个可用区创建一个 NAT 网关,以确保独立于区域的架构。
单个 AZ 中的单个 NAT 网关仅在该 AZ 内具有冗余,因此如果存在区域问题,则其他 AZ 中的实例将无法访问 Internet。
注意:每个 NAT 网关以及处理的每 GB 数据都按小时收费(请参阅VPC 定价)。请参阅如何降低 NAT 网关的数据传输费用?
来自 AWS 官方NAT 网关文档:
如果您在多个可用区中拥有资源并且它们共享一个 NAT 网关,则在 NAT 网关的可用区关闭的情况下,其他可用区中的资源将无法访问 Internet,要创建独立于可用区的架构,请创建 NAT 网关并配置您的路由以确保资源使用同一可用区中的 NAT 网关。
NAT 网关为私有子网启用传出 Internet 连接。请务必注意,您需要为已创建私有子网的每个可用区创建一个 NAT 网关,以实现高可用性。
所描述的网络架构包括公共子网、私有子网和 HA NAT 网关
...
azs = ["us-east-1a", "us-east-1b", "us-east-1c"]
private_subnets = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"]
public_subnets = ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"]
enable_nat_gateway = true
single_nat_gateway = false # to get 1 NGW x AZ
...
参考链接: https ://cloudonaut.io/advanved-aws-networking-pitfalls-that-you-should-avoid/