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 openvswitc

Bridge 操作

新增網橋

ovs-vsctl add-br br0

查詢網橋列表

ovs-vsctl list-br

刪除網橋

ovs-vsctl del-br br0

Port 操作

  • Normal Port

    # 將物理網絡卡eth0新增到網橋br0上
    ovs-vsctl add-port br0 eth0
    # 移除網橋br0上的Port
    ovs-vsctl del-port br0 eth0
  • Internal Port

    # 新增Internal Port 
    ovs-vsctl add-port br0 p0 -- set Interface p0 type=internal
    # 把網絡卡p0啟動並配置IP
    ip link set p0 up
    ip addr add 192.168.0.1/24 dev p0
    # 設定VLAN tag
    ovs-vsctl set Port p0 tag=100
    # 移除p0上面的VLAN tag配置
    ovs-vsctl remove Port p0 tag 100
    # 設定p0允許通過的VLAN tag
    ovs-vsctl set Port p0 trunks=100,200
    # 移除p0允許通過的的VLAN tag配置
    ovs-vsctl remove Port p0 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
    ovs-vsctl add-port br-tun vxlan-vx02- -- set Interface vxlan-vx02 type=vxlan options:remote_ip=10.1.7.23
    
    #主機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
    ovs-vsctl add-port br-tun vxlan-vx02- -- set Interface vxlan-vx02 type=vxlan options:remote_ip=10.1.7.23
    
    #主機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
    ovs-vsctl add-port br-tun vxlan-vx02- -- set Interface vxlan-vx02 type=vxlan options:remote_ip=10.1.7.22
  • 其他基本操作

    # 設定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網路。

本文首發 Open vSwitch 入門實踐(1) 轉載請註明該文章連結。