TT Lab
开始
学习 学习路径 课程

云网络设计

在纸上设计 VPC

在 TT Lab 中继续学习

目标

云网络几乎全部取决于创建之前就要定下来的事。网段选错了,以后就改不了——因为必须修改已在运行的服务的 IP。

本实验无需云账号,直接做实际工作中会做的计算。

条件

不要用手算

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 的区别。

正文中必须包含 겹、기본 경로 和 상태(均为韩文,依次意为“重叠”“默认路由”“状态”)。