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,現在你應該明白它的作用了!