4. OVS基本操作:ovs-vsctl命令、创建网桥、添加端口

好,咱们进入实战环节。前面聊了那么多OpenFlow的理论,现在终于要动手了。这一章,我带你熟悉OVS最核心的管理工具——ovs-vsctl。说白了,它就是OVS的“遥控器”,网桥怎么建、端口怎么加,全得靠它。

我个人习惯,刚接触一个新环境,第一件事就是先看看OVS的版本和状态。你可以在终端敲一下:

ovs-vsctl --version

如果能看到版本号,说明OVS已经装好了。嗯,这里要注意,不同版本的OVS,某些命令的细节可能略有差异,但核心操作基本一致。

4.1 ovs-vsctl 命令概览

ovs-vsctl 是OVS的配置管理工具。它负责管理OVS的数据库,也就是那个存着所有网桥、端口、流表配置的地方。你想想看,OVS本身是个数据转发引擎,而 ovs-vsctl 就是告诉它“你要长什么样”的指挥棒。

常用的子命令,我列了个表,方便你对照:

子命令 作用 示例
add-br 创建网桥 ovs-vsctl add-br br0
del-br 删除网桥 ovs-vsctl del-br br0
add-port 添加端口 ovs-vsctl add-port br0 eth0
del-port 删除端口 ovs-vsctl del-port br0 eth0
list 查看配置信息 ovs-vsctl list bridge
show 显示当前OVS拓扑 ovs-vsctl show
set 修改配置项 ovs-vsctl set bridge br0 stp_enable=true

我在项目中遇到过,有些新手喜欢用 ifconfig 去配网桥,结果发现流量不通。其实OVS的网桥必须用 ovs-vsctl 来创建,否则内核根本认不出来。

4.2 创建网桥

创建网桥,是搭建虚拟交换网络的第一步。命令非常简单:

ovs-vsctl add-br br0

这条命令执行后,系统里就多了一个叫 br0 的虚拟网桥。你可以用 ovs-vsctl show 来确认:

ovs-vsctl show

输出大概长这样:

a1b2c3d4-e5f6-7890-abcd-ef1234567890
    Bridge "br0"
        Port "br0"
            Interface "br0"
                type: internal

看到了吗?网桥创建后,会自动生成一个同名的内部端口。这个端口的作用,就是让宿主机能和网桥通信。说白了,你可以在宿主机上给 br0 配个IP,然后虚拟机就能通过它访问外部网络了。

小技巧: 创建网桥时,可以指定它的OpenFlow控制器。比如 ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev,这样网桥就会运行在用户态模式下。不过,初学者先别急着玩这些,先把基础操作练熟。

4.3 添加端口

网桥建好了,但它是空的,没法转发数据。我们需要给它添加端口。端口可以是物理网卡、虚拟网卡(比如veth pair),也可以是OVS内部端口。

添加物理网卡作为端口:

ovs-vsctl add-port br0 eth0

这条命令把物理网卡 eth0 挂到了 br0 上。执行后,eth0 就不再是独立的网卡了,它变成了网桥的一个端口。所有进出 eth0 的流量,都会经过OVS的处理。

添加内部端口:

ovs-vsctl add-port br0 vport1 -- set interface vport1 type=internal

内部端口,你可以把它理解成OVS自己创建的虚拟网卡。它没有对应的物理硬件,但宿主机能看到它,也能给它配IP。我在做多租户隔离时,经常用内部端口来模拟不同的租户网络。

注意: 添加物理网卡作为端口时,该网卡上原有的IP配置会失效。因为网卡被OVS接管了,IP需要配置到网桥上。我曾经有一次忘了这茬,配完端口发现SSH断了,差点以为机器挂了。后来赶紧从控制台登录,把IP挪到网桥上才恢复。

4.4 查看与验证

操作完了,总得看看效果。我最常用的验证命令是 ovs-vsctl showovs-ofctl show br0

ovs-vsctl show 显示的是OVS的数据库配置,包括网桥、端口、控制器等信息。而 ovs-ofctl show br0 显示的是OpenFlow层面的信息,比如端口号、端口状态等。

举个例子:

ovs-ofctl show br0

输出:

OFPT_FEATURES_REPLY (xid=0x2): dpid:0000000000000001
n_tables:254, n_buffers:256
capabilities: FLOW_STATS TABLE_STATS PORT_STATS QUEUE_STATS ARP_MATCH_IP
actions: output enqueue set_vlan_vid set_vlan_pcp strip_vlan mod_dl_src mod_dl_dst mod_nw_src mod_nw_dst mod_nw_tos mod_tp_src mod_tp_dst
 1(br0): addr:aa:bb:cc:dd:ee:ff
     config:     0
     state:      0
     speed: 0 Mbps now, 0 Mbps max
 2(eth0): addr:12:34:56:78:9a:bc
     config:     0
     state:      0
     current:    1GB-FD AUTO_NEG
     speed: 1000 Mbps now, 1000 Mbps max
 3(vport1): addr:de:ad:be:ef:00:01
     config:     0
     state:      0
     speed: 0 Mbps now, 0 Mbps max

你看,端口1是网桥自己,端口2是物理网卡,端口3是我们刚加的内部端口。每个端口都有一个唯一的OpenFlow端口号,这个号在写流表时特别重要。

4.5 删除与清理

有创建就有删除。删除端口和网桥的命令也很直接:

ovs-vsctl del-port br0 vport1
ovs-vsctl del-br br0

删除网桥时,它上面的所有端口也会被自动删除。但要注意,如果端口是物理网卡,删除后它会恢复成普通网卡,但IP配置不会自动恢复。我曾经在测试环境里删了网桥,结果发现物理网卡变成了未配置状态,还得手动配IP。

核心要点:
  • ovs-vsctl 是OVS的配置管理工具,负责网桥和端口的增删改查。
  • 创建网桥用 add-br,添加端口用 add-port
  • 物理网卡加入网桥后,IP配置会失效,需要配置到网桥上。
  • ovs-vsctl showovs-ofctl show 验证配置是否正确。

好了,这一章的内容就这些。你可以在自己的实验环境里多敲几遍,把创建网桥、添加端口、查看状态这些操作练熟。下一章,我们会正式进入流表的世界,到时候这些端口号就会派上大用场了。