你是不是也被 PVE 集群里这些 SDN 名词搞懵了?Zone、VNet、IPAM、VNet Firewall……听起来高大上,实际用起来却一头雾水?别担心,这篇教程就是为你准备的。我们会用最接地气的方式,把这些概念和它们之间的配合关系一次性讲清楚。
先打个比方,秒懂各组件
想象一下,你要开一家公司,需要布置办公场地和网络。PVE 的 SDN 组件完全可以对应起来理解:
| PVE里的组件 |
对应现实中的 |
一句话说明 |
| Zone |
整栋写字楼 |
决定这栋楼用哪种网络技术(VLAN/VXLAN) |
| VNet |
楼里的一层办公室 |
具体的一层,与其他层是隔离的 |
| Subnet |
这层楼的门牌号范围 |
比如这层房间号是 100-199 |
| IPAM |
前台登记系统 |
自动分配房间号,确保不重复、不冲突 |
| VNet Firewall |
这层楼的门禁系统 |
控制谁能进、谁能出,规则由你定 |
是不是清晰多了?下面我们逐一展开,详细说说每个组件到底怎么用。
Zone:你的“网络大楼”
Zone 是 SDN 的地基。你得先“盖好楼”,才能在里面划分楼层和房间。
PVE 支持几种“楼型”,也就是 Zone 的类型:
- Simple:简易板房。仅适用于测试环境,生产环境不建议使用。
- VLAN:标准写字楼。需要物理交换机配合(端口需配置为 Trunk 模式)。
- VXLAN:跨园区的连锁办公楼。适合多节点、跨物理网络的集群,能创建 overlay 网络。
- EVPN:智能大厦。功能强大但配置复杂,通常用于大型、自动化程度高的网络。
新手建议:先从 VLAN 类型开始入手。Simple 过于简陋,而 VXLAN 和 EVPN 可以等熟悉基础后再探索。
创建一个 Zone 时,你需要配置:
- 使用哪张物理网卡(例如
vmbr1)。
- 如果是 VLAN 类型,需要指定 VLAN 标签的范围(例如 10-100)。
- 是否需要与其他 Zone 建立连接(Peering)。
VNet:楼里的“具体一层”
Zone 建好后,就需要划分具体的办公区域了。一个 Zone 里可以创建多个 VNet,它们彼此之间默认是完全隔离的。
举个例子:
- Zone 名叫“公司总部”。
- VNet 10 是“研发部”(对应 VLAN 10)。
- VNet 20 是“财务部”(对应 VLAN 20)。
- VNet 30 是“市场部”(对应 VLAN 30)。
每个 VNet 在 PVE 节点上会生成一个对应的虚拟网桥(例如 vnet10、vnet20)。虚拟机连接到哪个 VNet,就相当于进入了哪个“部门”。
关键点:不同 VNet 之间的网络默认是不通的!研发部的虚拟机无法直接访问财务部,除非你配置路由、对等连接(Peering)或者使用多网卡。
Subnet:门牌号怎么编排
VNet(这一层办公室)有了,接下来得给每个“工位”编号,这就是 Subnet(子网)负责的事。
配置非常简单,主要就是三项:
- 网段:例如
192.168.10.0/24
- 网关:通常是网段的第一个可用 IP(例如
.1),它是这层楼对外的“大门”。
- DNS:虚拟机用来解析域名的服务器地址。
一个 VNet 下可以配置多个 Subnet。例如,你可以划分 192.168.10.0/24 给虚拟机使用,再划一个 10.0.0.0/24 给容器使用。但对于新手,建议一个 VNet 只配一个 Subnet,足够清晰且易于管理。
IPAM:前台小姐姐自动派号
这是最让人省心的功能,强烈建议开启!
在传统方式中,创建虚拟机时需要手动填写 IP 地址,很容易出错导致冲突。开启 IPAM(IP 地址管理)后,流程变成这样:
- 创建虚拟机时,在网络配置中将 IPv4 地址栏留空。
- PVE 会自动从关联的 Subnet 地址池中挑选一个未被使用的 IP。
- 系统会自动记录这个 IP 分配给了哪台虚拟机。
- 删除虚拟机时,IP 地址会被自动回收。
IPAM 有三种工作模式:
- Disabled:不使用 IPAM,完全手动配置(容易出错)。
- PVE:使用 PVE 内置的 IPAM 系统,推荐新手选择这个。
- External:对接外部 IPAM 系统(如 phpIPAM),属于企业级用法。
新手操作:创建 Subnet 时,直接在 IPAM 下拉菜单选择“PVE”。之后创建虚拟机时,网络选择 SDN 对应的 VNet,IP 配置选择“自动获取”,一切就搞定了。
VNet Firewall:这层楼的“门禁系统”
传统防火墙的规则通常基于物理网卡(例如控制 vmbr0 的进出流量)。而 SDN 的 VNet Firewall 粒度更细——它直接作用在 VNet 层面。
它能做什么?
- 控制同一 VNet(如研发部)内虚拟机之间的访问,你可以允许或禁止特定机器互访。
- 禁止一个 VNet(研发部)访问另一个 VNet(财务部)。
- 只允许带有特定标签的虚拟机开放特定端口(例如,只允许标记为“Web服务器”的机器开放 80/443 端口)。
它比传统防火墙强在哪里?
- 策略跟随 VNet:规则在集群内自动同步,无需在每个节点上单独配置。
- 配置可视化:通过 Web 界面点选即可完成配置,无需手动编写复杂的
iptables 规则。
注意:VNet Firewall 和 PVE 节点的本地防火墙是两套独立的系统。建议只启用其中一套(推荐 VNet Firewall),避免规则冲突,让排查问题变得更复杂。
工作流程:一张图看懂它们如何协同
假设你按以下结构创建了 SDN 网络:
Zone(VLAN类型,使用物理网卡vmbr1)
└── VNet “研发部”(ID 10,对应VLAN 10)
└── Subnet 192.168.10.0/24
├── 网关:192.168.10.1
├── IPAM:PVE(自动分配)
└── Firewall规则:禁止访问财务部网络
├── VM1:自动获得192.168.10.10
├── VM2:自动获得192.168.10.11
└── VM3:手动指定192.168.10.100
└── VNet “财务部”(ID 20,对应VLAN 20)
└── Subnet 192.168.20.0/24
└── ...
整个工作流程可以概括为:
- Zone 定基调:决定网络使用 VLAN 模式,并通过
vmbr1 物理网卡上行。
- VNet 划圈子:在 Zone 内创建独立的“研发部”(VLAN 10)和“财务部”(VLAN 20)。
- Subnet 分IP:为每个 VNet 划分 IP 地址段(192.168.10.x/20.x)。
- IPAM 自动派号:VM1、VM2 启动时自动获取 IP,VM3 使用固定 IP。
- Firewall 守门:根据规则,“研发部”的虚拟机无法访问“财务部”的网络。
新手上手三步走
第一步:创建 Zone(盖楼)
路径:数据中心 -> SDN -> Zones -> 创建
- 类型:选择
VLAN
- 节点和物理接口:选择你拥有上行链路的节点和网桥(例如
vmbr1)
第二步:创建 VNet 和 Subnet(分层+分号)
路径:数据中心 -> SDN -> VNets -> 创建
- Zone:选择你刚创建的 Zone。
- VNet ID:填写一个数字标识,例如
10。
- 创建完成后,点击这个 VNet 进入详情页,添加
Subnet。填写网段(如 192.168.10.0/24),配置网关和 DNS,最关键的是将 IPAM 设置为 PVE。
第三步:创建虚拟机时使用 SDN 网络
在创建虚拟机的“网络”配置环节:
- 桥接:选择你刚创建的 VNet(例如
vnet10)。
- IPv4/CIDR:选择
Static,但将地址输入框留空。
- 启动虚拟机后,查看其“摘要”页面,你会发现系统已经自动为其分配了 IP 地址。
避坑指南(来自实践的经验)
🚨 坑1:虚拟机连接了 VNet 但获取不到 IP
- 检查 Subnet 配置中的 IPAM 是否已启用(并选择 PVE)。
- 检查 Subnet 的网关地址是否已正确配置。
- 如果 Zone 是 VLAN 类型,请确认连接 PVE 节点的物理交换机端口是否已配置为 Trunk 模式,并允许相应的 VLAN 通过。
🚨 坑2:两个不同 VNet 下的虚拟机无法互相 Ping 通
- 这是正常现象!不同 VNet 之间默认就是隔离的。
- 如果需要互通,你有几个选择:配置 VNet 之间的 Peering;在某个 VNet 中部署一个软路由器做转发;或者给虚拟机配置多张网卡,分别接入不同的 VNet。
🚨 坑3:启用 VNet Firewall 后所有网络都断了
- VNet Firewall 的默认策略可能是“拒绝所有”。你需要添加明确的允许规则。
- 在排查网络问题时,可以暂时关闭 VNet Firewall 功能,以判断问题是否由防火墙规则引起。
🚨 坑4:出现 IP 地址冲突
- 如果你手动为虚拟机指定了一个 IP,但这个 IP 没有在 IPAM 的管理范围内,PVE 可能会在下次分配时将这个 IP 再分配给其他虚拟机。
- 建议:在同一个 Subnet 下,要么全部使用 IPAM 自动分配,要么全部手动管理并做好记录,尽量避免混用。
总结
用一句话来概括:Zone 是地基,VNet 是房间,Subnet 是门牌,IPAM 是前台,Firewall 是保安。
按照这个逻辑顺序进行配置,即使是新手也能逐步掌握 PVE SDN 的核心用法。如果在配置过程中遇到问题,可以多查看 PVE 节点上 /etc/network/interfaces.d/sdn 这个目录下的文件,里面记录了 SDN 模块生成的实际网络配置,是排查问题的重要依据。
希望这篇指南能帮助你顺利搭建和管理 PVE 的软件定义网络。对于更复杂的网络场景和深入的防火墙策略,你可以在云栈社区找到更多相关的讨论和实战案例。