4. 网络基础架构设计

在 Google Cloud 上,网络不是“先开机器再补网络”,而是整个生产环境的地基。VPC 是全局资源,子网是区域资源,防火墙规则作用于实例网卡,路由决定流量去向。理解这四层关系,才能把“能通”变成“可控地通”。本节围绕一个典型生产场景展开:某企业在 asia-east1(台湾)与 asia-southeast1(新加坡)双区域部署应用,前端在台湾,数据库在新加坡,需要跨区域私网互通、按环境隔离、按角色放行,并让无公网 IP 的实例既能访问 Google API 又能访问互联网。

VPC 全局架构与子网区域规划

VPC 网络是全局的,一个 VPC 可以横跨所有区域;子网是区域级的,必须指定 region 和 CIDR。同一 VPC 内不同区域的子网默认通过 Google 骨干网私网互通,无需额外对等连接。因此规划的核心不是“怎么连”,而是“怎么分地址、怎么隔离”。

推荐按“环境 + 区域 + 用途”三段式划分。示例规划如下:

子网名称区域CIDR用途
prod-app-tpeasia-east110.10.0.0/20生产应用前端
prod-db-sgpasia-southeast110.20.0.0/24生产数据库
prod-proxy-tpeasia-east110.10.16.0/24Cloud NAT 出口
dev-app-tpeasia-east110.30.0.0/20开发测试

CIDR 规划要预留扩展空间:/20 提供约 4096 个地址,适合应用层;/24 提供 256 个地址,适合数据库或代理层。注意每个子网会保留 4 个地址(网络地址、网关、次网关、广播),实际可用数减 4。跨区域通信时,源地址是子网内 IP,目标地址是另一区域子网 IP,路由由 VPC 自动生成,无需手工配置。

防火墙规则与层级策略

防火墙规则是“有状态”的,允许入站后返回流量自动放行。规则按优先级从 0 到 65535 评估,数字越小优先级越高,命中即停止。规则可作用于整个 VPC 或通过目标标签、服务账号限定到具体实例。

生产环境建议采用“默认拒绝入站、按需放行”的策略。示例规则:

gcloud compute firewall-rules create allow-web-tpe \
  --network=prod-vpc \
  --direction=INGRESS \
  --priority=1000 \
  --action=ALLOW \
  --rules=tcp:80,tcp:443 \
  --source-ranges=0.0.0.0/0 \
  --target-tags=web

gcloud compute firewall-rules create allow-db-from-app \
  --network=prod-vpc \
  --direction=INGRESS \
  --priority=1000 \
  --action=ALLOW \
  --rules=tcp:5432 \
  --source-ranges=10.10.0.0/20 \
  --target-tags=db

第一条允许公网访问带 web 标签的实例的 80/443;第二条只允许台湾应用子网访问带 db 标签的数据库 5432 端口。这样即使数据库有公网 IP,也无法从互联网直接连接。层级策略方面,若使用共享 VPC,宿主项目可定义“组织级防火墙策略”,对宿主项目内所有 VPC 生效,优先级高于 VPC 级规则,适合统一安全基线。

共享 VPC

共享 VPC 解决多项目网络统一管理问题:宿主项目拥有 VPC 和子网,服务项目把实例部署到宿主项目的子网中。服务项目的实例使用宿主项目的子网 IP,但计费和配额仍归属服务项目。典型场景是“网络团队管宿主项目,业务团队管服务项目”。启用时需在宿主项目授予服务项目 roles/compute.networkUser,并指定可用的子网。共享 VPC 下,防火墙规则由宿主项目统一管理,服务项目不能自行修改宿主 VPC 的规则,这既是约束也是安全优势。

Private Google Access 与 Cloud NAT

没有外部 IP 的实例默认无法访问互联网,也无法访问 Google API。Private Google Access(PGA)解决后者:在子网级别开启后,实例可用内部 IP 访问 *.googleapis.com、storage.googleapis.com 等,流量走 Google 内部网络,不经过公网。开启命令:

gcloud compute networks subnets update prod-app-tpe \
  --region=asia-east1 \
  --enable-private-ip-google-access

Cloud NAT 解决前者:为没有外部 IP 的实例提供出站互联网访问。它绑定在区域级,需要指定路由器、子网和 IP 分配方式。示例:

gcloud compute routers create prod-router-tpe \
  --network=prod-vpc \
  --region=asia-east1

gcloud compute routers nats create prod-nat-tpe \
  --router=prod-router-tpe \
  --region=asia-east1 \
  --nat-all-subnet-ip-ranges \
  --auto-allocate-nat-external-ips

PGA 与 Cloud NAT 的分工是:访问 Google API 走 PGA,访问外部网站走 NAT。两者可同时开启,互不冲突。判断是否生效:在无外部 IP 的实例上执行 curl -s -o /dev/null -w "%{http_code}" https://www.googleapis.com 应返回 200;执行 curl ifconfig.me 应返回 NAT 分配的外部 IP,而不是实例自身 IP。

生产 VPC 全局架构与流量路径 prod-vpc(全局) asia-east1(台湾) prod-app-tpe 10.10.0.0/20 Web 实例(无外部 IP) tag: web | PGA: 已开启 prod-proxy-tpe 10.10.16.0/24 Cloud NAT 出口 router: prod-router-tpe dev-app-tpe 10.30.0.0/20 开发测试环境 防火墙隔离 asia-southeast1(新加坡) prod-db-sgp 10.20.0.0/24 PostgreSQL 数据库 tag: db | 仅允许 10.10.0.0/20 防火墙规则(VPC 级) allow-web-tpe: tcp:80,443 ← 0.0.0.0/0 allow-db-from-app: tcp:5432 ← 10.10.0.0/20 deny-all-ingress: priority 65534 优先级:1000 > 65534,命中即停 有状态:允许入站后返回流量自动放行 私网互通 Google 骨干网 PGA 互联网 / Google API(*.googleapis.com) Cloud NAT 出站 PGA 访问 Google API 共享 VPC:宿主项目管网络 服务项目部署实例,使用宿主子网

把上述要素串起来看:VPC 提供全局私网骨架,子网按区域和用途切分地址,防火墙规则按标签和源范围控制东西向与南北向流量,共享 VPC 让网络管理集中化,PGA 和 Cloud NAT 分别解决无公网 IP 实例访问 Google API 与互联网的问题。实际落地时,先用 gcloud compute networks subnets describe 确认子网 CIDR 与 PGA 状态,再用 gcloud compute firewall-rules list --filter="network=prod-vpc" 核对规则优先级,最后在无外部 IP 的实例上分别验证 PGA 与 NAT 的出口 IP,确保流量路径与设计一致。