Open vSwitch 入門實踐(1)簡介

語言: CN / TW / HK

OVS簡介

Open vSwitch 是什麼?

Open vSwitch(以下簡稱OVS)是一個用C語言開發的多層虛擬交換機,使用Apcahe 2開源許可證,現如今基本上已經成為了開源SDN(軟件定義網絡)基礎設施層的事實標準。

OVS支持哪些 功能

  • 支持NetFlow、sFlow(R)、IPFIX、SPAN、RSPAN和GRE隧道鏡像等多種流量監控協議
  • 支持LACP (IEEE 802.1AX-2008)
  • 支持標準802.1Q VLAN協議,允許端口配置trunk模式
  • 支持組播
  • 支持BFD和802.1ag鏈路監控
  • 支持STP(IEEE 802.1D-1998)和RSTP(IEEE 802.1D-2004)
  • 支持細粒度的QoS(服務質量)配置
  • 支持HFSC qdisc
  • 支持接管每一個虛擬機的流量
  • 支持基於源MAC的負載均衡、主備模式和L4哈希的端口綁帶
  • 支持OpenFlow協議(包含了很多對虛擬化的擴展)
  • 支持IPv6
  • 支持多種隧道協議(GRE、VXLAN、STT、Geneve和IPsec)
  • 支持C和Python的遠程配置協議
  • 支持內核和用户空間的轉發引擎選項
  • 具有流緩存引擎的多表轉發管道
  • 轉發層抽象以簡化向新軟件和硬件平台的移植

OVS的術語解釋

Bridge

中文名稱 網橋 ,一個Bridge代表一個以太網交換機(Switch),一台主機中可以創建一個或多個Bridge,Bridge可以根據一定的規則,把某一個端口接收到的數據報文轉發到另一個或多個端口上,也可以修改或者丟棄數據報文。

Port

中文名稱 端口 ,需要注意的是它和TCP裏面的端口不是同樣的概念,它更像是物理交換機上面的插口,可以接水晶頭的那種。Port隸屬於Bridge,必須先添加了Bridge才能在Bridge上添加Port。Port有以下幾種類型:

  • Normal

    用户可以把操作系統中已有的網卡添加到Open vSwicth上,Open vSwitct會自動生成一個同名的Port開處理這張網卡進和出的數據報文。

    不過需要注意的是這種方式添加的Port不支持分配IP地址,如果之前網卡上配置的有IP,掛載到OVS上面之後將不可訪問。此類型的Port常用於VLAN模式的多台物理主機相連的那個口,交換機一端屬於Trunk模式。

  • Internal

    當Port的類型是Internal時,OVS會自動創建一個虛擬網卡(Interface),此端口收到的數據報文都會轉發給這塊網卡,從這塊網卡發出的數據報文也會通過Port交給OVS處理。當OVS創建一個新的網橋時,會自動創建一個與網橋同名的Internal Port,同時也會創建一個與網橋同名的Interface,因此可以通過ip命令在操作系統中查看到這張虛擬網卡,但是狀態是down的。

  • Patch

    Patch Port和veth pair功能相同,總是成雙成對的出現,在其中一端收到的數據報文會被轉發到另一個Patch Port上,就像是一根網線一樣。Patch Port常用於連接兩個Bridge,這樣兩個網橋就和一個網橋一樣了。

  • Tunnel

    OVS 支持 GRE、VXLAN、STT、Geneve和IPsec隧道協議,這些隧道協議就是overlay網絡的基礎協議,通過對物理網絡做的一層封裝和擴展,解決了二層網絡數量不足的問題,最大限度的減少對底層物理網絡拓撲的依賴性,同時也最大限度的增加了對網絡的控制。

Interface

(iface/接口)接口是OVS與操作系統交換數據報文的組件,一個接口即是操作系統上的一塊網卡,這個網卡可能是OVS生成的虛擬網卡,也有可能是掛載在OVS上的物理網卡,操作系統上的虛擬網卡(TUN/TAP)也可以被掛載在OVS上。

Controller

OpenFlow控制器,OVS可以接收一個或者多個OpenFlow控制器的管理,功能主要是下發流表,控制轉發規則。

Flow

流表是OVS進行數據轉發的核心功能,定義了端口之間轉發數據報文的規則,一條流表規則主要分為匹配和動作兩部分,匹配部分決定哪些數據報文需要被處理,動作決定了匹配到的數據報文該如何處理。

OVS常用操作

安裝

yum install openvswitch
systemctl enable openvswitch
systemctl start openvswitch

如果當前軟件源中沒有openvswitch,可以通過 阿里雲官方鏡像站 下載和操作系統版本對應的rpm包到本地再安裝。 示例命令: yum localinstall openvswitch-2.9.0-3.el7.x86_64.rpm

Bridge 操作

添加網橋

ovs-vsctl add-br br-int

查詢網橋列表

ovs-vsctl list-br

刪除網橋

ovs-vsctl del-br br-int

Port 操作

  • Normal Port
# 將物理網卡eth0添加到網橋br-int上
ovs-vsctl add-port br-int eth0
# 移除網橋br-int上的Port
ovs-vsctl del-port br-int eth0
  • Internal Port
# 添加Internal Port 
ovs-vsctl add-port br-int vnet0 -- set Interface vnet0 type=internal
# 把網卡vnet0啟動並配置IP
ip link set vnet0 up
ip addr add 192.168.0.1/24 dev vnet0
# 設置VLAN tag
ovs-vsctl set Port vnet0 tag=100
# 移除vnet0上面的VLAN tag配置
ovs-vsctl remove Port vnet0 tag 100
# 設置vnet0允許通過的VLAN tag
ovs-vsctl set Port vnet0 trunks=100,200
# 移除vnet0允許通過的的VLAN tag配置
ovs-vsctl remove Port vnet0 trunks 100,200
  • Patch Port
ovs-vsctl add-br br0
ovs-vsctl add-br br1
ovs-vsctl \
-- add-port br0 patch0 -- set interface patch0 type=patch options:peer=patch1 \
-- add-port br1 patch1 -- set interface patch1 type=patch options:peer=patch0
  • Tunnel Port
#主機10.1.7.21上
ovs-vsctl add-br br-tun
ovs-vsctl add-port br-tun vxlan-vx01 -- set Interface vxlan-vx01 type=vxlan options:remote_ip=10.1.7.22 options:key=flow
ovs-vsctl add-port br-tun vxlan-vx02 -- set Interface vxlan-vx02 type=vxlan options:remote_ip=10.1.7.23 options:key=flow

#主機10.1.7.22上
ovs-vsctl add-br br-tun
ovs-vsctl add-port br-tun vxlan-vx01 -- set Interface vxlan-vx01 type=vxlan options:remote_ip=10.1.7.21 options:key=flow
ovs-vsctl add-port br-tun vxlan-vx02 -- set Interface vxlan-vx02 type=vxlan options:remote_ip=10.1.7.23 options:key=flow

#主機10.1.7.23上
ovs-vsctl add-br br-tun
ovs-vsctl add-port br-tun vxlan-vx01 -- set Interface vxlan-vx01 type=vxlan options:remote_ip=10.1.7.21 options:key=flow
ovs-vsctl add-port br-tun vxlan-vx02 -- set Interface vxlan-vx02 type=vxlan options:remote_ip=10.1.7.22 options:key=flow
  • 其他基本操作
# 設置VLAN mode
ovs-vsctl set port <port name> VLAN_mode=trunk|access|native-tagged|native-untagged
# 設置VLAN tag
ovs-vsctl set port <port name> tag=<1-4095>
# 設置VLAN trunk
ovs-vsctl set port <port name> trunk=100,200
# 移除Port的屬性
ovs-vsctl remove port <port name> <property name> <property value>
# 查看Port的屬性
ovs-vsctl list interface <port name>

接下來我們將使用OVS來實現單機和多台物理服務器下的虛擬VLAN網絡。

本文首發我的微信公眾號:我在對面的角落