理解 Open vSwitch (OVS)

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,现在你应该明白它的作用了!

你可能感兴趣的:(云原生)