OpenStack在這幾年風(fēng)生水起。隨著核心模塊穩(wěn)定性的提高,OpenStack已經(jīng)有了很多大規(guī)模商用的案例,所有與云相關(guān)的,無(wú)論是商用軟件還是開(kāi)源平臺(tái)都在積極地尋求著與OpenStack的對(duì)接,OpenStack正在成為云計(jì)算業(yè)界事實(shí)上的IaaS標(biāo)準(zhǔn)。
在網(wǎng)絡(luò)這一口,OpenStack經(jīng)歷了由nova-network到Quantum再到Neutron的演進(jìn)過(guò)程。我們首先來(lái)簡(jiǎn)要地看看各個(gè)版本網(wǎng)絡(luò)的特征:
Nova-network是隸屬于nova項(xiàng)目的網(wǎng)絡(luò)實(shí)現(xiàn),它利用了linux-bridge(早期,目前也支持OVS)作為交換機(jī),具備Flat、Flat DHCP、VLAN三種組網(wǎng)模式。優(yōu)點(diǎn)是性能出色,工作穩(wěn)定,支持multi-host部署以實(shí)現(xiàn)HA;缺點(diǎn)是網(wǎng)絡(luò)模塊不獨(dú)立,功能不夠靈活,組網(wǎng)模式也比較受限。Quantum作為獨(dú)立的網(wǎng)絡(luò)管理項(xiàng)目出現(xiàn)在F版本,除了linux-bridge外還支持OVS,以及以及其他商業(yè)公司的插件,組網(wǎng)模式上增加了對(duì)GRE和VxLAN兩個(gè)Overlay技術(shù)的支持。優(yōu)點(diǎn)是功能靈活,支持大二層組網(wǎng);缺點(diǎn)是集中式的網(wǎng)絡(luò)節(jié)點(diǎn)缺乏HA,而且各廠商插件無(wú)法同時(shí)在底層網(wǎng)絡(luò)中運(yùn)行。Neutron出現(xiàn)在H版本,由來(lái)是Quantum和一家公司的名稱(chēng)沖突而改名。Neutron對(duì)Quantum的插件機(jī)制進(jìn)行了優(yōu)化,將各個(gè)廠商L2插件中獨(dú)立的數(shù)據(jù)庫(kù)實(shí)現(xiàn)提取出來(lái),作為公共的ML2插件存儲(chǔ)租戶的業(yè)務(wù)需求,使得廠商可以專(zhuān)注于L2設(shè)備驅(qū)動(dòng)的實(shí)現(xiàn),而ML2作為總控可以協(xié)調(diào)多廠商L2設(shè)備共同運(yùn)行。Neutron繼承了Quantum對(duì)大二層的支持,還支持L2 PoP,DVR,VRRP,HA等關(guān)鍵功能,集成了很多L4-L7的網(wǎng)絡(luò)服務(wù),一些blueprint也正在積極開(kāi)發(fā)中,如SFC等。優(yōu)點(diǎn)是開(kāi)始引入SDN思想,功能上更為豐富,網(wǎng)絡(luò)兼容性強(qiáng);缺點(diǎn)是代碼結(jié)構(gòu)復(fù)雜,工作不夠穩(wěn)定,HA機(jī)制仍缺乏大規(guī)模商用的檢驗(yàn)。從應(yīng)用場(chǎng)景來(lái)看,Nova-network組網(wǎng)模式過(guò)于簡(jiǎn)單,一些復(fù)雜的網(wǎng)絡(luò)需求無(wú)法實(shí)現(xiàn)(比如兩個(gè)公司合并,有大量IP重合的VM要遷移到一個(gè)平臺(tái),而且要求遷移后都要用原來(lái)的IP)。不過(guò)由于其簡(jiǎn)單穩(wěn)定的特點(diǎn),仍適合于中小型企業(yè)的生產(chǎn)環(huán)境;Quantum的實(shí)際部署目前基本都跟進(jìn)到了Neutron;Neutron的大二層組網(wǎng),適合于云計(jì)算規(guī)模的生產(chǎn)環(huán)境,但是由于分布式和HA機(jī)制仍不夠成熟,因此目前多見(jiàn)于私有云和小規(guī)模共有云的部署,大規(guī)模的公有云仍然難以使用Neutron實(shí)現(xiàn)。
Nova-network、Quantum、Neutron的對(duì)比分析。
出現(xiàn) 版本 |
支持組 網(wǎng)模式 |
優(yōu)點(diǎn) |
缺點(diǎn) |
適用場(chǎng)景 |
|
Nova-network | 早期 | FlatFlat DhcpVLAN | 性能出色工作穩(wěn)定支持multi-host部署
以實(shí)現(xiàn)HA |
網(wǎng)絡(luò)管理不獨(dú)立功能不夠靈活組網(wǎng)方式受限 | 對(duì)性能和穩(wěn)定性要求比較高;中小規(guī)模網(wǎng)絡(luò);網(wǎng)絡(luò)運(yùn)維成本有限;私有云環(huán)境 |
Quantum | Folsom | FlatFlat DhcpVLANOverlay | 獨(dú)立的網(wǎng)絡(luò)管理支持大二層支持多廠商插件 | 缺乏HA機(jī)制各廠商插件無(wú)法
共同運(yùn)行 |
基本上已經(jīng)都跟進(jìn)到了Neutron |
Neutron | Havana | FlatFlat DhcpVLANOverlay | 繼承了Quantum的優(yōu)點(diǎn)功能上更為豐富網(wǎng)絡(luò)兼容性強(qiáng)開(kāi)始引入SDN的思想 | 代碼結(jié)構(gòu)復(fù)雜工作不夠穩(wěn)定HA機(jī)制仍缺乏大規(guī)模商用的檢驗(yàn) | 對(duì)功能要求比較多或希望向SDN演進(jìn);大規(guī)模網(wǎng)絡(luò)或?qū)蓴U(kuò)展性要求高;有專(zhuān)業(yè)的網(wǎng)絡(luò)運(yùn)維團(tuán)隊(duì);公有云環(huán)境 |
說(shuō)完了基本特征與應(yīng)用場(chǎng)景,下面開(kāi)始對(duì)上述提到的一些網(wǎng)絡(luò)問(wèn)題進(jìn)行詳細(xì)的描述。我們拋開(kāi)技術(shù),結(jié)合圖例來(lái)抽象地看看不同的組網(wǎng)模型。當(dāng)然,以下模型的實(shí)現(xiàn)不僅僅局限于三張圖中的方式。
Flat模型最為簡(jiǎn)單,所有的虛擬機(jī)共用一個(gè)私有IP網(wǎng)段,IP地址在虛擬機(jī)啟動(dòng)時(shí)完成注入,虛擬機(jī)間的通信直接通過(guò)HyperVisor中的網(wǎng)橋轉(zhuǎn)發(fā),公網(wǎng)流量在該網(wǎng)段的網(wǎng)關(guān)上進(jìn)行NAT(Nova-network實(shí)現(xiàn)為開(kāi)啟nova-network主機(jī)內(nèi)核的iptables,Neutron實(shí)現(xiàn)為網(wǎng)絡(luò)節(jié)點(diǎn)上的l3-agent)。Flat DHCP模型與Flat區(qū)別在于網(wǎng)橋中開(kāi)啟了DHCP進(jìn)程,虛擬機(jī)通過(guò)DHCP消息獲得IP地址(Nova-network實(shí)現(xiàn)為nova-network主機(jī)中的dnsmaq,Neutron實(shí)現(xiàn)為網(wǎng)絡(luò)節(jié)點(diǎn)上的dhcp-agent)。VLAN模型引入了多租戶機(jī)制,虛擬機(jī)可以使用不同的私有IP網(wǎng)段,一個(gè)租戶可以擁有多個(gè)IP網(wǎng)段。虛擬機(jī)IP通過(guò)DHCP消息獲取IP地址(Nova-network實(shí)現(xiàn)為nova-network主機(jī)中的dnsmaq,Neutron實(shí)現(xiàn)為網(wǎng)絡(luò)節(jié)點(diǎn)上的dhcp-agent)。網(wǎng)段內(nèi)部虛擬機(jī)間的通信直接通過(guò)HyperVisor中的網(wǎng)橋轉(zhuǎn)發(fā),同一租戶跨網(wǎng)段通信通過(guò)網(wǎng)關(guān)路由,不同租戶通過(guò)網(wǎng)關(guān)上的ACL進(jìn)行隔離,公網(wǎng)流量在該網(wǎng)段的網(wǎng)關(guān)上進(jìn)行NAT(Nova-network實(shí)現(xiàn)為開(kāi)啟nova-network主機(jī)內(nèi)核的iptables,Neutron實(shí)現(xiàn)為網(wǎng)絡(luò)節(jié)點(diǎn)上的l3-agent)。如果不同租戶邏輯上共用一個(gè)網(wǎng)關(guān),則無(wú)法實(shí)現(xiàn)租戶間IP地址的復(fù)用。Overlay模型(包括GRE和VxlAN隧道技術(shù)),相比于VLAN模型有以下改進(jìn)。1)租戶數(shù)量從4K增加到16million;2)租戶內(nèi)部通信可以跨越任意IP網(wǎng)絡(luò),支持虛擬機(jī)任意遷移;3)一般來(lái)說(shuō)每個(gè)租戶邏輯上都有一個(gè)網(wǎng)關(guān)實(shí)例,IP地址可以在租戶間進(jìn)行復(fù)用;4)能夠結(jié)合SDN技術(shù)對(duì)流量進(jìn)行優(yōu)化。
看過(guò)抽象的組網(wǎng)模型,下面我們來(lái)介紹組網(wǎng)具體的實(shí)現(xiàn)技術(shù)。由于本章的重點(diǎn)是SDN與云,因此下面的介紹都是針對(duì)Neutron的,對(duì)nova-network和Quantum將不做討論。
首先,我們需要對(duì)Neutron的3類(lèi)節(jié)點(diǎn)和3種網(wǎng)絡(luò)有所認(rèn)識(shí)。
3類(lèi)節(jié)點(diǎn)——管理節(jié)點(diǎn):實(shí)現(xiàn)鏡像、塊存儲(chǔ)、身份認(rèn)證、前端等服務(wù),運(yùn)行nova-compute的調(diào)度模塊以及nova api-server;計(jì)算節(jié)點(diǎn):實(shí)現(xiàn)nova-compute,以及neutron的各種agent(一般不包括l3-agent,DVR除外);網(wǎng)絡(luò)節(jié)點(diǎn),:實(shí)現(xiàn)neutron各種agent。注意,由于OpenStack為分布式架構(gòu)實(shí)現(xiàn),因此neutron-server既可以運(yùn)行在控制節(jié)點(diǎn),也可以運(yùn)行在網(wǎng)絡(luò)節(jié)點(diǎn)。3種網(wǎng)絡(luò)——OpenStack內(nèi)部模塊之間的交互發(fā)生在管理網(wǎng)絡(luò),虛擬機(jī)之間的通信發(fā)生在數(shù)據(jù)網(wǎng)絡(luò),而External Network/API Network網(wǎng)絡(luò)是連接外網(wǎng)的,無(wú)論是用戶調(diào)用Openstack API,還是虛擬機(jī)與外網(wǎng)間的互通都需要經(jīng)過(guò)這個(gè)網(wǎng)絡(luò)。目前OpenStack通常采用out-of-bound方式進(jìn)行部署,管理網(wǎng)絡(luò)與另外兩個(gè)網(wǎng)絡(luò)是獨(dú)立的,也并不涉及復(fù)雜的組網(wǎng)需求,下面的分析只針對(duì)數(shù)據(jù)網(wǎng)絡(luò)與External Network/API Network網(wǎng)絡(luò)。
有了以上知識(shí)作為基礎(chǔ),就可以來(lái)分析虛擬機(jī)的通信過(guò)程了。由于OpenStack中容器的通信機(jī)制目前尚不成熟,并且有專(zhuān)門(mén)的項(xiàng)目Kuryr去實(shí)現(xiàn)容器相關(guān)網(wǎng)絡(luò)技術(shù),以下內(nèi)容將不涉及OpenStack中的容器通信。
以下將通過(guò)三張圖來(lái)分析Neutron中的VLAN組網(wǎng)模型,HyperVisor中的網(wǎng)絡(luò)設(shè)備以O(shè)penvSwitch為例。這三張圖中每一個(gè)信息都是有用的,把這些信息完全弄懂了,Neutron的組網(wǎng)也就能基本掌握了,Overlay模型與VLAN模型的區(qū)別只在于將圖中的br-eth1替換成br-tun即可,具體隧道如何進(jìn)行封裝,后面的文章中我們會(huì)詳細(xì)介紹。
第一張圖是計(jì)算節(jié)點(diǎn)上的網(wǎng)絡(luò)實(shí)現(xiàn)。以虛擬機(jī)發(fā)出流量方向?yàn)槔?,從虛擬機(jī)處開(kāi)始分析:
1)流量經(jīng)由虛擬機(jī)IP內(nèi)核交給虛擬網(wǎng)卡處理,虛擬網(wǎng)卡由TAP軟件實(shí)現(xiàn),TAP允許用戶態(tài)程序向內(nèi)核協(xié)議棧注入數(shù)據(jù),它可以運(yùn)行于虛擬機(jī)操作系統(tǒng)之上,能夠提供與硬件以太網(wǎng)卡完全相同的功能。
2)TAP設(shè)備并不是直接連接到OVS上的,而是通過(guò)linux bridge中繼到ovs br-int上,其原因在于ovs無(wú)法實(shí)現(xiàn)linux bridge中一些帶狀態(tài)的iptables規(guī)則,而這些規(guī)則往往用于以虛擬機(jī)為單位的安全組(security group)功能的實(shí)現(xiàn)。qbr是quantum bridge的縮寫(xiě),Neutron中沿用了Quantum的叫法。
3)linux bridge與ovs br int間的連接通過(guò)veth-pair技術(shù)實(shí)現(xiàn),qvb代表quantum veth bridge,qvo代表quantum veth ovs。veth-pair用于連接兩個(gè)虛擬網(wǎng)絡(luò)設(shè)備,總是成對(duì)出現(xiàn)以模擬虛擬設(shè)備間的數(shù)據(jù)收發(fā),其原理是反轉(zhuǎn)通訊數(shù)據(jù)的方向,需要發(fā)送的數(shù)據(jù)會(huì)被轉(zhuǎn)換成需要收到的數(shù)據(jù)重新送入內(nèi)核網(wǎng)絡(luò)層進(jìn)行處理。veth-pair與tap的區(qū)別可以簡(jiǎn)單理解為veth-pair是軟件模擬的網(wǎng)線,而tap是軟件模擬的網(wǎng)卡。
4)ovs br-int是計(jì)算節(jié)點(diǎn)本地的虛擬交換設(shè)備,根據(jù)neutron-server中OVS Plugin的指導(dǎo),完成流量在本地的處理:本地虛擬機(jī)送入的流量被標(biāo)記本地VLAN tag,送到本地虛擬機(jī)的流量被去掉本地VLAN tag,本地虛擬機(jī)間的2層流量直接在本地轉(zhuǎn)發(fā),本地虛擬機(jī)到遠(yuǎn)端虛擬機(jī)、網(wǎng)關(guān)的流量由int-br-eth1送到ovs br-eth1上(在Overlay模型中送到ovs br-tun上)。無(wú)論是VLAN模型還是Overlay模型,由于br-int上VLAN數(shù)量的限制,計(jì)算節(jié)點(diǎn)本地最多支持4K的租戶。
5)ovs br-int與ovs br-eth1間的連接通過(guò)veth-pair技術(shù)實(shí)現(xiàn)。
6)ovs br-eth1將該計(jì)算節(jié)點(diǎn)與其他計(jì)算節(jié)點(diǎn)、網(wǎng)絡(luò)節(jié)點(diǎn)連接起來(lái),根據(jù)neutron-server中OVS Plugin的指導(dǎo),完成流量送出、送入本地前的處理:根據(jù)底層物理網(wǎng)絡(luò)租戶VLAN與本地租戶VLAN間的映射關(guān)系進(jìn)行VLAN ID的轉(zhuǎn)換(Overlay模型中此處進(jìn)行隧道封裝,并進(jìn)行VNI與本地租戶VLAN ID間的映射)。由于底層物理網(wǎng)絡(luò)中VLAN數(shù)量的限制,VLAN模型最多支持4K的租戶,而Overlay模型中,24位的VNI最多支持16million的租戶。
7)ovs br-eth1直接關(guān)聯(lián)物理宿主機(jī)的硬件網(wǎng)卡eth1,通過(guò)eth1將數(shù)據(jù)包送到物理網(wǎng)絡(luò)中。Overlay模型中ovs br-tun通過(guò)TUN設(shè)備對(duì)數(shù)據(jù)包進(jìn)行外層隧道封裝并送到HyperVisor內(nèi)核中,內(nèi)核根據(jù)外層IP地址進(jìn)行選路,從硬件網(wǎng)卡eth1將數(shù)據(jù)包送到物理網(wǎng)絡(luò)中。TUN與TAP的實(shí)現(xiàn)機(jī)制類(lèi)似,區(qū)別在于TAP工作在二層,而TUN工作在三層。
第二張圖和第三張圖是網(wǎng)絡(luò)節(jié)點(diǎn)上的網(wǎng)絡(luò)實(shí)現(xiàn),需要結(jié)合在一起來(lái)看。以流量流入網(wǎng)絡(luò)節(jié)點(diǎn)方向?yàn)槔?,從底層物理網(wǎng)絡(luò)流量通過(guò)eth1進(jìn)入ovs br-eth1(Overlay模型中為ovs br-tun)開(kāi)始分析:
1)ovs br-eth1將網(wǎng)絡(luò)節(jié)點(diǎn)與計(jì)算節(jié)點(diǎn)連接起來(lái),根據(jù)neutron-server中OVS Plugin的指導(dǎo),完成流量送入網(wǎng)絡(luò)節(jié)點(diǎn)前的處理:根據(jù)底層物理網(wǎng)絡(luò)租戶VLAN與本地租戶VLAN間的映射關(guān)系進(jìn)行VLAN ID的轉(zhuǎn)換(Overlay模型中此處進(jìn)行解封裝,并進(jìn)行VNI與本地租戶VLAN ID間的映射)。注意,雖然同一租戶在底層物理網(wǎng)絡(luò)上的VLAN ID(Overlay模型中為VNI)唯一,但是在網(wǎng)絡(luò)節(jié)點(diǎn)與計(jì)算節(jié)點(diǎn),不同計(jì)算節(jié)點(diǎn)中同一租戶對(duì)應(yīng)的本地VLAN ID可能有所不同。另外由于網(wǎng)絡(luò)節(jié)點(diǎn)也要在ovs br-int上使用本地VLAN,而租戶跨網(wǎng)段流量與公網(wǎng)流量都要經(jīng)過(guò)網(wǎng)絡(luò)節(jié)點(diǎn),因此使用單個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)時(shí),Neutron最多能支持4K租戶,可采用部署多個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)的方式來(lái)解決這一問(wèn)題。
2)送入網(wǎng)絡(luò)節(jié)點(diǎn)的流量,由ovs br-eth1(ovs br-tun)通過(guò)veth-pair送給ovs br-int,ovs br-int連接了本地不同的namespace,包括實(shí)現(xiàn)dhcp功能的dhcp-agent——dnsmasq,以及實(shí)現(xiàn)路由功能的l3-agent——router。Dnsmasq負(fù)責(zé)給對(duì)應(yīng)租戶的虛擬機(jī)分配IP地址,而router負(fù)責(zé)處理租戶內(nèi)跨網(wǎng)段流量以及公網(wǎng)流量。不同的租戶有不同的dnsmasq和router實(shí)例,因此不同租戶間可以實(shí)現(xiàn)IP地址的復(fù)用。
3)Router namesapce通過(guò)qr接口(Quantum Router)接收到租戶內(nèi)跨網(wǎng)段流量以及公網(wǎng)流量,在ns的IP內(nèi)核中對(duì)跨網(wǎng)段流量進(jìn)行路由,改寫(xiě)MAC地址并通過(guò)相應(yīng)的qr接口向ovs br-int送出數(shù)據(jù)包。在ns的IP內(nèi)核中對(duì)公網(wǎng)流量進(jìn)行NAT,并通過(guò)qg接口(Quantum Gateway)發(fā)送給ovs br-ex。
4)Ovs br-ex通過(guò)關(guān)物理聯(lián)宿主機(jī)的硬件網(wǎng)卡eth1將流量送至Internet路由器。
5)上述兩幅圖中,ovs br-int與ovs br-ex間有直連,據(jù)說(shuō)主要是防止l3-agent出現(xiàn)問(wèn)題時(shí)能夠保證流量不中斷,但實(shí)際上看來(lái)很少出現(xiàn)此問(wèn)題。
上圖是在網(wǎng)上看過(guò)的更加細(xì)致,更為全面的一張圖,圖中清晰地展示了Neutron對(duì)多種L2技術(shù)(VLAN、VxLAN、GRE)共同運(yùn)行的支持。圖中的82599/i350/mellonax是硬件廠商搞出的具備轉(zhuǎn)發(fā)功能的網(wǎng)卡,能夠避免虛擬交換機(jī)帶來(lái)的資源消耗,并能夠加快轉(zhuǎn)發(fā)速率。一塊這樣的網(wǎng)卡能虛擬出63個(gè)VF,每個(gè)VF就好像一個(gè)獨(dú)立的物理網(wǎng)卡一樣,通過(guò)將VF直接掛到虛擬機(jī)上,能夠?qū)崿F(xiàn)轉(zhuǎn)發(fā)性能的大幅度提高。
以上介紹了OpenStack中網(wǎng)絡(luò)組件的演進(jìn),以及Neutron組網(wǎng)的基本原理。下一節(jié)我們將對(duì)Neutron的軟件實(shí)現(xiàn)進(jìn)行簡(jiǎn)單的介紹。