OpenvSwitch完全使用手冊


本文主要參考Overview of functionality and components以及Frequently Asked Questions以及結合自己的理解。

1 什么是OpenvSwitch

OpenvSwitch,簡稱OVS是一個虛擬交換軟件,主要用於虛擬機VM環境,作為一個虛擬交換機,支持Xen/XenServer, KVM, and VirtualBox多種虛擬化技術。

在這種某一台機器的虛擬化的環境中,一個虛擬交換機(vswitch)主要有兩個作用:傳遞虛擬機VM之間的流量,以及實現VM和外界網絡的通信。

整個OVS代碼用C寫的。目前有以下功能:

  • Standard 802.1Q VLAN model with trunk and access ports
  • NIC bonding with or without LACP on upstream switch
  • NetFlow, sFlow(R), and mirroring for increased visibility
  • QoS (Quality of Service) configuration, plus policing
  • GRE, GRE over IPSEC, VXLAN, and LISP tunneling
  • 802.1ag connectivity fault management
  • OpenFlow 1.0 plus numerous extensions
  • Transactional configuration database with C and Python bindings
  • High-performance forwarding using a Linux kernel module

 

2 OpenvSwitch的組成

  • ovs-vswitchd:守護程序,實現交換功能,和Linux內核兼容模塊一起,實現基於流的交換flow-based switching。
  • ovsdb-server:輕量級的數據庫服務,主要保存了整個OVS的配置信息,包括接口啊,交換內容,VLAN啊等等。ovs-vswitchd會根據數據庫中的配置信息工作。
  • ovs-dpctl:一個工具,用來配置交換機內核模塊,可以控制轉發規則。
  • ovs-vsctl:主要是獲取或者更改ovs-vswitchd的配置信息,此工具操作的時候會更新ovsdb-server中的數據庫。
  • ovs-appctl:主要是向OVS守護進程發送命令的,一般用不上。
  • ovsdbmonitor:GUI工具來顯示ovsdb-server中數據信息。
  • ovs-controller:一個簡單的OpenFlow控制器
  • ovs-ofctl:用來控制OVS作為OpenFlow交換機工作時候的流表內容。

3 OpenvSwitch和其他vswitch

這里其他的vswitch,包括VMware vNetwork distributed switch以及思科的Cisco Nexus 1000V。

VMware vNetwork distributed switch以及思科的Cisco Nexus 1000V這種虛擬交換機提供的是一個集中式的控制方式,。而OVS則是一個獨立的vswitch,他運行在每個實現虛擬化的物理機器上,並提供遠程管理。OVS提供了兩種在虛擬化環境中遠程管理的協議:一個是OpenFlow,通過流表來管理交換機的行為,一個是OVSDB management protocol,用來暴露sietch的port狀態。

 

(二)-概念及工作流程1

1 vswitch、Bridge、Datapath

 

在網絡中,交換機和橋都是同一個概念,OVS實現了一個虛擬機的以太交換機,換句話說,OVS也就是實現了一個以太橋。那么,在OVS中,給一個交換機,或者說一個橋,用了一個專業的名詞,叫做DataPath!

要了解,OVS如何工作,首先需要知道橋的概念。

網橋也叫做橋接器,連接兩個局域網的設備,網橋工作在數據鏈路層,將兩個LAN連接,根據MAC地址來轉發幀,可以看成一個“低層的路由器”(路由器工作在網絡層,根據IP地質進行轉發)。

 

1.1 網橋的工作原理

網橋處理包遵循以下幾條規則:

  • 在一個接口上接收到的包不會再往那個接口上發送此包。
  • 每個接收到的包都要學習其源MAC地址。
  • 如果數據包是多播或者廣播包(通過2層MAC地址確定)則要向接收端口以外的所有端口轉發,如果上層協議感興趣,則還會遞交上層處理。
  • 如果數據包的地址不能再CAM表中找到,則向接收端口以外的其他端口轉發。
  • 如果CAM表中能找到,則轉發給相應端口,如果發送和接收都是統一端口,則不發送。

注意,網橋是以混雜模式工作的。關於網橋更多,請查閱相關資料。

2 OVS中的bridge

上面,說到,一個橋就是一個交換機。在OVS中,

ovs-vsctl add-br brname(br-int) root@Compute2:~# ifconfig br-intLink encap:EthernetHWaddr1a:09:56:ea:0b:49 inet6 addr: fe80::1809:56ff:feea:b49/64Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500Metric:1 RX packets:1584 errors:0 dropped:0 overruns:0 frame:0 TX packets:6 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:316502(316.5 KB) TX bytes:468(468.0 B)

當我們創建了一個交換機(網橋)以后,此時網絡功能不受影響,但是會產生一個虛擬網卡,名字就是brname,之所以會產生一個虛擬網卡,是為了實現接下來的網橋(交換機)功能。有了這個交換機以后,我還需要為這個交換機增加端口(port),一個端口,就是一個物理網卡,當網卡加入到這個交換機之后,其工作方式就和普通交換機的一個端口的工作方式類似了。

ovs-vsctl add-port brname port

這里要特別注意,網卡加入網橋以后,要按照網橋的工作標准工作,那么加入的一個端口就必須是以混雜模式工作,工作在鏈路層,處理2層的幀,所以這個port就不需要配置IP了。(你沒見過哪個交換的端口有IP的吧)

那么接下來你可能會問,通常的交換機不都是有一個管理接口,可以telnet到交換機上進行配置吧,那么在OVS中創建的虛擬交換機有木有這種呢,有的!上面既然創建交換機brname的時候產生了一個虛擬網口brname,那么,你給這個虛擬網卡配置了IP以后,就相當於給交換機的管理接口配置了IP,此時一個正常的虛擬交換機就搞定了。

ip address add 192.168.1.1/24 dev brname

最后,我們來看看一個br的具體信息:

root@Compute2:~# ovs-vsctl show bc12c8d2-6900-42dd-9c1c-30e8ecb99a1bBridge"br0"Port"eth0"Interface"eth0"Port"br0"Interface"br0" type:internal ovs_version:"1.4.0+build0"

首先,這里顯示了一個名為br0的橋(交換機),這個交換機有兩個接口,一個是eth0,一個是br0,上面說到,創建橋的時候會創建一個和橋名字一樣的接口,並自動作為該橋的一個端口,那么這個虛擬接口的作用,一方面是可以作為交換機的管理端口,另一方面也是基於這個虛擬接口,實現了橋的功能。

OpenvSwitch完全使用手冊(二)-概念及工作流程2

這一部分我以一個簡單的例子,說明在虛擬化環境中OpenvSwitch的典型工作流程。

前面已經說到,OVS主要是用來在虛擬化環境中。虛擬機之間一個虛擬機和外網之間的通信所用,如下是一個典型的結構圖:

那么,通常情況下的工作流程如下:

  • 1 VM實例instance產生一個數據包並發送至實例內的虛擬網絡接口VNIC,圖中就是instance中的eth0.
  • 2 這個數據包會傳送到物理節點上的VNIC接口,如圖就是vnet接口。
  • 3 數據包從vnet NIC出來,到達橋(虛擬交換機)br100上.
  • 4 數據包經過交換機的處理,從物理節點上的物理接口發出,如圖中物理節點上的eth0.
  • 5 數據包從eth0出去的時候,是按照物理節點上的路由以及默認網關操作的,這個時候該數據包其實已經不受你的控制了。

本文鏈接地址: http://blog.wachang.net/2013/03/openvswitch-fullbook-2-workflow-2/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM