3. 生产级VPC网络架构设计
生产级VPC不是把默认VPC改几个子网就完事,而是从地址规划开始,把“哪些资源需要被互联网访问、哪些只能被内部访问、哪些必须完全隔离”这三类需求,映射到不同子网、路由表和网络ACL上。本节以“某业务系统部署在AWS、需要跨两个可用区高可用、Web层对外、应用与数据库层仅内部可达”为例,完整走一遍VPC的设计与落地过程。
一、先定地址空间与子网切分
VPC的CIDR一旦创建就不能修改,所以规划要留足余量。示例选用 10.20.0.0/16,共65536个地址。按“每类子网在每个可用区各一份”的原则,在 ap-southeast-1a 和 ap-southeast-1b 两个可用区中切出六张子网:
| 子网名称 | 可用区 | CIDR | 类型 | 用途 |
|---|---|---|---|---|
| pub-1a | 1a | 10.20.0.0/20 | 公有 | ALB、NAT网关 |
| pub-1b | 1b | 10.20.16.0/20 | 公有 | ALB、NAT网关 |
| app-1a | 1a | 10.20.32.0/20 | 私有 | 应用服务器 |
| app-1b | 1b | 10.20.48.0/20 | 私有 | 应用服务器 |
| db-1a | 1a | 10.20.64.0/20 | 隔离 | RDS、缓存 |
| db-1b | 1b | 10.20.80.0/20 | 隔离 | RDS、缓存 |
每张子网4096个地址,AWS会保留前4个和后1个,实际可用约4091个。这里刻意把“私有”和“隔离”分开:私有子网有到NAT网关的路由,可以主动出网;隔离子网没有任何指向互联网的路由,只能被VPC内部访问。这是生产环境里保护数据库最直接的手段。
二、路由表决定流量走向
路由表是VPC内流量的“决策中心”,每张子网必须关联一张路由表。示例中需要三张:
- 公有路由表:
0.0.0.0/0 → Internet Gateway,本地路由10.20.0.0/16 → local。关联 pub-1a、pub-1b。 - 私有路由表:
0.0.0.0/0 → NAT Gateway,本地路由保留。关联 app-1a、app-1b。 - 隔离路由表:只有本地路由,无默认路由。关联 db-1a、db-1b。
NAT网关要放在公有子网,并绑定弹性IP。为了可用区容错,应在 pub-1a 和 pub-1b 各建一个NAT网关,然后让 app-1a 的路由表指向 1a 的NAT,app-1b 指向 1b 的NAT。这样单个可用区故障时,另一侧的应用仍能出网。如果只建一个NAT网关,虽然省钱,但该可用区故障会导致所有私有子网失去出网能力。
三、VPC端点让私有流量不出VPC
应用访问S3、DynamoDB、ECR、CloudWatch Logs时,如果走NAT网关,会产生NAT处理费和流量费,而且流量绕行公网。更优的做法是使用VPC端点:
- 网关型端点:用于S3和DynamoDB,免费,通过修改路由表把目标前缀指向端点。
- 接口型端点:用于ECR、Secrets Manager、SSM等,基于ENI,按小时和流量计费,需在私有/隔离子网中创建。
以S3网关端点为例,创建后需要在私有路由表和隔离路由表中添加一条 pl-xxxx(S3前缀列表)→ vpce-xxxx 的路由。这样应用上传对象时流量直接进入AWS骨干网,不经过NAT,也不占用公网带宽。接口型端点还要配合安全组,只允许来自应用安全组的443访问。
四、安全组与网络ACL的分工
安全组是有状态的、作用于实例/ENI的白名单,网络ACL是无状态的、作用于子网的黑白名单。生产环境里两者配合使用:安全组做精细的实例级控制,网络ACL做子网级的粗粒度兜底。
示例中的安全组规则:
ALB-SG : 入站 443 来自 0.0.0.0/0;出站 8080 到 APP-SG
APP-SG : 入站 8080 来自 ALB-SG;出站 3306 到 DB-SG,出站 443 到 0.0.0.0/0
DB-SG : 入站 3306 来自 APP-SG;出站 无(或仅响应流量)
网络ACL方面,公有子网ACL允许 0.0.0.0/0 的80/443入站,以及1024-65535的返回流量;私有子网ACL只允许来自VPC CIDR的入站;隔离子网ACL只允许来自 10.20.32.0/20 和 10.20.48.0/20 的3306入站。注意网络ACL是无状态的,返回流量必须显式放行临时端口范围,否则会出现“请求发出去了但回不来”的问题。
五、整体流量路径
把上面的设计串起来,南北向和东西向流量的路径如下:
南北向流量从Internet进入IGW,到达公有子网的ALB,ALB再转发到私有子网的应用;应用访问数据库走VPC内部路由,不经过任何网关。应用需要访问S3或拉取镜像时,优先走VPC端点;只有访问外部第三方API时才走NAT网关。这样既保证了安全边界,也控制了成本。
六、落地检查清单
创建完成后,建议按以下顺序验证:
- 从公有子网的EC2能否通过IGW访问互联网(
curl -I https://aws.amazon.com)。 - 从私有子网的EC2能否通过NAT访问互联网,且源IP显示为NAT的弹性IP。
- 从隔离子网的EC2尝试访问互联网,应当超时,确认无默认路由。
- 应用实例能否通过VPC端点访问S3,且NAT网关的流量监控中没有对应流量。
- 安全组和网络ACL的规则是否与设计一致,特别是临时端口范围。
这套架构的核心思想是:用子网划分安全区域,用路由表控制流量方向,用NAT和VPC端点解决出网问题,用安全组和网络ACL做纵深防御。地址规划、可用区分布和路由设计一旦确定,后续扩容只需在对应子网中增加资源,不需要改动网络骨架。