云网络与自动化:VPC、对等连接与 Ansible
这一课你将能做到
- 画出并解释一个 VPC 的完整结构:网段、子网、路由表、NAT 网关
- 用 CLI 排查「跨子网 / 跨 VPC 不通」的三类原因
- 用 Ansible 批量巡检与下发网络配置,体会「网络即代码」
为什么要学
今天的「机房」大概率是 VPC。云网络把前八课的所有概念(子网、路由、NAT、ACL、LB)翻译成控制台表单;再叠上自动化(Ansible/IaC),网工的日常从「敲交换机」变成「提交配置」。这一课把传统概念映射到云,并教你批量干活。
先建立图像
VPC: 10.0.0.0/16(一个逻辑上的"私有机房")
├── 子网-公网A: 10.0.1.0/24 (AZ-a) ← Nginx/LB,绑 EIP 或走公网网关
├── 子网-私网A: 10.0.11.0/24 (AZ-a) ← K8s 节点,出网走 NAT 网关
├── 子网-私网B: 10.0.12.0/24 (AZ-b) ← MySQL/Redis,无公网路径
│
路由表-公网: 10.0.0.0/16→local;0.0.0.0/0→IGW(互联网网关)
路由表-私网: 10.0.0.0/16→local;0.0.0.0/0→NAT网关;对端VPC网段→对等连接
安全组: 入站 443 from 0.0.0.0/0;入站 22 from 办公网段;默认拒绝
公网子网和私网子网的差别只在路由表:有没有「0.0.0.0/0 → 互联网网关」。
跟着做
步骤 1:用 CLI 体检 VPC
# 阿里云 CLI(AWS 思路一致)
aliyun vpc DescribeVpcs --VpcId vpc-xxx | jq '.Vpcs.Vpc[0]'
aliyun vpc DescribeRouteTables --VpcId vpc-xxx | jq '.RouteTables.RouteTable[].RouteTableId'
aliyun ecs DescribeSecurityGroups --VpcId vpc-xxx
AWS 对应:aws ec2 describe-vpcs --vpc-ids vpc-xxx、aws ec2 describe-route-tables --filters Name=vpc-id,Values=vpc-xxx。看三样:CIDR 是否重叠、路由表是否漏条目、安全组默认规则。
步骤 2:跨 VPC 不通的三类原因定位
1) 路由缺失:本 VPC 路由表没有对端网段条目(或对等连接未激活)
2) 策略拦截:安全组双向、网络 ACL 进出都要配(无状态 ACL 易漏回程)
3) 网段重叠:两个 VPC 的 CIDR 有交集,路由根本下发不了
验证顺序:两端各 ping 网关 → 查路由表条目 → 查安全组双向 → 查 CIDR 重叠。
步骤 3:Ansible 批量巡检暴露面
pip install ansible
inventory.ini:
[web]
web1 ansible_host=10.0.11.10
web2 ansible_host=10.0.11.11
net-audit.yml:
- hosts: all
gather_facts: no
tasks:
- name: 收集监听端口
command: ss -tlnp
register: ports
changed_when: false
- name: 收集路由表
command: ip route
register: routes
changed_when: false
- debug:
msg: "{{ inventory_hostname }}\n{{ ports.stdout }}\n{{ routes.stdout }}"
ansible-playbook -i inventory.ini net-audit.yml
一个 playbook 巡检 N 台机器的暴露面,这是自动化的第一口甜头。
步骤 4:配置管理交给代码
生产分工:主机防火墙交给镜像基线,安全组与子网交给 IaC(Terraform/Ansible),变更走代码与审批,人不再手点控制台。Ansible 负责「保终态、防漂移」,Terraform 负责「资源生命周期」。
讲清楚要点
- VPC 是你的私有二三层逻辑网络:子网绑定可用区,路由表挂在子网上;同一路由表 = 同一转发策略。
- NAT 网关的方向性:让私网主动出网但不收进站;「能出去、打不进」既是安全特性也是自建服务要做端口映射的原因。
- 对等连接 / 云企业网是路由级互通:流量不穿公网;CIDR 重叠是对接第一雷区,规划期就要全局编址。
- 双层防线:安全组(实例级、有状态)+ 网络 ACL(子网级、无状态);云上 80% 的「不通」是安全组与回程问题。
- 自动化正确姿势:声明终态、幂等执行、变更可回滚;手工改控制台视为漂移,用检测任务兜底。
你可能会懵的地方
-
为什么私网机器能出网却 ping 不进来? NAT 单向:主动出站的回包能按连接表回来,外部主动进站没有映射可用。想收流量要么绑公网 IP,要么走 LB。
-
Ansible 和 Shell 脚本区别在哪? 幂等(重复执行结果一致)、声明式(描述终态而非步骤)、批量编排(inventory/role/依赖管理);一次性命令用 shell,长期状态用 Ansible。
-
K8s 网络和 VPC 是什么关系? Pod CIDR 是 VPC 之上的叠加网络。云 CNI(如 Terway/VPC-CNI)把 Pod IP 直接落在 VPC 内路由直通;overlay 型(Calico/VXLAN)在节点间打隧道——两种都要会看路由。
-
VPC 内东西向流量收费吗? 同 VPC 同 AZ 一般免费(受实例带宽上限约束);跨 AZ、跨 VPC、对等连接可能计费且有限速,成本要查文档。
-
「经典网络」还需要懂吗? 不需要学细节:它是共享二层、IP 直接分配的历史产物,新项目一律 VPC 专有网络。
错法对照
| 错法 | 问题 | 正解 |
|---|---|---|
| 所有子网共用一张路由表 | 私网被迫拿到公网默认路由 | 公网 / 私网子网分开路由表 |
| 对等连接只配一端路由 | 单向通,业务还是断 | 两端路由表各加对端网段 |
| 两 VPC 随手都用 172.17/16 | 对接时重叠无法打通 | 规划期全局分配并留扩展位 |
| 数据库子网也挂 NAT 出网 | 攻击面无谓扩大 | 数据层子网不配公网出网路由 |
| 手动在控制台改安全组 | 漂移、无法回溯、多人冲突 | IaC 管理,变更走代码与审批 |
| 子网 CIDR 起步就挑最大 | 将来对接别的网络被锁死 | 从小起步,按需扩 CIDR 或迁移 |
卡点急救
- 新实例拿不到内网 IP:查子网剩余 IP 数(每子网保留 5 个);快满了先扩 CIDR 或迁移子网。
- Ansible 连不上主机:
ansible all -i inventory.ini -m ping先通基础;多为 SSH 密钥、known_hosts、安全组 22 三件事。 - 跨 VPC 只有一向通:九成是对端回程路由缺失;两端各执行
ip route get 对端IP,哪端缺补哪端。
面试常问
-
公网子网和私网子网的本质区别? 只在路由表:公网子网有 IGW/公网网关默认路由;私网走 NAT 网关只出不进。区别不在子网本身,在路由策略。
-
VPC 对等连接和公网互通怎么选? 对等:内网级延迟与安全,流量不过公网,需 CIDR 不重叠;公网 + 白名单:快但暴露面大。生产数据库互通一律内网方案。
-
你们怎么管理几百台机器的配置? IaC 声明基线(Terraform 管资源、Ansible 管配置),变更走流水线 + 审批 + 灰度;手工变更视为违规,漂移检测兜底。
自测三问
- 私网子网的机器为什么能主动出网但收不到入站连接?
- 两个 VPC 打通后仍不通,你的排查清单是什么?
- Ansible 的幂等性指什么,为什么对网络配置尤其重要?
小结一句话
云网络 = 传统网络概念的托管化:子网 / 路由 / NAT / ACL 一个不少,自动化让它们可版本化、可回滚。
延伸
- Kubernetes 官方文档:集群网络
- 下一课:排障与可观测——ping、traceroute、tcpdump、Wireshark 方法论。