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-1a | 10.20.0.0/20 | 10.20.16.0/20 | 10.20.32.0/20 |
| ap-southeast-1b | 10.20.48.0/20 | 10.20.64.0/20 | 10.20.80.0/20 |
| ap-southeast-1c | 10.20.96.0/20 | 10.20.112.0/20 | 10.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故障会导致所有私有子网失去出站能力,属于典型单点。
三、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故障导致私有访问中断。
五、路由与安全组的关键检查点
完成上述组件后,必须逐项核对路由表。公有子网路由表应包含本地路由、0.0.0.0/0 → IGW;应用私有子网路由表应包含本地路由、0.0.0.0/0 → 同AZ NAT、S3前缀列表 → 网关终端节点;数据私有子网通常只保留本地路由和必要的终端节点路由,不直接出公网。安全组方面,ALB安全组入站放行443,出站指向应用安全组;应用安全组入站只允许来自ALB安全组,出站允许到数据安全组和终端节点;数据安全组入站只允许来自应用安全组。这样即使子网划分正确,也不会因为安全组过宽而破坏隔离。
最后,用一张检查表确认多AZ VPC是否达到设计目标:每个AZ是否有独立公有、应用、数据子网;每个AZ是否有独立NAT网关;应用子网是否通过网关终端节点访问S3;跨VPC访问是否只走对等连接或Transit Gateway;安全组是否按层引用而非开放大网段。满足这些条件后,VPC才具备承载高可用Web业务的基础网络能力。