3. 设计多可用区VPC架构

多可用区VPC架构的核心目标,是让同一套Web业务在至少两个可用区(AZ)中具备独立运行能力,同时把“必须暴露到公网”的组件与“只应访问内部或出站访问”的组件分开。设计时先确定区域与AZ数量,再按“每AZ一组子网”的方式划分网段,最后用互联网网关、NAT网关、VPC对等连接和VPC终端节点分别解决公网入口、私网出站、跨VPC互通和私有访问AWS服务四类流量。

一、跨AZ子网划分:先定地址,再定角色

假设选择 ap-southeast-1(新加坡)区域,使用 10.20.0.0/16 作为VPC主CIDR。为了给后续扩展留出空间,不建议把整个/16一次性切碎,而是先按AZ划分大块,再在每个AZ内划分公有子网、应用私有子网和数据私有子网。一个可直接参考的示例如下:

AZ公有子网应用私有子网数据私有子网
ap-southeast-1a10.20.0.0/2010.20.16.0/2010.20.32.0/20
ap-southeast-1b10.20.48.0/2010.20.64.0/2010.20.80.0/20
ap-southeast-1c10.20.96.0/2010.20.112.0/2010.20.128.0/20

每个/20可提供约4091个可用IP,足够承载中等规模Web集群。公有子网只放Application Load Balancer、NAT网关和跳板机;应用私有子网放EC2、ECS或Lambda对应的弹性网卡;数据私有子网放RDS、ElastiCache等。三个AZ都建子网,但业务至少跨两个AZ部署,第三个AZ可作为容量储备或灾备扩展位。

二、互联网网关与NAT网关:入口与出口分离

互联网网关(IGW)是VPC与公网之间的双向通道,必须附加到VPC上,并在公有子网的路由表中添加 0.0.0.0/0 → igw-xxxx。它只服务公有子网,私有子网不应直接指向IGW,否则实例会获得公网路径,违背最小暴露原则。

NAT网关负责让私有子网主动出站访问互联网,例如拉取补丁、调用外部API,但不允许互联网主动发起连接。生产环境应在每个AZ各建一个NAT网关,并为其分配该AZ公有子网中的弹性IP。应用私有子网的路由表按AZ分别指向同AZ的NAT网关,例如1a应用子网指向 nat-1a,1b应用子网指向 nat-1b。这样单个AZ故障时,其他AZ的出站流量不受影响。若只建一个NAT网关,虽然成本低,但该AZ故障会导致所有私有子网失去出站能力,属于典型单点。

NAT网关按小时和流量计费。跨AZ调用NAT还会产生跨AZ数据传输费。因此“每AZ一个NAT”不仅是可用性设计,也影响成本结构,需结合业务出站流量评估。

三、VPC对等连接:跨VPC私网互通

当Web业务需要访问另一个VPC中的共享服务(如日志集群、CI/CD、集中式数据库)时,可使用VPC对等连接。对等连接建立后,双方VPC的CIDR不能重叠,且必须在两端路由表中分别添加指向对端CIDR的路由。例如VPC A为 10.20.0.0/16,VPC B为 10.21.0.0/16,则在A的路由表添加 10.21.0.0/16 → pcx-xxxx,在B的路由表添加 10.20.0.0/16 → pcx-xxxx。安全组需放行对端网段的具体端口,网络ACL也要检查。

对等连接不支持传递路由:A与B对等、B与C对等,A不能自动访问C。若需要多VPC星型互通,应使用Transit Gateway,而不是堆叠多个对等连接。对等连接适合少量VPC之间点对点、低延迟、成本可控的私网互通场景。

四、VPC终端节点:私有访问AWS服务

私有子网中的实例访问S3、DynamoDB、SSM、ECR等AWS服务时,如果走NAT网关,会产生NAT小时费和流量费,且流量经过公网路径。更优做法是使用VPC终端节点。终端节点分两类:接口终端节点(Interface Endpoint)和网关终端节点(Gateway Endpoint)。

  • 网关终端节点:支持S3和DynamoDB,免费,通过在路由表中添加前缀列表指向终端节点实现。例如应用私有子网路由表添加 pl-xxxx (S3) → vpce-xxxx,实例访问S3时不再经过NAT。
  • 接口终端节点:支持SSM、ECR、Secrets Manager等,按小时和流量计费,会在每个选择的子网中创建弹性网卡,并可通过私有DNS覆盖服务默认域名。

设计时建议:S3和DynamoDB优先用网关终端节点;SSM、ECR、CloudWatch Logs等用接口终端节点,并至少部署在两个AZ的子网中,避免单AZ故障导致私有访问中断。

多可用区 VPC 架构(ap-southeast-1,10.20.0.0/16) VPC 10.20.0.0/16 公有子网层(每 AZ 一个) AZ 1a 公有子网 10.20.0.0/20 ALB 节点 / NAT-1a AZ 1b 公有子网 10.20.48.0/20 ALB 节点 / NAT-1b AZ 1c 公有子网 10.20.96.0/20 ALB 节点 / NAT-1c 应用私有子网层(每 AZ 一个) AZ 1a 应用子网 10.20.16.0/20 EC2 / ECS 任务 AZ 1b 应用子网 10.20.64.0/20 EC2 / ECS 任务 AZ 1c 应用子网 10.20.112.0/20 EC2 / ECS 任务 数据私有子网层(每 AZ 一个) 10.20.32.0/20 · RDS 主 10.20.80.0/20 · RDS 备 10.20.128.0/20 · 只读副本 Internet Gateway NAT Gateway ×3 VPC Peering VPC Endpoint (S3/SSM)

五、路由与安全组的关键检查点

完成上述组件后,必须逐项核对路由表。公有子网路由表应包含本地路由、0.0.0.0/0 → IGW;应用私有子网路由表应包含本地路由、0.0.0.0/0 → 同AZ NAT、S3前缀列表 → 网关终端节点;数据私有子网通常只保留本地路由和必要的终端节点路由,不直接出公网。安全组方面,ALB安全组入站放行443,出站指向应用安全组;应用安全组入站只允许来自ALB安全组,出站允许到数据安全组和终端节点;数据安全组入站只允许来自应用安全组。这样即使子网划分正确,也不会因为安全组过宽而破坏隔离。

常见错误:把私有子网路由指向IGW、只建一个NAT网关、对等连接两端CIDR重叠、接口终端节点只建在一个AZ。这四类问题分别会导致私网暴露、出站单点、对等连接无法建立、终端节点访问在AZ故障时中断。

最后,用一张检查表确认多AZ VPC是否达到设计目标:每个AZ是否有独立公有、应用、数据子网;每个AZ是否有独立NAT网关;应用子网是否通过网关终端节点访问S3;跨VPC访问是否只走对等连接或Transit Gateway;安全组是否按层引用而非开放大网段。满足这些条件后,VPC才具备承载高可用Web业务的基础网络能力。