由于NAT网关仅在单个可用区内具有冗余性,因此如果我希望为了多可用区冗余而在每个可用区中拥有一对公共/私有子网,我应该在每个可用区中都有一个NAT网关,是吗?
否则,如果我只有一个NAT网关,如果该可用区发生故障,所有可用区中的子网都会随之停机,从而破坏了这种多可用区部署的目的。
我的理解是正确的吗?
由于NAT网关仅在单个可用区内具有冗余性,因此如果我希望为了多可用区冗余而在每个可用区中拥有一对公共/私有子网,我应该在每个可用区中都有一个NAT网关,是吗?
否则,如果我只有一个NAT网关,如果该可用区发生故障,所有可用区中的子网都会随之停机,从而破坏了这种多可用区部署的目的。
我的理解是正确的吗?
理想情况下,每个可用区(AZ)应有一个 NAT 网关。
AWS 在 NAT 实例和 NAT 网关比较 文档中提供了相关建议:
高度可用:在每个可用区中都设置了具有冗余的 NAT 网关。在每个可用区中创建 NAT 网关以确保独立于区域的架构。
一个单独的 NAT 网关只能实现其所在可用区内的冗余性,因此如果存在区域问题,则其他可用区中的实例无法连接到互联网。
请注意:每个 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/
取决于您的使用情况。
在每个可用区创建一个NAT GTW之前,我建议考虑具体的使用情况和您使用的流量量。
我建议阅读这个很棒的SO答案:
私有子网中的Amazon EC2实例可以使用NAT网关,具体如下:
- NAT网关在同一VPC中的公共子网中启动。
- 私有子网的路由表需要额外的条目,将所有面向互联网的流量(0.0.0.0/0)定向到NAT网关。
...