AWS 最佳实践:我应该在每个 AZ 中都有一个 NAT 网关吗?
Posted
技术标签:
【中文标题】AWS 最佳实践:我应该在每个 AZ 中都有一个 NAT 网关吗?【英文标题】:AWS best practice: shall I have a NAT gateway in each AZ? 【发布时间】:2017-11-26 23:49:16 【问题描述】:由于 NAT 网关仅在单个 AZ 内具有冗余,如果我想在每个 AZ 中拥有一对公共/私有子网以实现多可用区冗余,我应该在每个 AZ 中都有一个 NAT 网关,不应该'我?
否则,如果我只有一个 NAT,如果 AZ 宕机,所有 AZ 中的所有子网都会随之宕机,从而违背了这种多 AZ 部署的目的。
我是对还是错?
【问题讨论】:
【参考方案1】:是的,理想情况下,每个可用区 (AZ) 都有一个 NAT 网关。
AWS 将此建议记录在 Comparison of NAT Instances and NAT Gateways:
高可用性:每个可用区中的 NAT 网关都实现了冗余。在每个可用区创建一个 NAT 网关,以确保独立于区域的架构。
单个 AZ 中的单个 NAT 网关仅在该 AZ 内具有冗余,因此如果存在区域问题,则其他 AZ 中的实例将无法访问互联网。
注意:每个 NAT 网关以及处理的每 GB 数据都按小时收费(请参阅VPC Pricing)。见How can I reduce data transfer charges for my NAT gateway?
【讨论】:
【参考方案2】:来自AWS官方NAT Gateway doc:
如果您在多个可用区中拥有资源并且它们共享 一个 NAT 网关,如果 NAT 网关的可用区 已关闭,其他可用区中的资源失去互联网 访问,创建独立于可用区的架构, 在每个可用区中创建一个 NAT 网关并配置您的 路由保证资源使用同一NAT网关 可用区。
NAT 网关为私有子网启用传出 Internet 连接。请务必注意,您需要为已创建私有子网的每个可用区创建一个 NAT 网关,以实现高可用性。
描述的网络架构包括公共子网、私有子网和 HA NAT 网关
注意事项
如果将成本保持在最低水平是必不可少的,那么每个 NAT 网关每月 32.00 美元的基准成本可能会成为阻碍因素。使用三个 AZ 时,您需要为三个 NAT 网关每月支付 96.00 美元。 NAT 网关还会增加出站流量的成本。您必须为从私有子网流向 Internet 的每 GB 支付 0.045 美元的溢价。这将传出流量的成本提高了 50%。加分!
Terraform Infra as Code 模块 simple VPC example...
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/
【讨论】:
以上是关于AWS 最佳实践:我应该在每个 AZ 中都有一个 NAT 网关吗?的主要内容,如果未能解决你的问题,请参考以下文章