3. 子网与 IP 地址管理
在 Google Cloud 的 VPC 网络中,子网不是“一段随便划出来的地址”,而是由若干地址范围(range)共同构成的资源容器。理解这些范围的分工,是后续做路由、防火墙、NAT、Private Service Connect 以及混合云互联的基础。一个子网可以同时拥有主 IP 范围、次级范围、别名 IP 范围,并配合私有 Google 访问(Private Google Access)决定实例能否在不具备外部 IP 的情况下访问 Google API。下面按“范围类型 → 分配策略 → 实际配置”的顺序展开。
一、主 IP 范围:子网的“身份地址段”
每个子网必须且只能有一个主 IP 范围(primary IP range),它决定了该子网内虚拟机主网卡(nic0)默认获取的地址来源。主范围在创建子网时指定,例如 10.10.0.0/24,则可用地址为 10.10.0.1 到 10.10.0.254。Google Cloud 会保留每个子网的第一个地址(网络地址)和第二个地址(默认网关),因此 /24 实际可分配给实例的地址是 252 个。
主范围一旦创建,不能直接修改或缩小,只能通过扩展(expand)操作增大 CIDR 前缀长度更小的范围,例如把 10.10.0.0/24 扩展为 10.10.0.0/23。扩展时新范围必须包含原范围,且不能与同 VPC 内其他子网重叠。这是规划阶段必须留出余量的原因:生产环境建议主范围至少 /24,并按未来 2~3 年实例增长预留。
二、次级范围:给容器和专用负载的第二地址池
次级范围(secondary IP range)是子网的附加地址段,最典型的用途是 GKE 的 Pod 和 Service 地址。GKE 集群在创建时会要求指定两个次级范围:一个给 Pod,一个给 Service。例如:
子网 subnet-a(主范围 10.10.0.0/24)
├─ 次级范围 pods: 10.20.0.0/16 (Pod IP)
└─ 次级范围 services: 10.30.0.0/20 (ClusterIP)
次级范围与主范围的关键区别在于:次级范围可以独立增删和扩展,且不直接参与实例主网卡的地址分配,而是通过别名 IP 机制绑定到实例的网卡上。一个子网可以有多个次级范围,命名后便于在 GKE、Cloud Run 或内部负载均衡中引用。
三、别名 IP:把次级范围“挂”到实例网卡
别名 IP(alias IP)是让一个实例网卡同时拥有多个 IP 地址的机制。它把主范围或次级范围中的地址,以 CIDR 形式绑定到 nic0 上。GKE 节点正是通过别名 IP 把 Pod 地址段挂到节点上,再由节点内的 CNI 插件把具体 Pod IP 分配给容器。
别名 IP 的分配有两种粒度:
- 单个地址:如
10.20.0.5/32,适合给某个实例附加一个固定内部地址。 - 子范围:如
10.20.0.0/24,适合节点批量承载 Pod。
需要注意:别名 IP 范围必须来自该实例所在子网的主范围或次级范围,不能跨子网引用。若实例有多张网卡,每张网卡可独立配置别名 IP。
四、私有 Google 访问:无外部 IP 也能访问 Google API
默认情况下,只有具备外部 IP 的实例才能访问 *.googleapis.com 等 Google API。私有 Google 访问(Private Google Access, PGA)打开后,没有外部 IP 的实例也能通过内部路径访问 Google API 和服务的公共 IP。它作用于子网级别,开启后该子网内所有实例自动生效。
PGA 的流量路径是:实例 → 子网默认网关 → Google 内部网络 → API 端点。它不会让实例获得公网出口,也不会改变实例的源地址。若需要访问第三方公网,仍需 Cloud NAT。PGA 与 Cloud NAT 常配合使用:PGA 负责 Google API,NAT 负责其他公网目标。
五、内部与外部 IP 的分配策略
实例的 IP 分配由“内部 IP 必选、外部 IP 可选”这一原则决定。内部 IP 来自子网主范围,可自动分配或指定;外部 IP 则有两种形态:
- 临时外部 IP(ephemeral):实例停止后释放,适合临时调试。
- 静态外部 IP(static):预留后长期绑定,适合对外提供服务的负载均衡或跳板机。
生产环境推荐策略是:默认不给实例外部 IP,统一通过 Cloud NAT 出公网,通过 PGA 访问 Google API,通过内部负载均衡或外部负载均衡暴露服务。这样既减少攻击面,也便于审计和地址规划。
六、规划与配置要点
实际落地时,建议按以下顺序推进:
- 先定 VPC 与区域,再按区域划分子网。同一 VPC 内不同区域的子网范围不能重叠。
- 主范围按实例规模预留。若预计 500 台实例,/23 可提供约 508 个可用地址,留出扩展空间。
- 次级范围单独规划。GKE 的 Pod 范围通常需要 /16 以上,Service 范围 /20 左右,避免与主范围或其他子网冲突。
- 别名 IP 按节点粒度分配。节点别名范围大小决定单节点可承载的 Pod 数,需与 GKE 的
--max-pods-per-node匹配。 - 默认关闭外部 IP,用 Cloud NAT + PGA 替代,减少暴露面。
*.googleapis.com 会失败。此时要么开启 PGA,要么给实例加外部 IP,要么通过 Cloud NAT 出公网。总结来看,主 IP 范围是子网的“根”,次级范围是“扩展池”,别名 IP 是“绑定机制”,PGA 是“无公网访问 Google API 的通道”,而内部/外部 IP 的取舍决定了实例的暴露面。把这五者放在同一张地址规划表里统一管理,才能避免后续路由、防火墙和混合云互联阶段的地址冲突与返工。