李潔++何軍
摘要:網(wǎng)絡(luò)作為信息傳輸?shù)臉蛄海涞匚缓椭匾杂油癸@.在云平臺操作系統(tǒng)OpenStack中,Neutron作為提供網(wǎng)絡(luò)連接服務(wù)的功能模塊,在OpenStack中有及其重要的作用.本文對Neutron的架構(gòu),VM的數(shù)據(jù)流路徑進(jìn)行了詳細(xì)的分析,對排查網(wǎng)絡(luò)問題及優(yōu)化Neutron性能提出了方向性指引.
關(guān)鍵詞:Neutron;OpenStack;虛擬化;云計算
中圖分類號:TP391.41
文獻(xiàn)標(biāo)識碼:A
DOI: 10.3969/j.issn.1003-6970.2016.01.006
本文著錄格式:李潔,何軍.云計算操作系統(tǒng)網(wǎng)絡(luò)虛擬化模塊Neutron分析研究[J].軟件,2016,37 (01):21-23
0 引言
OpenStack網(wǎng)絡(luò)模塊最初有Nova-network提供,租戶之間通過VLAN實現(xiàn)隔離,支持Multi-Host方案;OpenStack在Diablo版中Quantum以發(fā)展項目的形式首次出現(xiàn),在Essex版有了試用版本的Quantum,到Folsom版Quantum正式發(fā)布;Grizzly版本里面網(wǎng)絡(luò)功能得到了極大的增強,因Quantum商標(biāo)已被注冊,故在Havana版更名為Neutron,以后的版本沿用Neutron冠名OpenStack的網(wǎng)絡(luò)模塊.
1 Neutron簡介
Neutron作為OpenStack的網(wǎng)絡(luò)模塊,主要提供網(wǎng)絡(luò)連接服務(wù)(Network connectivity as a service);提供面向租戶(Tenant)的API接口,用于創(chuàng)建虛擬網(wǎng)絡(luò),路由器,負(fù)載均衡等,關(guān)聯(lián)instance到指定的網(wǎng)絡(luò)和路由;通過API接口管理虛擬或物理交換機;提供plugin架構(gòu)來支持不同的技術(shù)平臺.
Neutron網(wǎng)絡(luò)類似實際物理環(huán)境當(dāng)中的網(wǎng)絡(luò),以企業(yè)網(wǎng)絡(luò)架構(gòu)來說,將企業(yè)辦公環(huán)境全部遷移到云環(huán)境中,內(nèi)部服務(wù)器則為VMi服務(wù)器之間的交換機屬于云環(huán)境中的L2層虛擬交換機,而服務(wù)器通過DHCP獲取的網(wǎng)絡(luò)地址則是VM的固定IP (FixedIP),企業(yè)內(nèi)網(wǎng)通往外網(wǎng)的路由器則是虛擬網(wǎng)絡(luò)中的默認(rèn)網(wǎng)關(guān)設(shè)備;為向外界用戶提供公司的產(chǎn)品服務(wù),當(dāng)某臺物理服務(wù)器需要被外界直接訪問時需要通過NAT技術(shù)給這臺物理服務(wù)器綁定一個公網(wǎng)IP地址,在云計算網(wǎng)絡(luò)中也一樣,VM的公網(wǎng)IP稱為浮動IP(Floating IP).
Neutron的組件架構(gòu),Neutron基于C/S架構(gòu),Neutron Client (Horizon,Nova等)通過調(diào)用NeutronAPI從Neutron服務(wù)器獲取網(wǎng)絡(luò)服務(wù),實現(xiàn)網(wǎng)絡(luò)、子網(wǎng)、端口的創(chuàng)建、設(shè)置、刪除等操作.Neutron Server的構(gòu)建基于靈活的Plugin模式,具體服務(wù)的提供由Plugin實現(xiàn),Neutron Server通過Neutron API提供統(tǒng)一的接口.目前Neutron Server支持的Plugin主要有Linux Bridge, Open vSwitch, Cisco NXlOOO, NiciraNVP, Ryu. NECOpenFlow, Floodnight等.
Neutron的幾個關(guān)鍵概念:
Network表示一個L2二層網(wǎng)絡(luò)單元,租戶可通過Neutron API創(chuàng)建自己的網(wǎng)絡(luò).
Subnet表示一段IPV4/IPV6地址段,為Instance提供私網(wǎng)或公網(wǎng)地址.
Router表示三層路由器,為租戶的Instance提供路由功能.
Port表示虛擬交換機上的端口,管理Instance的網(wǎng)卡.
2 Neutron 研究
2.1 Neutron部署模式
Neutron多種部署模式,主要有Single FLATNetwork. Multi FLAT Network, Mixed Flat and PrivateNetwork, Provider Router with private network,Per-tenant Routers with private network, Per-tenantRouters with private network等.用戶可以根據(jù)業(yè)務(wù)需求選擇部署模式,本文以適用于公有云運營模式的Per-tenant Routers with private network部署方式進(jìn)行研究.
2.2 Neutron數(shù)據(jù)流路徑概要分析
基于GRE方式時Instance數(shù)據(jù)流出Neutron路徑研究:
(0).圖中的br-int為Open vSwitch匯聚交換機,br-tun為Open vSwitch的核心交換機.
(1).VM通過eth0發(fā)出數(shù)據(jù)包;
(2).VM的網(wǎng)卡eth0鏈接在匯聚交換機br-int上的Tap口;
(3) .br-int接收到數(shù)據(jù)后通過patch-tun口將數(shù)據(jù)轉(zhuǎn)發(fā)到br-tun的patch-int口;
(4) .br-tun接收到patch-int口傳輸來的數(shù)據(jù),將數(shù)據(jù)通過gre
(5).網(wǎng)絡(luò)節(jié)點的br-tun接收到數(shù)據(jù),將數(shù)據(jù)通過patch-int轉(zhuǎn)發(fā)到網(wǎng)絡(luò)節(jié)點的br-int的patch-tun口;
(6).網(wǎng)絡(luò)節(jié)點的br-int交換機接收數(shù)據(jù);
(7).網(wǎng)絡(luò)節(jié)點的br-int交換機通過qr
(8).位于namespaceqr-XXX的路由器13 -agent將數(shù)據(jù)進(jìn)行SNAT處理后,通過通過網(wǎng)卡qg
(9).出口交換機br-ex通過物理網(wǎng)卡eth2,將數(shù)據(jù)發(fā)送到云外網(wǎng)絡(luò).
基于VLAN方式與基于GRE方式對物理網(wǎng)卡的配置的差異:基于GRE方式是物理機的IP地址是設(shè)置在物理網(wǎng)卡eth0上,與一般應(yīng)用無異,在OpenvSwitch上設(shè)置對端物理機的IP地址,GRE能打通的前提條件是IP可達(dá).
基于VLAN時,將ethl設(shè)置為交換機br-ethl的一個端口,將ethl設(shè)置為混雜模式,物理機的IP地址設(shè)置在br-ethl上.基于VLAN方式與基于GRE方式在其他方面并無差異.
2.3 Neutron數(shù)據(jù)流路徑詳細(xì)分析
Neutron虛擬器件命名規(guī)范,Neutron虛擬器件一般以小寫字母q打頭,q代表quantum (OpenStack網(wǎng)絡(luò)模塊原先叫quantum,取其首字母沿用至今).qbrXXX代表linuxbridge,qvoXXX. qvbXXX為veth對,qvo連在Open vSwitch端,qvb連在Linuxbridge端,qgYYY代表路由器的網(wǎng)卡,連在br-ex交換機上,qrYYY代表路由器的網(wǎng)卡,連在br-int交換機上.
創(chuàng)建VM時,底層要做很多工作才能保證VM可被控制訪問外網(wǎng)或?qū)崿F(xiàn)內(nèi)網(wǎng)VM的通信.根據(jù)OpenStack的L版本下的Neutron,以O(shè)pen vSwitch為Core Plugin下的VLAN隔離為例,如上圖所示,來剖析VM是如何從計算節(jié)點連接到網(wǎng)絡(luò)節(jié)點,以及如何通過網(wǎng)絡(luò)節(jié)點聯(lián)通外網(wǎng)的。具體流程如為:
(1).VM創(chuàng)建時,VM的網(wǎng)卡在計算節(jié)點看來是一個TAP設(shè)備,和普通網(wǎng)卡一樣有MAC地址,TAP設(shè)備的命名規(guī)范是tap作為命名字符串的前三個字符,后面加對應(yīng)Port的UUID前11位,總共14個字符,假設(shè)其命名為tapXXX;
(2).VM的網(wǎng)卡tapXXX沒有直接連在OpenvSwitch (br-int)上,而是在中間連接了一個LinuxBridge (qbrXXX);原因是租戶的安全組規(guī)則需要使用IPtables來實現(xiàn),如果直接連接到Open vSwitch的虛擬交換機上會導(dǎo)致安全組功能失效;
(3).VM的網(wǎng)卡tapXXX作為qbrXXX的一個端口;
(4).租戶的qbrXXX通過veth pair的虛擬端口直接連接到Open vSwitch交換機(br-int)上,,qvoXXX連在Open vSwitch端,qvbXXX連在Linux bridge端,XXX為對應(yīng)Port的UUID前11位,tapXXX,qbrXXX,qvbXXX,qvoXXX命名長度都為14個字符.qvoXXX端口在虛擬交換機上都是配置帶有VLAN ID的,這里也是不同租戶業(yè)務(wù)報文在VLAN隔離技術(shù)下被打上VLAN Tag的地方;
(5).qbrXXX連接的Open vSwitch交換機稱為br-int,代表匯聚層設(shè)備的意思.與物理網(wǎng)絡(luò)的匯聚層交換機作用相似,而qbrXXX代表物理網(wǎng)絡(luò)中的二層交換機.
(6).虛擬交換機br-int是每個計算節(jié)點和網(wǎng)絡(luò)節(jié)點都需要存在的,OpenStack的Neutron模塊安裝后會自動創(chuàng)建;在br-int上,從br-ethl方向轉(zhuǎn)發(fā)過來的報文,需要實現(xiàn)VLAN Translation功能,以完成云計算物理設(shè)備內(nèi)網(wǎng)租戶到虛擬網(wǎng)絡(luò)的VLAN ID之間的映射;
(7).虛擬交換機br-int沒有直接將物理端口作為其端口成員,而是通過veth pair鏈接另一個虛擬交換機br-ethl;該虛擬交換機br-ethl也是在Neutron安裝完畢后自動創(chuàng)建;
(8).虛擬交換機br-int和虛擬交換機br-tun之間的veth pair.位于br-int上的端口命名為int-br-ethl,而位于br-ethl上的端口命名為phy-br-ethl;這對vethpair在系統(tǒng)部署時自動創(chuàng)建并配置;
(9) .br-ethl直接將物理端口ethl作為其端口成員,通過br-ethl報文在VLAN技術(shù)下實現(xiàn)隔離,VLAN隔離在Neutron是通過VLAN Translation實現(xiàn)將從br-int方向轉(zhuǎn)發(fā)過來的報文,完成從租戶虛擬網(wǎng)絡(luò)到云計算設(shè)備內(nèi)網(wǎng)的VLAN ID之間的映射;而在GRE或VXLAN隔離時,則是對隧道報文進(jìn)行封裝和解封裝的作用;
(10).在VLAN隔離下,網(wǎng)絡(luò)節(jié)點的虛擬交換機br-ethl和計算節(jié)點基本一致;而網(wǎng)絡(luò)節(jié)點虛擬交換機br-int配置,則比計算節(jié)點多出了些相應(yīng)隔離域內(nèi)Dnsmasq進(jìn)程連接的TAP端口;一個網(wǎng)絡(luò)(Network)對應(yīng)一個名稱為qdhcp-XXX的namespace,其中XXX為Network ID.
(11).到此,整個租戶網(wǎng)絡(luò)環(huán)境實現(xiàn)了聯(lián)通;租戶可以創(chuàng)建任意的虛擬網(wǎng)絡(luò),并且同租戶VM之間可通過內(nèi)網(wǎng)相互通信;
(12).只有網(wǎng)絡(luò)節(jié)點才有通往外網(wǎng)的虛擬交換機,通常命名為br-ex,每個網(wǎng)絡(luò)節(jié)點可有多個通往外網(wǎng)的虛擬交換機,但這些通外網(wǎng)的虛擬交換機都只能連接同一個外網(wǎng),即每個網(wǎng)絡(luò)節(jié)點的L3 Agent只可綁定到一個外網(wǎng);
(13).當(dāng)創(chuàng)建一個虛擬路由器時,底層對應(yīng)創(chuàng)建一個以qrouterYYY開頭的namespace,其中YYY為router ID,在這個命名空間中,創(chuàng)建分別以qg和qr開頭的兩塊虛擬網(wǎng)卡,命名以qg的開頭的虛擬網(wǎng)卡綁定在br-ex的一個端口,qr開頭的網(wǎng)卡綁定在br-int的一個端口,這樣br-int和br-ex實現(xiàn)互通,聯(lián)通了內(nèi)網(wǎng)和外網(wǎng);
(14).網(wǎng)絡(luò)節(jié)點的虛擬交換機br-int和br-ex通過在namespace名為qrouterYYY的路由器13-agent相連接,qg開頭的網(wǎng)卡IP地址是虛擬路由器設(shè)置公網(wǎng)為默認(rèn)網(wǎng)關(guān)是獲取的公網(wǎng)IP地址,qr開頭的網(wǎng)卡IP地址則是租戶內(nèi)網(wǎng)網(wǎng)關(guān)的IP地址內(nèi)網(wǎng)和外網(wǎng)通過該虛擬路由器中設(shè)置IPtables和路由實現(xiàn)內(nèi)網(wǎng)和外網(wǎng)的互通;相應(yīng)qrouterYYY中qg開頭的網(wǎng)卡設(shè)置有公網(wǎng)地址,是br-ex無需具體IP地址即可實現(xiàn)VM與外網(wǎng)通信的根本原因;但每個虛擬路由器設(shè)置一個公網(wǎng)IP地址有點浪費.
(15).經(jīng)過(1)~(15)步驟,在云計算物理機內(nèi)網(wǎng)上建立的VM租戶網(wǎng)絡(luò),可以和云計算外網(wǎng)進(jìn)行互通;云計算租戶內(nèi)網(wǎng)虛擬網(wǎng)絡(luò)可以任意命名和使用任意規(guī)劃的網(wǎng)段;
(16).在此基礎(chǔ)上,F(xiàn)loating IP和FWaaS服務(wù)通過namespace名為qrouterXXX內(nèi)的路由器設(shè)置IPtables規(guī)則來實現(xiàn);LBaas和VPNaaS則通過namespace名為qrouterXXX內(nèi)相應(yīng)的功能模塊來實現(xiàn)此時Neutron實現(xiàn)了底層網(wǎng)絡(luò)的互連互通.從上述云計算網(wǎng)絡(luò)環(huán)境VM通信的整個報文轉(zhuǎn)發(fā)的流程來看,云計算的網(wǎng)絡(luò)技術(shù)涉及技術(shù)點眾多,流程復(fù)雜,還有很大的優(yōu)化空間.
3 結(jié)論
網(wǎng)絡(luò)作為信息傳輸?shù)臉蛄?,其地位和重要性只會愈加凸顯.Neutron未來發(fā)展方向從目前的趨勢來看,主要有兩個重點:一是SDN Controller,SDN的核心理念有三個,第一個控制和轉(zhuǎn)發(fā)分離,第二個集中控制,第三個開放的API-網(wǎng)絡(luò)可編程。OpenStack平臺中應(yīng)用的SDN技術(shù)已經(jīng)成為了云環(huán)境中的網(wǎng)絡(luò)支柱,OpenStack的Neutron本身作為一個SDN網(wǎng)絡(luò)控制系統(tǒng),在網(wǎng)絡(luò)配置方面提供了一種自服務(wù)能力,用戶可以創(chuàng)建自己的網(wǎng)絡(luò)并控制流量,實現(xiàn)連接服務(wù)器和設(shè)備到一個或多個網(wǎng)絡(luò)?;贜eutron的SDN技術(shù),OpenStack網(wǎng)絡(luò)實現(xiàn)了一個可擴(kuò)展的框架,并能部署和管理多種網(wǎng)絡(luò)服務(wù),如入侵檢測系統(tǒng)(IDS),負(fù)載均衡,防火墻和虛擬專用網(wǎng)絡(luò)(VPN)等。二是NeutronDVR,DVR的核心作用是,通過Neutron的東西向橫向流量擴(kuò)展,將L3-Agent同時分布于網(wǎng)絡(luò)節(jié)點和計算節(jié)點上,減輕網(wǎng)絡(luò)節(jié)點的L3性能瓶頸/流量集中,實現(xiàn)負(fù)載均衡等.當(dāng)某個租戶建立了一個路由的時候,如果某臺主機上存在其路由所連接子網(wǎng)的虛機,那么這臺主機上就會建立一個路由。所有的東西向流量都會由這個路由進(jìn)行轉(zhuǎn)發(fā)而不是通過網(wǎng)絡(luò)節(jié)點進(jìn)行轉(zhuǎn)發(fā)。如果虛擬機有浮動IP的話,所有的南北向流量也會由這個路由器進(jìn)行轉(zhuǎn)發(fā)而不是由網(wǎng)絡(luò)節(jié)點進(jìn)行轉(zhuǎn)發(fā)。只有沒有浮動IP的虛機訪問外網(wǎng)的時候,會通過SNAT走網(wǎng)絡(luò)節(jié)點進(jìn)行轉(zhuǎn)發(fā)。通過使用DVR,三層的轉(zhuǎn)發(fā)和NAT功能都會被分布到計算節(jié)點上,這意味著計算節(jié)點也有了網(wǎng)絡(luò)節(jié)點的功能。但是,DVR依然不能消除集中式的Virtual Router,這是為了節(jié)省寶貴的IPV4公網(wǎng)地址,故依然將SNAT放在網(wǎng)絡(luò)節(jié)點上提供。