作者:田逸(formyz)
最新发布的Proxmox VE(以下简称PVE) 8在Web管理后台集成了易于操作的SDN(软件定义网络)功能插件,其实质是对不同的PVE用户指定不同的网络,进行逻辑隔离,避免不同的用户设置相同的网络地址而产生冲突。例如用户A,给他指定地址段172.16.10.0/24,另外一个用户的地址段是172.16.20.0/24,如果这个用户A,误操作把它所管理的虚拟机设置成B用户所在网段的地址,是不会有效的,也不会对其他用户产生影响。
环境准备
SDN所包含的组件(软件包)主要有:SDN核心libpve-network-perl、DHCP IPAM(IP Address Manage)、FRRouting(开源的互联网路由协议)。如果你运行的PVE版本是7.X,请用下列指令进行软件包的安装。
|----------------------------------------------------------------------------------------------------------------------------|
| apt update
apt install libpve-network-perl
apt install dnsmasq
apt install frr-pythontools
|
bash
apt update
apt install libpve-network-perl
apt install dnsmasq
apt install frr-pythontools
在PVE 宿主机安装完软件包以后,还需要修改宿主机的网络配置。在宿主系统Debian命令行下,进入目录"/etc/network",将文本行"source /etc/network/interfaces.d/*"追加到网络配置文件"interfaces",注意别丢掉那个星号通配符。
在没有创建与SDN相关联的区域前,PVE 宿主系统的目录"/etc/network/interfaces.d"目录是空的。
验证网络隔离
为便于读者理解,先做个简单的规划。在单节点上两个资源池、创建两个组及用户,两个虚拟网络并将分别授权给已经创建好的用户组,接着创建两个虚拟机,使虚拟机属于不同的网络及资源组。以下操作,如无特别说明,则默认在PVE Web管理后台进行。
1 创建资源组
PVE数据中心级别,点击按钮菜单创建,输入易于辨识的文本对资源组进行命名,如下图所示。
在本案中,我创建了两个资源组"mypool"与"mypool1"。
2 创建群组
PVE数据中心级别,页面中间菜单栏选定"权限"之子菜单"群组",再单击页面顶部按钮"创建",输入文本对其命名,本案创建了两个群组,如下图所示。
3 创建用户
PVE数据中心级别,分别创建两个用户,用户formyz隶属于群组"mygrp",用户"sery"隶属于群组"serygrp",验证方式采用"Promox VE authentication server"(这种方式不需要在PVE宿主系统创建系统用户,简化了操作也降低了安全风险)。
4 创建 SDN 区域
SDN的区域就是虚拟网络隔离标识,PVE支持五种类型的隔离方式,它们是:Simple、VLAN、QinQ、VxLAN、EVPN。受条件限制,本案仅以创建Simple区域为例,来演示隔离效果。
PVE数据中心级别,选定页面中部菜单"SDN"子菜单"区域",再单击顶部按钮"创建",输入文本给区域命名(文本长度有限制),如果是集群,还可能需要选定物理节点,创建过程如下图所示。
依照上法创建好两个区域"simple01"与"tsimple"待用。
5 创建虚拟网络( VNET )
数据中心级别,选定SDN子菜单"Vnets",单击页面顶部菜单按钮"创建",输入文本为其进行命名,并选定所属区域"simple01",创建过程如下图所示。
选定已经创建好的虚拟网络(Vnet)"mvnet",点击页面右侧顶部菜单按钮"创建",创建子网(虚拟网段),输入网络地址及默认网关,并勾选"SNAT"(源地网络地址转换)如下图所示。
依照上法,为另一个区域"tsimple"创建子网"vnet01",其网络参数为"192.168.88.0/24,192.168.88.1".
确认无误后,鼠标选定菜单"SDN",再单击顶部按钮"应用",是设置生效。刷新PVE Web管理后台页面,在页面的左侧,显示刚创建好的两个区域,如果设置有错误,图标将以红色的叉显示,如下图所示。
选中区域"simple01",为其赋予组权限"mygrp",指定相应的角色,如下图所示。
同样的方法,将区域"tsimple"隶属于群组""
6 创建虚拟机
创建两个虚拟机,使其属于两个不同的资源组,并为其指定不同的桥接网卡(虚拟网卡)。
创建虚拟机"RRR",指定其属于资源池"mypool",如果不这里不指定,也可以在创建好虚拟机后,以成员的方式加入到资源组。
网络桥接下拉列表框选定前边步骤创建好的虚拟网络接口"mvnet",虚拟机使用网络地址"192.168.99.0/24".创建好虚拟机后,在其上安装操作系统Rocky 9,设置网络地址为"192.168.99.111",默认网关为"192.168.99.1",dns为"223.6.6.6",系统正常启动后,登录到该虚拟机所在的系统,用指令"ping 192.16.99.1"及"ping www.163.com"验证网络的正确性。
修改次虚拟机的IP地址,使其为PVE宿主机所在的网段地址,重启虚拟机网络服务,网络不可能用,达到网络隔离的目的。
继续创建另外一个虚拟机,使其隶属于资源组"mypool1"选定其网络桥接接口为虚拟网卡"vnet01",安装操作系统,并设定其IP地址为"192.168.88.111/24",默认网关为"192.168.88.1",DNS服务器为"223.6.6.6",正常启动该虚拟机,进入系统测试网络的连通性。
现在分属与两个资源组的虚拟机已经创建完毕,同时打开两个浏览器,分别以用户"formyz"和"sery"进行登录,查看PVE WEB管理后台,是否只显示各自的成员(虚拟机或存储)。
SSH远程登录两个虚拟机,用命令相互ping对方,或者ssh相互登录,验证网络连通的正确性。
SDN 的背后
PVE Web管理后台设置好SDN相关项且对其进行应用后,在PVE宿主系统Debian的目录"/etc/network/interface.d"生成文本文件"sdn",其内容大致如下。
Linux系统管理员应该对这个很熟悉吧!那就是网络地址转换。
需要注意的是,SDN Simple适合于单节点的PVE,如果是集群,建议使用VLAN方式,并需要交换机在功能上支持,起码能创建trunk。