OpenStack网络模块核心OpenvSwitch的全面解读
?
一、OpenStack網絡
1.1?什么是SDN軟件定義網絡
軟件定義網絡(Software Defined Network)就是在虛擬化的背景下,為了滿足虛擬化環境下虛擬機對網絡的需求,逐步發展起來的技術。網絡虛擬化通常被稱為SDN(software defined network)軟件定義網絡。
如下圖,在某臺物理服務器中,運行著4臺虛擬機,為了將這4臺虛擬機在邏輯上組成我們需要的網絡架構,于是就虛擬成了2臺交換機,組成圖中的網絡架構。
?
1.2?虛擬網絡的挑戰
1.2.1 跟蹤設備移動狀態。
網絡端節點實體(比如虛擬機)的網絡狀態需要簡單確定,不同主機之間可相互遷移節點狀體。這些狀態包括傳統“軟狀態”,比如數據鏈路層學習表、三層路由轉發狀態、路由策略狀態、訪問控制列表、服務質量策略、配置監控及結構化自動化系統等。簡單來講,就是每個虛擬機移動時,其所帶虛擬接口策略如何主動隨之漂移。
1.2.2 維護虛擬化邏輯標記。
分布式虛擬交換機通常通過增加或管理虛擬機網絡數據,來維護虛擬網絡或邏輯區域上下文,這是容易理解的簡單方式,問題是正確和高效管理這些虛擬化標記非常困難。增加網絡標記,就增加新一層網絡信息,從另一方面間又增加了網絡復雜度。為簡化管理和提高效率,常常需要優化虛擬機標記存儲方式,包括保存虛擬化地址或重新映射、配置、修改和遷移標志。
1.2.3 集成操作系統和硬件。
把虛擬數據轉發路徑設計成“卸載”模式,數據包處理由硬件芯片完成,以獨立軟件或硬件芯片方式實現靈活控制,增加虛擬化網絡性能。獨立軟件開發商還可以使用接口增強虛擬邊界網絡功能,減少硬件交付到應用交付的負面影響,從而簡化、加速和減輕可擴展云的網絡管理。
?
二、Open vSwitch項目
2.1什么是Open vSwitch
OpenvSwitch簡稱OVS,正如其官網(http://openvswitch.org/)所述,OVS是一個高質量、多層的虛擬交換軟件。它的目的是通過編程擴展支持大規模網絡自動化,同時還支持標準的管理接口和協議。
隨著虛擬化應用普及,需要部署更多虛擬化軟交換交換機,而費用昂貴的閉源虛擬交換機讓用戶不堪重負,多層虛擬化軟件交換機Open vSwitch由Nicira Networks開發,主要實現代碼為可移植的C代碼。它遵循Apache 2.0開源代碼版權協議,可用于生產環境,支持跨物理服務器分布式管理、擴展編程、大規模網絡自動化和標準化接口,實現了和大多數商業閉源交換機功能類似的軟件交換機。
OVS官方的定位是要做一個產品級質量的多層虛擬交換機,通過支持可編程擴展來實現大規模的網絡自動化。設計目標是方便管理和配置虛擬機網絡,檢測多物理主機在動態虛擬環境中的流量情況。針對這一目標,OVS具備很強的靈活性。可以在管理程序中作為軟件switch運行,也可以直接部署到硬件設備上作為控制層。
?
?
2.2 Open vSwitch相關組件
ovs-vswitchd: 功能:實現switch的daemon功能,包括一個支持流交換的Linux內核模塊,實現了交換功能。ovsdb-vswtich: 功能:openvswitch的數據庫,給ovs-vswitchd提供運行配置信息,即保存了ovs-vswitchd的配置信息,例如vlan、port等信息。ovs-brcompatd: 功能:讓ovs-swtich替換Linux bridge,包括獲取bridge ioctls的內核模塊。ovs-dpctl: 功能:用來配置switch的內核模塊。ovs-vsctl: 功能:查詢和更新ovs-vswitchd的配置,即用于修改或查詢ovsdb-vswitch的信息。ovs-appctl: 功能:發送命令消息,運行相關daemon。ovs-pki: 功能:OpenFlow公鑰管理框架。ovs-bugtool: 功能:管理openvswitch的bug信息。?
2.3 術語和邏輯概念
在Openvswitch的使用中,為了能全面地理解Openvswitch的內部原理,我們需要對其中的術語和概念有所了解。
Bridge:即網橋,在Openvswitch中每個虛擬交換機(vswitch)都可以認為是一個網橋,因為Openvswitch在底層的通信是借助了網橋模塊來實現的,同時我們通過brctl也能查看到ovs所創建的網橋設備。
?
Datapath:即數據通路,在Openvswitch中每個Bridge我們都可以理解為Datapath,也就是說Datapath就是虛擬交換機。
?
如上圖,每個Datapath項中我們都能看到存在幾個Port項,它們其實就是虛擬交換機(datapath)上的端口。如上br-tun項中,port2就與遠端的端口建立了gre隧道。
Flowtable:即數據流表,根據之前對OpenFlow的介紹,我們已經了解了Openvswitch中利用openflow協議在實現虛擬交換機,而數據流表就是提供給Bridge/Datapath做數據操作的指令。
Port:即端口,這里的端口是指虛擬交換機邏輯上的接口,我們可以通過ovs-vsctl命令查看各個網橋(即虛擬交換機)上的接入的端口。
Patch:即連線,我們可以理解為傳統交換機的Trunk,在這里就是網絡節點和運算節點間ovs虛擬交換的聯結。
下圖為網絡節點的br-int(用于VM的虛擬交換)。
?
下圖為運算節點上的br-int,我們可以看到其中一個端口(vport)是和網絡節點的br-int交換進行聯結的。它們的類型為“type:patch”,這樣的聯結就是Patch。
?
Tun/Tap:它們是Linux/Unix系統中的虛擬網絡設備,TAP等同于以太網設備,操作L2層數據鏈路層的數據幀;TUN則是模擬L3網絡層的設備,操作網絡層的IP數據包。
在OVS中,其GRE隧道模式在底層的實現是由TUN支持的,而TAP設備則是用來分隔openvswitch中不同的subnet。
如下圖,網絡節點上兩個TAP設備接入在br-int虛擬交換機中。
?
我們可以看到兩個TAP設備的IP地址是在Openvswitch中創建的2個subnet網絡的網關地址。
Vnet:即虛擬機的虛擬網卡,在運算節點上可以看到OVS對于vnet的管理和傳統的網橋模式不同,根據對設備物理地址的判斷,應該是OVS采用了相應的tunneling技術,具體不詳。
?
?
2.4 OVS內部結構分析
下面開始分析Openvswitch的內部結構,在Openvswitch的邏輯層面上存在一個Controller控制器,它是負責管理所有虛擬交換機的中心,而虛擬交換機在OVS也叫datapath(數據通路),它會將收集到的數據或事件傳送給控制器,例如一些端口的接入等。
Datapath實現路由轉發等高級特性是通過Flow Table(數據流表)來實現的。在OVS中,數據流標是根據OpenFlow的協議標準來實現的,由控制中心統一運算生成各個虛擬交換設備的Flow Table,并分發到各個Datapath中。
下圖是系統層面的邏輯圖。
其中datapath是處于系統的核心層(kernel space),我們可以將datapath理解為一個網橋(linux bridge)。處于用戶態(user space)的主要是openvswitch client、openflow client、ofproto library、netdev等等。
如上圖中,ofproto即openflow protocol的縮寫,它是一個openflow的庫,OVS的客戶端(如ovs-vswitchd、ovs-openflowd)就是通過調用這個庫來操作OVS的控制中心。
netdev則是設備抽象的API,它是由linux內核提供的,通過netdev這個API,可以直接與內核層的網絡設備通信,同時Flow table也處在內核層中,這樣當datapath依照flow table的規則處理數據流時就可以直接將操作傳送給內核層的網絡設備進行操作,這樣的傳輸性能是十分強悍的。
?
2.5 OVS內部通信
下面我們分析一下Openvswitch在工作中的通信過程。
傳統的交換機(包括linux bridge網橋)中轉發二層的數據包時,都是通過查找CAM表(二層交換機地址表)找到目的MAC對應的端口再進行轉發。
在openvswitch的實現中,由于其采用了openflow的規范標準,所以會先查找數據包是否有對應的流記錄,如果有則根據該條流記錄的action部分,對數據包進行操作,例如轉發到某端口。
?
如下圖中,一個虛擬交換機在openvswitch中就是一個datapath,當數據包通過物理路徑進入到OVS網絡節點,OVS會分析包的關鍵信息并和各個datapath的數據流表進行匹配,若有對應的條目則根據action來處理數據包;但是若沒有已存在的條目,則說明這個
?
2.6 ovs-vsctl使用指南
vos-vsctl命令格式: usage: ovs-vsctl [OPTIONS] COMMAND [ARG...]常見的OPTIONS有以下組成: --db=DATABASE :指定連接的數據庫,默認是unix:/var/run/openvswitch/db.sock --no-wait: 在使用時不等待ovs-vswitchd的重新配置 --retry:不斷嘗試連接遠端服務器 --t,-timeout=SECS: 等待ovs-vswitchd的超時時間 --dry-run: 嘗試運行修修改的配置但是不提交到ovsdb-vswitch數據庫 --oneline:將打印出的命令一行一行的顯示 -h,--help: 顯示幫助信息 -V,--version:顯示版本信息常用的COMMAND有以下幾類:
OpenvSwitch的維護命令:init:初始化ovsdb-vswitch數據庫show:查看數據信息emer-reset: 重新設置openvswitch的狀態OpenvSwitch對橋設備操作相關的命令:add-br BRIDGE :添加一個橋設備add-br BRIDGE PARENT VLAN:在PARENT中創建一個橋,并做vlan標記del-br BRIDGE: 刪除一個橋設備list-br: 查看創建的橋設備br-exists BRIDGE: 判斷新創建的橋是否已經存在br-to-vlan BRIDGE: 列出橋設備的所有的valnbr-to-parent BRIDGE: 列出當前橋的上一個橋設備br-set-external-id BRIDGE KEY VALUE: 給橋添加額外的屬性,方式為 key vllue格式br-set-external-id BRIDGE KEY:撤銷橋設備額外的信息br-get-external-id BRIDGE KEY:列出橋設備額外的信息br-get-external-id BRIDGE :以key-value格式列出橋設備的額外信息OpenvSwitch對端口的操作命令:list-ports BRIDGE: 列出指定橋設備上的端口add-ports BRIDGE PORT :添加一個端口到橋設備,此端口可以事先不存在add-bond BRIDGE PORT IFACE...: 對橋設備做多端口綁定del-port [BRIDGE] PORT: 刪除一個端口或者刪除一個指定橋設備上的端口port-to-br PORT:列出端口所在的橋設備OpenvSwitch對接口操作的命令: list-ifaces BRIDGE: 列出橋設備上的所有接口iface-to-br IFACE: 列出接口所在的橋設備OpenvSwitch的控制命令:get-contorller BRIDGE: 獲取橋設備的控制器del-contorller BRIDGE: 刪除橋設備的控制器set-contorller BRIDGE TARGET...:給橋設備設置一個控制器get-fail-mode BRIDGE: 顯示橋設備錯誤的模式del-fail-mode BRIDGE: 刪除橋設備錯誤的模式set-fail-mode BRIDGE MODE: 設置橋設備失敗的模式為MODEOpenvSwitch管理相關的命令:get-manager: 列出openvswitch的管理者del-manager:刪除openvswitch的管理者set-manager TARGET....:設置管理者列表為TARGETOpenvSwitch安全相關的命令:get-ssl:獲取ssl的配置信息del-ssl: 刪除ssl的配置信息set-ssl PRIV-KEY CERT CA-CERT: 配置sslOpenvSwitch交換相關的命令:emer-rest: 重新設置未知交換機的狀態OpenvSwitch數據庫操作相關命令:listTBL [REC]: 列出TBL的資源記錄信息(ovs-vsctl list port )findTBL CONDITION....:查找相關的資源記錄信息getTBL REC COL[:KEY]:獲取TBL的信息setTBL REC COL[:KEY]=VALUE:設定TBL的額外屬性(ovs-vsctl set Port br1 tag=2)addTBL REC COL [KEY=]VALUE:添加一個[key=]value到TBLremove TBL REC COL [KEY=]VALUE:刪除TBL中的一個key值(ovs-vsctlremove Port br1 tag 2)clearTBL REC COL: 清除指定TBL的資源記錄信息create TBL COL [:KEY]=VALUE:在TBL中創建一個資源記錄信息destroy TBL REC:銷毀一個TBL的RECwait-until TBL REC [COL[:KEY]=VALUE]:等待TBL資源記錄配置完成常用的ARG參數:連接主數據庫的方法:tcp:IP:PORT: 指定連接遠端數據庫使用tcp協議,以及遠端主數據庫的ip地址跟端口ssl:IP:PORT: 指定連接遠端數據庫使用ssl協議,以及遠端主數據庫的ip地址跟端口unix:FILE:使用socket套接字連接主數據庫備用數據庫的連接方法:ptcp:IP:PORT: 指定連接遠端數據庫使用tcp協議,以及遠端備用數據庫的ip地址跟端口pssl:IP:PORT: 指定連接遠端數據庫使用ssl協議,以及遠端備用數據庫的ip地址跟端口punix:FILE:使用socket套接字連接備用數據庫PKI配置:-p,--private-key=FILE: 指定私有秘鑰的位置-c,--certificate=FILE:指定證書的位置-C,ca-cert=FILE:指定對端證書的總結
以上是生活随笔為你收集整理的OpenStack网络模块核心OpenvSwitch的全面解读的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Openstack 与VMware 不同
- 下一篇: Flv的结构分析