第4章:OVS基本操作:ovs-vsctl命令详解、创建/删除网桥、添加/删除端口
好,咱们进入正题。这一章我带你亲手操作OVS,把那些最核心的命令玩熟。说实话,很多新手一上来就被OVS的各种命令搞晕了,其实没那么复杂。你只要掌握几个关键操作,就能搞定90%的日常工作了。
4.1 ovs-vsctl命令概览
ovs-vsctl 是OVS的瑞士军刀。它负责管理OVS的数据库,说白了就是控制OVS的配置。我习惯把它理解为「OVS的遥控器」——你想让OVS做什么,就用它来发指令。
它的基本语法很简单:
ovs-vsctl [选项] 命令 [参数]
常用的选项就几个:
--db:指定数据库地址,默认连本机--timeout:超时时间,我一般设30秒-v:显示详细信息,调试时很有用
ovs-vsctl show 看看当前状态。这就像开车前先看仪表盘,能避免很多低级错误。
4.2 创建和删除网桥
网桥是OVS的核心概念。你可以把它想象成一个虚拟的交换机,所有流量都经过它转发。
4.2.1 创建网桥
创建网桥的命令就一行:
ovs-vsctl add-br br0
这条命令会创建一个名为 br0 的网桥。我在项目中遇到过一个问题:创建网桥后,系统会自动生成一个同名的虚拟接口。这个接口默认是UP状态的,但如果你没配IP,它其实是个「哑巴」——能收发包,但没法路由。
创建多个网桥也很简单:
ovs-vsctl add-br br-int
ovs-vsctl add-br br-tun
ovs-vsctl add-br br-ex
嗯,这里要注意:网桥名字不要用特殊字符,最好只用字母、数字和下划线。我曾经见过有人用中文命名,结果脚本跑崩了……
4.2.2 查看网桥信息
创建完后,怎么确认它存在?用这个:
ovs-vsctl list-br
它会列出所有网桥的名字。想看详细信息,就用:
ovs-vsctl show
这个命令的输出很直观,会显示每个网桥的端口、状态等信息。我每次排查网络问题,第一件事就是跑这个命令。
4.2.3 删除网桥
删除网桥更简单:
ovs-vsctl del-br br0
但我要提醒你:删除网桥会同时删除它上面的所有端口和配置。这个操作不可逆!我曾经在测试环境里手滑删错了网桥,结果整个虚拟网络都瘫痪了……从那以后,我每次删网桥前都会先确认三遍。
4.3 添加和删除端口
网桥建好了,接下来就是往上面插「网线」——也就是添加端口。端口是OVS和外界通信的通道。
4.3.1 添加物理端口
把物理网卡加到网桥上,命令是这样的:
ovs-vsctl add-port br0 eth0
这条命令会把 eth0 这个物理网卡绑定到 br0 上。注意:一旦绑定,eth0 原有的IP配置就失效了。你得把IP配到网桥接口上。
我刚开始做OpenStack时,就踩过这个坑:把物理网卡加到网桥后,发现SSH连不上服务器了。后来才明白,IP得配到 br0 上,而不是 eth0。
4.3.2 添加虚拟端口
除了物理端口,OVS还支持多种虚拟端口。最常用的是 internal 类型:
ovs-vsctl add-port br0 vport0 -- set Interface vport0 type=internal
这条命令创建了一个名为 vport0 的内部端口。它看起来像个虚拟网卡,可以配IP、可以抓包。在Neutron里,很多网络设备都是用这种方式实现的。
还有一种常见的虚拟端口是 patch 端口,用于连接两个网桥:
ovs-vsctl add-port br-int patch-tun -- set Interface patch-tun type=patch options:peer=patch-int
ovs-vsctl add-port br-tun patch-int -- set Interface patch-int type=patch options:peer=patch-tun
你看,这两个端口互相指向对方,就形成了一个通道。Neutron的集成网桥和隧道网桥就是这么连起来的。
4.3.3 查看端口信息
想知道网桥上有哪些端口?用这个:
ovs-vsctl list-ports br0
想看更详细的信息,比如端口类型、状态、统计信息:
ovs-vsctl list interface vport0
这个命令会输出一大堆参数。我一般重点关注 type、ofport 和 statistics 这几个字段。
4.3.4 删除端口
删除端口用这个:
ovs-vsctl del-port br0 eth0
或者只指定端口名,不指定网桥:
ovs-vsctl del-port eth0
第二种写法会自动找到端口所在的网桥并删除。我个人习惯用第一种,更明确,不容易出错。
4.4 实战:搭建一个简单的OVS网络
光说不练假把式。咱们来搭一个简单的环境,把刚才学的都用上。
假设我们要创建一个网桥,上面挂一个物理网卡和一个内部端口:
# 1. 创建网桥
ovs-vsctl add-br br-demo
# 2. 添加物理端口
ovs-vsctl add-port br-demo eth1
# 3. 添加内部端口
ovs-vsctl add-port br-demo vport-demo -- set Interface vport-demo type=internal
# 4. 给内部端口配IP
ip addr add 192.168.100.1/24 dev vport-demo
ip link set vport-demo up
# 5. 查看最终状态
ovs-vsctl show
跑完这些命令,你就有了一个可以工作的OVS网桥。物理网卡 eth1 负责和外部通信,内部端口 vport-demo 可以给虚拟机或容器用。
你想想看,这个结构是不是和Neutron里的集成网桥很像?其实就是同一个思路。
4.5 常用命令速查表
为了方便你日常使用,我把常用命令整理成了表格:
| 操作 | 命令 | 说明 |
|---|---|---|
| 创建网桥 | ovs-vsctl add-br <网桥名> |
创建一个OVS网桥 |
| 删除网桥 | ovs-vsctl del-br <网桥名> |
删除网桥及其所有端口 |
| 列出网桥 | ovs-vsctl list-br |
显示所有网桥名称 |
| 添加端口 | ovs-vsctl add-port <网桥> <端口> |
添加物理或虚拟端口 |
| 删除端口 | ovs-vsctl del-port <网桥> <端口> |
从网桥移除端口 |
| 列出端口 | ovs-vsctl list-ports <网桥> |
显示网桥上的所有端口 |
| 查看接口详情 | ovs-vsctl list interface <端口> |
显示端口的详细配置和状态 |
| 查看整体状态 | ovs-vsctl show |
显示所有网桥和端口的概要信息 |
核心要点:
ovs-vsctl是OVS的配置入口,必须熟练掌握- 网桥是虚拟交换机,端口是它的接口
- 物理端口和虚拟端口用法不同,但管理方式一样
- 操作前先
show一下,养成好习惯
好了,这一章的内容就到这里。你把这些命令敲一遍,基本就能上手操作OVS了。下一章咱们会深入OVS的流表,那才是真正好玩的地方。