3. VPC灾备设计基础

多区域灾备的第一道地基不是备份工具,而是地址空间。VPC 的 CIDR 一旦创建便无法修改,子网划分、路由策略、对等连接、Transit Gateway 挂载乃至未来跨区域回切,全部受它约束。因此本节把“规划”放在最前面:先确定区域与地址的对应关系,再决定子网分层与路由隔离,最后才谈对等连接怎么连、连到什么程度。

一、多区域 VPC 规划:先定区域角色,再定地址块

灾备场景下,区域不是随便选两个,而是按角色分工。常见做法是主区域(Primary)承载生产流量,灾备区域(DR)平时处于低水位或冷备状态,切换时接管。区域选择要同时看三件事:业务延迟覆盖范围、可用区数量(至少 3 个 AZ 才便于做跨 AZ 高可用)、以及目标服务在该区域的可用性(如某些实例类型、RDS 引擎版本、Direct Connect 落地点)。

规划阶段建议先画一张“区域—VPC—用途”对照表,把每个 VPC 的归属、角色、环境(生产/预发/共享服务)写清楚,再分配地址。示例规划如下(参数为教学示例,非实测):

区域VPC 名称角色CIDR可用区
ap-northeast-1prod-vpc主生产10.10.0.0/161a / 1c / 1d
ap-southeast-1dr-vpc灾备10.20.0.0/161a / 1b / 1c
ap-northeast-1shared-vpc共享服务10.30.0.0/161a / 1c

这里刻意让主备 VPC 使用不同的第二段(10.10 与 10.20),而不是同一段的不同子网。原因是:跨区域对等连接和 Transit Gateway 都要求两端 CIDR 不重叠,一旦重叠,路由无法唯一确定下一跳,连接直接不可用。把“区域编号”编进第二段,是最省心的防重叠手段。

二、CIDR 分配:给未来留出可扩展的位

CIDR 分配的核心是“预留”。一个 /16 有 65536 个地址,看似很多,但如果一开始就切成 /24 子网,最多只能切 256 个,且每个子网可用地址只有 251 个(AWS 每个子网保留 5 个地址:网络地址、VPC 路由器、DNS、未来保留、广播)。更稳妥的做法是按“环境—层级—可用区”三级切分。

以 10.10.0.0/16 为例,可先按层级切成四块:

  • 10.10.0.0/18 —— 公共层(ALB、NAT Gateway、跳板机)
  • 10.10.64.0/18 —— 应用层(EC2、ECS、Lambda ENI)
  • 10.10.128.0/18 —— 数据层(RDS、ElastiCache、OpenSearch)
  • 10.10.192.0/18 —— 预留层(未来新增服务或迁移)

每个 /18 再按可用区切成 /20 或 /22。例如应用层在 1a 用 10.10.64.0/20,1c 用 10.10.80.0/20,1d 用 10.10.96.0/20。这样每个 AZ 有 4091 个可用地址,足够承载中等规模集群,同时保留 10.10.112.0/20 作为该层扩展位。分配时建议用一张地址台账记录“已分配/已预留/空闲”,避免后续团队各自申请时撞车。

判断 CIDR 是否够用的快速方法:把预期实例数乘以 2(考虑滚动升级和临时扩容),再加上负载均衡、NAT、接口终端节点等 ENI 消耗,最后向上取到最近的 2 的幂。若结果超过子网容量的 70%,就应换更大的子网。

三、子网分层与路由表隔离

子网分层不只是“公有/私有”两分。灾备场景下更实用的是四层:公共层、应用层、数据层、管理/终端节点层。每层绑定独立路由表,实现三点隔离:

  1. 公共层路由表含 0.0.0.0/0 → Internet Gateway,只放 ALB 和 NAT Gateway,不放业务实例。
  2. 应用层路由表含 0.0.0.0/0 → NAT Gateway(出站),不接收入站公网流量。
  3. 数据层路由表只保留本地路由和到应用层的路由,不配 0.0.0.0/0,彻底阻断出公网。
  4. 管理/终端节点层路由表指向 VPC Endpoint 或 Transit Gateway,用于 SSM、S3、ECR 等私有访问。

路由表隔离的价值在故障时最明显:当主区域应用层被攻破,攻击者无法直接跳到数据层,因为数据层路由表里根本没有指向公网或其它层的默认路由。同理,灾备区域的数据层可以只允许来自本区域应用层的流量,跨区域复制走独立的终端节点或对等连接,不混在业务路由里。

多区域 VPC 地址规划与路由隔离示意 主区域 ap-northeast-1 prod-vpc 10.10.0.0/16 公共层 10.10.0.0/18 ALB · NAT GW · 路由: 0.0.0.0/0 → IGW 应用层 10.10.64.0/18 EC2 · ECS · 路由: 0.0.0.0/0 → NAT 数据层 10.10.128.0/18 RDS · Redis · 路由: 仅本地 + 应用层 预留层 10.10.192.0/18 未来服务 / 迁移缓冲 灾备区域 ap-southeast-1 dr-vpc 10.20.0.0/16 公共层 10.20.0.0/18 ALB · NAT GW · 路由: 0.0.0.0/0 → IGW 应用层 10.20.64.0/18 EC2 · ECS · 路由: 0.0.0.0/0 → NAT 数据层 10.20.128.0/18 RDS 只读副本 · 路由: 仅本地 + 应用层 预留层 10.20.192.0/18 回切缓冲 / 新服务 对等连接 10.10 ↔ 10.20 关键约束:两端 CIDR 不重叠;数据层不配默认路由;跨区域复制走独立路径,不与业务流量混用。 路由表隔离原则:每层独立路由表,默认路由只出现在公共层和应用层,数据层仅保留必要本地路由。

四、对等连接策略:连什么、不连什么

对等连接(VPC Peering)是跨 VPC 通信最直接的方式,但它有两个硬约束:CIDR 不能重叠,且不支持传递路由。也就是说,A 连 B、B 连 C,A 不能通过 B 访问 C。灾备场景下,对等连接通常只用于三类流量:

  • 跨区域数据复制:主区域数据层 → 灾备区域数据层,走对等连接或 Transit Gateway,只放行数据库端口。
  • 管理流量:运维跳板机到灾备区域应用层,走对等连接,配合安全组限制源 IP。
  • 共享服务访问:两个区域的 VPC 都连到共享服务 VPC(如 AD、日志、镜像仓库),避免每个 VPC 重复部署。

不建议用对等连接承载业务东西向流量,因为对等连接数量会随 VPC 数量平方增长,路由表也会迅速膨胀。当 VPC 超过 5 个或需要跨多个区域时,应改用 Transit Gateway + 路由表分段,把“谁和谁通”收敛到 TGW 路由表里管理。

对等连接建立后,路由表不会自动生效。必须在两端 VPC 的路由表中分别添加指向对端 CIDR、目标为 peering connection 的路由,并在安全组中放行对应端口。只建连接不加路由,是最常见的“连了但不通”原因。

五、一个可执行的规划检查清单

在动手创建 VPC 之前,建议逐项确认以下内容,避免返工:

检查项判断标准示例
区域角色主/备/共享是否明确prod-vpc 主,dr-vpc 备
CIDR 不重叠所有 VPC 两两不重叠10.10/16 与 10.20/16
子网容量每层每 AZ 可用地址 ≥ 预期 2 倍/20 提供 4091 个
路由隔离数据层无默认路由仅本地 + 应用层
对等连接用途仅复制/管理/共享服务不承载业务东西向
预留空间至少保留一个 /1810.10.192.0/18

把这张清单在规划评审时过一遍,比事后改路由、拆子网、重建对等连接要省力得多。VPC 灾备设计的本质,是在地址空间这个不可变约束下,提前把区域、层级、路由和连接关系安排清楚,让切换时只需要改路由指向,而不需要动网络骨架。