VPC 子网划分:CIDR 规划、预留地址与跨可用区实践
先确定 VPC 的 CIDR,再算子网
VPC 的 CIDR 一旦创建就不可修改,子网 CIDR 只能新建不能扩缩。实践上先按 3 年规模估算,再留一倍余量。一个常见起点是 10.0.0.0/16,可容纳 65536 个地址,扣除每个子网 5 个保留地址后仍能满足多数中型业务。如果要与线下 IDC 做 VPN 或云专线互连,必须确认对端网段不重叠,优先使用 10.x 中的窄段,不要一上来就用 10.0.0.0/8,否则后续对接第三方专线几乎必然冲突。
# 创建 VPC huaweicloud vpc create --name prod-vpc --cidr 10.0.0.0/16 # 按可用区+用途切分子网 # 10.0.0.0/20 可用区1 业务子网 4091 可用地址 # 10.0.16.0/20 可用区2 业务子网 # 10.0.32.0/24 可用区1 数据库子网 # 10.0.33.0/24 可用区2 数据库子网
用 /20 而不是 /24 承载业务子网,原因很直接:单个子网的地址在容器、负载均衡后端、中间件实例增多时消耗很快,/24 只有 251 个可用地址,一套 ECS+CCE 混合部署很容易打满。
每个子网的 5 个保留地址要算进去
华为云每个子网会保留 5 个地址:网络地址、网关地址(.1)、两个系统保留地址、广播地址。以 10.0.0.0/24 为例,实际可用是 10.0.0.4 到 10.0.0.254,共 251 个。规划时按 2^(32-掩码位数) - 5 计算,不要按 /24=256 去估算容量。
坑一:子网 CIDR 跨可用区复用导致路由混乱
曾遇到一个场景:两个可用区各建了一个 10.0.1.0/24 的子网,本意是「不同可用区同网段更整齐」。结果安全组规则、对等连接路由和日志里的源 IP 完全无法区分实例在哪个可用区,排障时只能靠查实例 ID。更严重的是,对等连接添加路由时两条 10.0.1.0/24 指向不同 VPC,路由表只保留一条,另一半流量静默丢失。
解决办法是子网网段按可用区错开,用第三段做区分:
可用区1: 10.0.0.0/20 10.0.32.0/24 可用区2: 10.0.16.0/20 10.0.33.0/24 可用区3: 10.0.48.0/20 10.0.34.0/24
路由表里直接就能看出目标网段属于哪个区。已有重叠子网无法改 CIDR,只能新建子网、迁移实例,因此这一条必须在创建阶段定死。
坑二:数据库子网与业务子网混用,安全组变成摆设
早期为了省事,RDS 实例直接放在业务子网里,靠安全组隔离。后来发现业务子网内的 ECS 只要被攻破,横向访问数据库端口时仅靠安全组一条规则;而一旦有人为了调试临时放开 0.0.0.0/0 的 3306 入方向,整库暴露。更麻烦的是 RDS 的默认安全组与 ECS 默认安全组在同一子网内默认互通。
解决办法是单独划出数据库子网,并在子网层面用网络 ACL 兜底,即使安全组配错也不通:
# 数据库子网网络 ACL(入方向) 允许 10.0.0.0/20 3306 允许 10.0.16.0/20 3306 拒绝 0.0.0.0/0 3306 # 出方向默认全放通,返回流量不受影响
子网划分本身不产生隔离能力,但它让 ACL 和路由有了明确的挂载点。业务子网与数据库子网的分离是成本最低的一层防护。
子网大小与数量的取舍
- 业务子网用
/20(4091 个可用),每个可用区一个,避免实例增长后迁子网。 - 数据库、缓存等有状态服务用
/24,数量固定,便于 ACL 精确匹配。 - 预留 1 到 2 个空闲
/24给临时测试环境,不要全部占满。 - 单 VPC 内子网数建议控制在 20 个以内,路由表和安全组规则的可维护性比地址利用率更重要。
小结
VPC CIDR 不可改,子网 CIDR 不可扩,规划必须在创建前完成。按可用区错开网段、单独划数据库子网、按 2^n - 5 计算容量,这三件事做对,后续对等连接、专线互连和安全策略才有稳定的基础。
- 点赞
- 收藏
- 关注作者
评论(0)