Best Practices for VPC IP Address Allocation

缘起

如今公有云用的越来越多,各个区域、不同可用区,还有各种特殊服务,再加上也许还有自建 IDC,还有办公网内网。我的传统是会将这些内网打通的。所以,各个节点网络的 IP 地址分配策略(方案)就成了一个绕不开的话题。

背景介绍

  • region: 公有云厂商每个 region(我喜欢叫做节点)里可以创建多个 VPC
  • zone: 每个 region 会有三个或更多的可用区(zone),每个可用区可以看作是一个数据中心(IDC)
  • subnet: subnet(子网) 会在某个可用区(zone)里创建。

VPC 分配策略

我常用的一些 VPC 创建管理策略:

  • 生产(Product)、测试(testing)和 Stage 环境(如果有的话)一般会单独一个 VPC
  • infrastracture 的相关机器(比如 Gitlab、VPN server、日志处理和监控报警等)也会一个单独的 VPC(规模相对较小)

VPC 下 subnet 的策略

  • 公有云厂商一般会建议每个 VPC 至少要跨两个可用区(为了冗余,避免某个可用区挂掉导致所有服务不可用),我一般会跨三个可用区。
  • 公有云厂商会建议 VPC 下的子网(subnet)分成公网子网(配公网 IP)和私网子网(不配公网 IP)。

VPC 中的 IP 分配

私网地址

这里指的是在 RFC 1918 里定义的“私有地址空间(Private Address Space)”,各大公有云厂商允许分配给 VPC 的 IP 地址只能是这其中的。

  1. 10.0.0.0/8(从 10.0.0.0 到 10.255.255.255)
  2. 172.16.0.0/12(从 172.16.0.0 到 172.31.255.255)
  3. 192.168.0.0/16(从 192.168.0.0 到 192.168.255.255)

VPC 和 subnet 的 IP 分配要求

  • 每个 VPC 要分一段(上面提到的)私网地址
  • VPC 下的每个 subnet 也要独占一段其 VPC 占有的私网地址中的一段

IP 分配策略

VPC

  1. 根据 VPC 的数量多少选用 10 段、172 段还是 192 段的 IP
  2. 每个 VPC 根据需求大小选一个或多个 C 段地址,当然更小也是可以的,比如半个 C 段(比如有些 infrastructure)。

subnet

以最简单的 VPC 配置四个 C 段地址为例(我常用是一个 VPC 两个 C 段),假设其是 10.0.0.0/22(也就是 10.0.0.0/24、10.0.1.0/24、10.0.2.0/24 和 10.0.3.0/24 四个 C 段),那么:

找三个可用区,

  • 分别建立一个私网子网,分配 IP 地址段:
    • 10.0.0.0/24
    • 10.0.1.0/24
    • 10.0.2.0/24
  • 分别建立一个公网子网,分配 IP 地址段:
    • 10.0.3.0/26
    • 10.0.3.64/26
    • 10.0.3.128/26

可以看出这个 VPC 还剩一段 IP:10.0.3.192/26,这一段就留作冗余。

注意:

  • VPC 的 internet gateway 要放到公网子网里
  • VPC 的 SNAT 设备要放到公网子网里
  • VPC 的公网子网的 default gateway 指向的是 internet gateway
  • VPC 的私网子网的 default gateway 指向的是 SNAT 设备

待续

本方案并没有考虑 IPv6 的情况,以后有机会更新的时候,会把 IPv6 的支持考虑进去。