Open vSwitch(简称 OVS)是一个开源的 虚拟交换机,主要用于 虚拟化环境(如 KVM、Xen、Docker)和 软件定义网络(SDN)。它类似于物理交换机,但在软件层面实现,可以灵活地管理虚拟网络流量。
1. Open vSwitch 的核心概念
(1) 虚拟交换机(vSwitch)
-
物理交换机用于连接物理设备(如服务器、电脑),而 OVS 是软件实现的交换机,用于连接虚拟机(VM)、容器和物理网络。
-
它支持 VLAN、VXLAN、STP、流量控制 等高级网络功能。
(2) 主要组件
组件 | 说明 |
---|---|
ovs-vswitchd | OVS 的核心守护进程,负责数据包转发和流表管理。 |
ovsdb-server | 存储 OVS 的配置(如端口、网桥、流表规则)。 |
ovs-ofctl | 用于管理 OpenFlow 流表的命令行工具。 |
ovs-vsctl | 用于配置 OVS 网桥、端口的命令行工具。 |
(3) 关键术语
术语 | 说明 |
---|---|
Bridge (网桥) | 类似于物理交换机,用于连接多个端口(Port)。 |
Port (端口) | 可以是物理网卡(如 eth0 )、虚拟接口(如 veth )或隧道(如 VXLAN )。 |
Flow Table (流表) | 决定数据包如何转发(类似路由表,但更灵活)。 |
OpenFlow | SDN 协议,允许控制器(如 OpenDaylight)动态管理 OVS。 |
2. OVS 的典型应用场景
(1) 虚拟化网络(KVM、Xen、Docker)
-
OVS 可以连接多个虚拟机(VM),并让它们像在同一个物理网络中一样通信。
-
示例:
# 创建一个 OVS 网桥,并添加物理网卡 eth0 ovs-vsctl add-br br0 ovs-vsctl add-port br0 eth0
这样,所有连接到
br0
的 VM 都可以通过eth0
访问外部网络。
(2) 云计算(OpenStack、Kubernetes)
-
OpenStack Neutron 使用 OVS 作为默认的虚拟网络后端。
-
Kubernetes 的 CNI 插件(如 OVN-Kubernetes)也依赖 OVS。
(3) SDN(软件定义网络)
-
OVS 支持 OpenFlow,可以被 SDN 控制器(如 OpenDaylight、ONOS)集中管理。
-
示例:
# 设置 OVS 由 OpenFlow 控制器管理 ovs-vsctl set-controller br0 tcp:192.168.1.100:6653
3. 如何管理 Open vSwitch?
(1) 查看 OVS 状态
ovs-vsctl show # 查看所有网桥和端口
输出示例:
Bridge "br0"Port "eth0"Interface "eth0"Port "br0"Interface "br0"type: internal
(2) 创建网桥并添加端口
ovs-vsctl add-br br0 # 创建网桥 br0
ovs-vsctl add-port br0 eth0 # 把 eth0 加入 br0
ovs-vsctl add-port br0 vnet1 # 把虚拟机接口 vnet1 加入 br0
(3) 查看流表(类似交换机 MAC 表)
ovs-ofctl dump-flows br0
输出示例:
NXST_FLOW reply (xid=0x4):cookie=0x0, duration=10.123s, table=0, n_packets=5, n_bytes=490, priority=100,ip,in_port=1 actions=output:2
-
这条规则表示:从
in_port=1
进入的 IP 数据包,会被转发到output=2
。
4. OVS vs Linux Bridge(传统网桥)
特性 | Open vSwitch | Linux Bridge |
---|---|---|
SDN 支持 | ✅ 支持 OpenFlow | ❌ 不支持 |
VXLAN/GRE 隧道 | ✅ 支持 | ❌ 需额外配置 |
云计算集成 | ✅ OpenStack/K8s 默认 | ❌ 较少使用 |
性能 | ⚡ 优化更好(DPDK 支持) | ⚡ 传统方式 |
配置复杂度 | ⚠️ 较复杂(适合高级网络) | ✅ 简单易用 |
5. 总结
-
Open vSwitch 是一个强大的虚拟交换机,适用于虚拟化、云计算和 SDN。
-
核心功能:
-
管理虚拟网络(VM、容器)。
-
支持 OpenFlow,可被 SDN 控制器管理。
-
提供 VLAN、VXLAN、流量控制等高级功能。
-
-
常用命令:
-
ovs-vsctl show
(查看配置) -
ovs-ofctl dump-flows br0
(查看流表) -
ovs-vsctl add-br/add-port
(管理网桥)
-
如果你在 OpenStack、Kubernetes 或 SDN 环境 中看到 OVS,现在你应该明白它的作用了!