4、创建第一个OVS网桥:使用ovs-vsctl创建网桥、添加物理端口、查看网桥状态、持久化配置

好,咱们正式开始动手了。

前面几章我们把OVS的安装、概念都过了一遍。说实话,光看不练是学不会的。今天我们就来创建第一个OVS网桥。这是所有后续实验的基础,你想想看,没有网桥,虚拟机怎么跟外界通信?

4.1 用ovs-vsctl创建网桥

OVS最常用的管理工具就是ovs-vsctl。我个人习惯把它叫做「OVS的瑞士军刀」。创建网桥的命令非常简单:

ovs-vsctl add-br ovs-br0

就这么一行,一个名为ovs-br0的网桥就诞生了。嗯,这里要注意:网桥名字不要用特殊字符,最好只用字母、数字和短横线。我在项目中遇到过有人用下划线,结果某些脚本解析出了问题,排查了半天。

创建完之后,你可以用ip link看看:

ip link show ovs-br0

你会发现系统里多了一个虚拟网络设备。它看起来像一块网卡,但实际上是OVS的网桥接口。

小提示: 创建网桥时,OVS会自动创建一个同名的内部端口(internal port)。这个端口可以用来给网桥配置IP地址,方便宿主机和虚拟机通信。

4.2 添加物理端口到网桥

网桥建好了,但它是空的。我们需要把物理网卡加进去。假设你的宿主机有一块物理网卡叫eth0,把它加到网桥里:

ovs-vsctl add-port ovs-br0 eth0

就这么简单?对,就这么简单。但这里有个坑——加完端口后,你原来的网络连接可能会断掉。为什么?因为eth0原本是独立工作的,现在它变成了网桥的一个端口,原来的IP地址就没了。

我曾经在生产环境里第一次操作时,忘了这回事。结果一敲命令,SSH直接断开,机房的人差点被我折腾死。所以,建议你先通过带外管理口或者控制台操作,或者提前把IP配置到网桥的internal端口上。

正确的做法是:

# 先把IP从物理网卡上移除
ip addr del 192.168.1.100/24 dev eth0

# 把物理网卡加到网桥
ovs-vsctl add-port ovs-br0 eth0

# 给网桥配置IP
ip addr add 192.168.1.100/24 dev ovs-br0
ip link set ovs-br0 up

这样网络就不会中断了。你想想看,是不是这个理?

4.3 查看网桥状态

网桥建好了,端口也加了。怎么确认一切正常?用ovs-vsctl show

ovs-vsctl show

输出大概长这样:

a1b2c3d4-e5f6-7890-abcd-ef1234567890
    Bridge "ovs-br0"
        Port "eth0"
            Interface "eth0"
        Port "ovs-br0"
            Interface "ovs-br0"
                type: internal
    ovs_version: "2.17.0"

看到没?ovs-br0下面有两个端口:一个是物理端口eth0,一个是内部端口ovs-br0。这说明网桥正常工作。

如果你想看更详细的信息,比如流表、端口统计,可以用:

ovs-ofctl show ovs-br0

这个命令会显示OpenFlow层面的信息。比如每个端口的编号、状态、速率等。我在排查性能问题时,经常用这个命令看端口有没有丢包。

重点: ovs-vsctl show 看的是OVS的配置和状态概览,ovs-ofctl show 看的是OpenFlow协议层面的详细信息。两个命令各有用途。

4.4 持久化配置

好,现在网桥跑起来了。但有个问题——重启之后还在吗?

这取决于你的系统配置。OVS的配置默认是保存在内存里的,重启后需要重新加载。不过别担心,OVS提供了持久化机制。

在大多数Linux发行版中,OVS的配置会自动保存到/etc/openvswitch/conf.db。你只需要确保OVS服务开机自启:

systemctl enable openvswitch
systemctl start openvswitch

重启后,OVS会自动从conf.db里恢复所有网桥和端口配置。说白了,你只要做一次配置,后面就不用操心了。

但如果你用的是容器或者某些特殊环境,可能需要手动导出配置:

ovs-vsctl --export ovs-br0 > ovs-br0.conf

恢复时:

ovs-vsctl --import < ovs-br0.conf

我个人习惯在每次修改完OVS配置后,都手动备份一下conf.db

cp /etc/openvswitch/conf.db /etc/openvswitch/conf.db.backup.$(date +%Y%m%d)

这样万一搞砸了,还能快速恢复。我曾经有一次误删了网桥,就是靠这个备份救回来的。

4.5 完整操作示例

最后,我给你一个完整的操作流程,你可以照着敲一遍:

# 1. 创建网桥
ovs-vsctl add-br ovs-br0

# 2. 查看网桥状态(刚创建,没有端口)
ovs-vsctl show

# 3. 添加物理端口(假设eth0空闲)
ovs-vsctl add-port ovs-br0 eth0

# 4. 再次查看状态
ovs-vsctl show

# 5. 查看OpenFlow端口信息
ovs-ofctl show ovs-br0

# 6. 配置网桥IP(可选)
ip addr add 192.168.1.100/24 dev ovs-br0
ip link set ovs-br0 up

# 7. 持久化配置(系统自动保存,但手动备份更安全)
cp /etc/openvswitch/conf.db /etc/openvswitch/conf.db.backup

做完这些,你的第一个OVS网桥就正式上线了。下一章我们会在这个网桥上接入KVM虚拟机,让它们真正跑起来。

警告: 添加物理端口时,如果该网卡正在使用(比如有IP地址),网络会中断。请务必提前规划好操作步骤,或者通过带外管理进行操作。

好了,今天就到这里。记住,动手才是王道。光看文档不敲命令,永远学不会OVS。