在纸上设计 VPC
目标
云网络几乎全部取决于创建之前就要定下来的事。网段选错了,以后就改不了——因为必须修改已在运行的服务的 IP。
本实验无需云账号,直接做实际工作中会做的计算。
条件
- 本地数据中心已经在使用
10.0.0.0/12 - 3 个 AZ,每个 AZ 各有 public
/24· app/22· db/24 - 以后必须能再增加一个 AZ
不要用手算
python3 - <<'PY'
import ipaddress as i
vpc = i.ip_network('10.42.0.0/16')
print(list(vpc.subnets(new_prefix=22))[:4])
print(vpc.overlaps(i.ip_network('10.0.0.0/12')))
PY
用 ipaddress 模块就足够了。仅凭肉眼,无法看出 10.42.4.0/22 和 10.42.6.0/24 是否重叠。
文件
| 文件 | 内容 |
|---|---|
01-range.txt |
选定的 VPC 网段,一行 |
plan.csv |
이름,CIDR(韩文,意为“名称,CIDR”)共 9 行 |
check.py |
重叠检查——有重叠则退出码为 1 |
04-growth.txt |
可作为第 4 个 AZ 使用的空闲网段 |
route.csv |
계층,기본경로대상(韩文,意为“层级,默认路由目标”)共 3 行 |
06-nacl.txt |
NACL 规则 |
07-egress.txt |
费用计算 |
08-notes.md |
总结 |
参考
第 3 步的 check.py,评分器会拿故意做成重叠的规划来运行。
如果没能检查出来就无法通过——确认检查确实在检查,也是本实验的一部分。
选择不重叠的网段
本地数据中心已经在使用 10.0.0.0/12。选一个与它不重叠的 /16 VPC 网段,用一行写入 01-range.txt(例如 10.42.0.0/16)。
/12 的范围是从 10.0.0.0 到 10.15.255.255。要看的是第二个八位组,而不是第三个。可以用 Python 确认:python3 -c "import ipaddress as i; print(i.ip_network('10.42.0.0/16').overlaps(i.ip_network('10.0.0.0/12')))"。
网段重叠的话,以后接入 VPN、对等连接时就无法挽回,因为必须修改已在运行的服务的 IP。
在 3 个 AZ 中铺设三层
在 3 个 AZ 中各放置 public /24、app /22、db /24,以 이름,CIDR(韩文,意为“名称,CIDR”)的格式写入 plan.csv,共 9 行。
名称可以像 public-a、app-a、db-a、public-b 这样命名。它们之间不能重叠,而且必须全部位于 VPC 之内。/22 相当于四个 /24 的大小——app 层必须最大,是因为每个 Pod、任务都会占用一个 IP。
不要用手算。可以这样做:python3 -c "import ipaddress as i; print(list(i.ip_network('10.42.0.0/16').subnets(new_prefix=22))[:4])"。
亲手写重叠检查
创建 check.py。读取 plan.csv,若存在重叠的网段对,就输出该网段对并以退出码 1 结束,没有则以 0 结束。
ipaddress.ip_network(x).overlaps(y) 就足够了。仅凭肉眼,无法看出 10.42.4.0/22 和 10.42.6.0/24 是否重叠——所以要把这项检查放进 CI。
评分器会拿你的 check.py 去运行故意做成重叠的规划。如果没能检查出来就无法通过。
给第四个 AZ 留出位置
确认按现有规划能否再增加一个 AZ,并把可用的空闲网段写入 04-growth.txt。
需要的是一套 public /24 + app /22 + db /24。从 VPC 中减去已经使用的部分,求出剩下的网段。
一开始就把 /16 用满的设计是最常见的错误。AZ 会增加,网段却无法扩大。
决定流量从哪里出去
在 route.csv 中按层级写三行 계층,기본경로대상(韩文,意为“层级,默认路由目标”)——public / app / db。
public 走互联网网关(igw),app 走 NAT(nat),db 不对外出站(none)。这三行就是安全边界。
所谓“private 子网”,只是说默认路由不是 IGW 而已。挂上 NAT 之后照样能出去——想让它出不去,就必须干脆不设置默认路由。
NACL 的规则为什么要多一倍
app 子网需要对外访问 HTTPS(443)。如果只用 NACL 来放行,把需要的规则连同方向和端口一起写入 06-nacl.txt。
安全组会记住状态,所以发出请求的响应会自动返回。NACL 不会记住——除了开放出站 443,为了让响应回来,还必须开放入站临时端口范围(1024–65535)。
不知道这一点,就会为“SG 明明开了,为什么不通”耗掉半天。
出站的数据要花钱
app 子网每月向对象存储发送 500GB。计算经过 NAT 与使用网关端点时的月费用差额,连同数字一起写入 07-egress.txt。
NAT 网关分别按小时和按处理量计费(大约每 GB $0.045)。网关端点不收处理量费用。500GB × $0.045 = ?另外也要写上 NAT 的常驻费用(730 小时 × $0.045)。
费率因云厂商和区域而异。重要的是数量级——存在这样一种结构:流量不变,只改变路径,费用就消失了。
总结三件事
在 08-notes.md 中至少写三行:网段选错为什么无法挽回、private 子网的真正含义、SG 与 NACL 的区别。
正文中必须包含 겹、기본 경로 和 상태(均为韩文,依次意为“重叠”“默认路由”“状态”)。