由于 NAT 网关仅在单个 AZ 内具有冗余,如果我想在每个 AZ 中拥有一对公有/私有子网以实现多 AZ 冗余,我应该在每个 AZ 中拥有一个 NAT 网关,不是吗? ?
否则,如果我只有一个 NAT,如果 AZ 宕机,所有 AZ 中的所有子网都会随之宕机,从而违背了多 AZ 部署的目的。
我是对还是错?
是的,理想情况下每个可用区 (AZ) 都有一个 NAT 网关。
AWS 在NAT 实例和 NAT 网关的比较中记录了此建议:
高可用:每个可用区的NAT网关均采用冗余实现。在每个可用区中创建 NAT 网关,以确保区域无关的架构。
单个可用区中的单个 NAT 网关仅在该可用区内具有冗余,因此如果存在区域问题,则其他可用区中的实例将没有通往互联网的路由。
注意:每个 NAT 网关以及处理的每 GB 数据均按小时收费(请参阅VPC 定价)。请参阅如何降低 NAT 网关的数据传输费用?
来自AWS官方NAT网关文档:
如果您在多个可用区拥有资源并且它们共享 一个 NAT 网关,如果 NAT 网关的可用区 已关闭,其他可用区中的资源失去互联网连接 访问,要创建独立于可用区的架构, 在每个可用区中创建 NAT 网关并配置您的 路由以确保资源使用同一个NAT网关 可用区。
NAT 网关为私有子网启用传出互联网连接。需要注意的是,您需要为您创建的私有子网的每个可用区创建一个 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/
取决于您的用例。
在每个可用区创建 NAT GTW 之前,我会考虑您使用的具体用例和流量。
我建议阅读这个很棒的答案:
私有子网中的 Amazon EC2 实例可以使用 NAT 网关作为 如下:
- NAT 网关在同一 VPC 的公有子网中启动。
- 私有子网的路由表需要一个附加条目 将所有 Internet 绑定流量 (0.0.0.0/0) 定向到 NAT 网关。
(*) 基本且琐碎的用例是,对于 DEV 环境,您不需要 3 个 NAT GTW。您甚至可以在一个可用区中运行,因为可用性与生产更相关(如果决定它们应该是彼此的镜像,则与暂存更相关)。