别急着开 ECS:VPC 与子网规划入门
注册完账号,第一件事通常是点「购买 ECS」,然后一路下一步。规格选好、密码设好、镜像选好,机器几分钟就起来了,网站也能打开。问题往往出现在几个月后:想加第二台机器分担流量,却发现子网里可用 IP 不够了;想让新机器连数据库,才发现两台根本不在同一个网络里;想和另一个项目的网络打通,两边的网段还撞了。这时候能做的只有重建,而重建意味着迁数据、改配置、重新验证。机器可以重建,网段一旦用了很难改。
一、VPC 到底是什么
VPC(虚拟私有云)是你在云上圈出的一块私有网络,和别人的网络默认隔离。
可以把它想成一个小区:VPC 是围墙和小区名,子网是按楼栋划分的区域,ECS 是具体住户。同一个小区里的楼栋能互相串门,别的小区默认进不来。
默认隔离这件事,比「能互通」更重要。 云上跑着大量互不相关的账号,如果没有这层围墙,数据库端口、内部接口就可能直接暴露在公网上。所以规划时有个基本原则:只把真正需要对外的那一台机器放到带公网出口的子网,数据库、缓存、后台服务一律放私网子网,连公网 IP 都不绑。这也解释了为什么第二节要单独留一段「私网子网」。
这里要和另一件事划清界限:安全组是挂在网卡上的访问规则,决定某个端口能不能被访问。怎么加一条入方向规则、以及网站打不开时怎么逐层排查,见第 09 篇,本篇不重复。
二、动手前先定三个值
买机器之前,花五分钟把三个值写下来,比后面返工一天划算。
2.1 VPC 网段:照填一个模板
新手直接填 10.0.0.0/16,不要自己算掩码。这个范围足够大,能切出很多子网。
唯一要确认的是别和日后要互通的网络重复。如果你已经有另一个 VPC、或者公司内网将来要通过专线连过来,先问清楚对方用的是哪段,避开 10.0.0.0/8 里已占用的部分。两个网络网段一样,就没法直接打通。
顺便说清 CIDR 里那个数字:斜杠后面越小,能容纳的地址越多。/16 有六万多个地址,/24 大约 250 个。云上能用的私有网段一共三段——10.0.0.0/8、172.16.0.0/12、192.168.0.0/16。很多人习惯填 192.168.1.0/24,那是家用路由器的网段,和公司内网、VPN 客户端极易撞车,所以云上一律建议用 10. 开头。
2.2 子网划分:一个可用区一个子网
在 10.0.0.0/16 里切出几段 /24,每段约 250 个可用 IP:
| 用途 | 网段 | 可用区 | 说明 |
|---|---|---|---|
| 公网子网 A | 10.0.1.0/24 |
可用区 1 | 放对外提供服务的 ECS |
| 公网子网 B | 10.0.2.0/24 |
可用区 2 | 同上,为后面的高可用留一台 |
| 私网子网 | 10.0.10.0/24 |
可用区 1 | 放数据库等不对外暴露的资源 |
| 预留 | 10.0.20.0/24 起 |
— | 先不建,留给以后扩容 |
两条经验:一台机器一个可用区一个子网,别把所有机器塞进同一段;留至少一段空着不建,将来加业务时不用改网段。
2.3 可用区怎么选
只记一条:需要互为备份的两台机器,别放在同一个可用区。
控制台创建子网时会让你选可用区,下拉里能看到当前区域有哪些。选两个不同的即可,不用研究它们内部的电力和网络架构。这一条在下一篇配负载均衡时会直接用到。
2.4 把规划写成一张表
别只记在脑子里。建一个文档,把网段、可用区、用途列清楚,以后每加一台机器都先查这张表:
| VPC | 网段 | 可用区 | 子网 | 用途 |
|---|---|---|---|---|
| prod-vpc | 10.0.0.0/16 |
可用区 1 | 10.0.1.0/24 |
Web 服务 |
| prod-vpc | 10.0.0.0/16 |
可用区 2 | 10.0.2.0/24 |
Web 备份 |
| prod-vpc | 10.0.0.0/16 |
可用区 1 | 10.0.10.0/24 |
数据库 |
| prod-vpc | 10.0.0.0/16 |
— | 10.0.20.0/24 起 |
预留,暂不创建 |
这张表还有第二个用处:多人协作时,别人不用猜你的网络是怎么划的,也不会随手建一个撞车的网段。网段冲突几乎都发生在「有人不知道已经用了哪段」的时候,一张表就能挡掉大半。
三、在控制台把网络建出来
下面的路径按「大致位置 + 关键字段名」描述——控制台改版较频繁,菜单名可能略有不同,但字段名基本稳定。
3.1 创建 VPC
进入虚拟私有云 VPC 控制台,找到「创建虚拟私有云」,关注两个字段:
| 字段 | 填什么 | 说明 |
|---|---|---|
| 名称 | 例如 prod-vpc |
自己看得懂就行,建议带环境名 |
| IPv4 网段 | 10.0.0.0/16 |
就是上一节定的值 |
提交后列表里状态变成「可用」,就算成功。创建 VPC 时系统会自动建好一张默认路由表,同 VPC 内不同子网之间默认就能互通,这一步不需要你手动加任何路由。
3.2 创建子网
在 VPC 控制台找到「子网」页签 → 「创建子网」,按第二节的表逐个建:
| 字段 | 填什么 |
|---|---|
| 所属 VPC | 选刚建的 prod-vpc |
| 名称 | 例如 subnet-a1 |
| 可用区 | 可用区 1 / 可用区 2 |
| IPv4 网段 | 10.0.1.0/24、10.0.2.0/24…… |
每建完一个,看到状态「可用」再建下一个。建完回头看一眼列表,确认两个子网挂在不同可用区。
创建时控制台会显示「可用 IP 数」,/24 一般是 250 左右,不是 256——网段地址、网关地址等会被占用。如果这个数字明显偏小,先别提交,回去检查掩码是不是填错了。 这是唯一一个在建子网当场就能发现规划错误的地方。
3.3 看一眼默认路由表
点进 VPC 详情 → 「路由表」,会看到一条目标是 VPC 自身网段的路由。它的意思是「同 VPC 内的流量在本网络内部转发」,有这条就够了。
新手阶段不需要动它。自定义路由是给 NAT、专线、对等连接这些场景用的,等真的需要时再配。
3.4 验证一下
在同一个 VPC 的两个子网各起一台 ECS,登录其中一台,用内网 IP 互测:
# 在 ECS-1 上执行,换成 ECS-2 的内网 IP
ping 10.0.2.15
# 如果 ECS-2 上跑着 Web 服务,再测端口
curl -I http://10.0.2.15:80
ping 有回显、curl 返回 HTTP 状态码,说明网络通了。如果 ping 通但 curl 超时,问题已经不在网络层——回到第 09 篇查安全组、系统防火墙和服务监听地址。
四、公网怎么进来、跨 VPC 怎么互通
这一节只要求「知道有这回事」,不需要现在动手。
4.1 让外面能访问
ECS 默认只有内网 IP。要让互联网访问它,需要绑定弹性公网 IP(EIP);反过来,如果是一堆内网的机器想主动访问外网下载依赖,通常用 NAT 网关统一出去,而不是每台都绑一个公网 IP。
端口放行回到第 09 篇,用域名访问和备案流程见第 10 篇。
还有个容易混的点:EIP 是绑在实例上的公网地址,它不属于 VPC 网段,也不要写进任何配置文件。 同一个 VPC 内的服务互相调用一律走 10. 开头的内网 IP,既更快,也不产生公网流量费。把 EIP 填进数据库连接地址,是新手很常见的一个错。
4.2 让两个 VPC 互通
不同 VPC 默认互相隔离,哪怕网段不重复也连不上。需要打通时用对等连接(或云连接,跨区域时)。现在只要记住一条判断:网段规划时要给未来要互通的网络留不同网段,否则将来连对等连接都建不起来。
| 什么时候 | 用什么 | 本篇要不要做 |
|---|---|---|
| 外网访问单台 ECS | 弹性公网 IP | 不用,见第 09 篇 |
| 内网机器主动出网 | NAT 网关 | 不用 |
| 两个 VPC 内网互通 | 对等连接 | 不用,知道即可 |
| 跨区域互通 | 云连接 | 不用 |
五、五个常见错误
| 现象 | 原因 | 解法 |
|---|---|---|
| 建对等连接时提示网段冲突 | 两个 VPC 用了同一段 CIDR | 建 VPC 前先登记所有网段,避开已占用的 |
| 子网里机器加到几十台就加不了 | 掩码给太小(如 /28),可用 IP 只有十几个 |
子网用 /24,预留足够地址 |
| 两台 ECS 互相 ping 不通 | 建在了不同 VPC,或不同 VPC 没打通 | 放同一个 VPC,或配对等连接 |
| 想加新业务发现没网段可切 | 一开始把 /16 全分完了 |
预留至少一段空白网段不建 |
| 服务配置里填了 EIP,内网调用失败 | EIP 是公网地址,内网通信要用内网 IP | 同一 VPC 内一律用 10. 开头的内网 IP |
| 想把子网换个可用区,发现改不了 | 子网和可用区是绑定的,创建后不能改 | 建之前定好,别指望事后调整 |
| 同一 VPC 内两台机器内网不通 | 多半不是路由问题,而是安全组没放行 | 见第 09 篇的三层排查 |
六、小结
VPC 这层东西的特点是:做对了感觉不到它存在,做错了要推倒重来。 所以最省事的做法不是边用边改,而是开机器前先花五分钟定网段、切子网、分可用区。
三个值记下来就够了:VPC 用 10.0.0.0/16、每个可用区一个 /24 子网、留一段空网段不建。剩下的默认路由表、默认安全组,交给平台。
地基有了,下一篇解决另一个问题:只有一台机器时,它一重启网站就没了。
- 点赞
- 收藏
- 关注作者
评论(0)