使用Linux網(wǎng)絡(luò)設(shè)備模擬真實(shí)網(wǎng)絡(luò)滿足IaaS環(huán)境要求
Linux上虛擬網(wǎng)絡(luò)與真實(shí)網(wǎng)絡(luò)的映射
隨著云計(jì)算技術(shù)的發(fā)展,如何以類似物理網(wǎng)絡(luò)的方式分割虛擬網(wǎng)絡(luò)成為熱點(diǎn),物理網(wǎng)絡(luò)也引入了更多支持虛擬化的網(wǎng)絡(luò)技術(shù),使得問(wèn)題更加復(fù)雜。本文將闡述在 Linux 上如何模擬出傳統(tǒng)網(wǎng)絡(luò)及支持虛擬化技術(shù)的網(wǎng)絡(luò) ,并介紹其原理。
虛擬化環(huán)境中的網(wǎng)絡(luò)問(wèn)題
在提供 IaaS 服務(wù)的云計(jì)算環(huán)境中,每個(gè)用戶都能得到一個(gè)虛擬的計(jì)算機(jī),而這些虛擬機(jī)器以密集的方式運(yùn)行在后臺(tái)服務(wù)器集群中。虛擬機(jī)的一個(gè)特點(diǎn)是提供給用戶類似于物理機(jī)器的體驗(yàn),而現(xiàn)實(shí)世界中的物理機(jī)器能通過(guò)各種網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)組網(wǎng)。如何在虛擬環(huán)境中方便快捷地創(chuàng)建和現(xiàn)實(shí)中一樣的網(wǎng)絡(luò),成為一個(gè)新的挑戰(zhàn)。
圖 1.物理網(wǎng)絡(luò)映射問(wèn)題例子
圖 1 為一個(gè)網(wǎng)絡(luò)映射問(wèn)題的例子。圖中左邊是現(xiàn)實(shí)世界中一個(gè)常見(jiàn)的網(wǎng)絡(luò)環(huán)境:四臺(tái) PC 通過(guò)各自的物理網(wǎng)卡組成了兩個(gè)子網(wǎng),兩個(gè)子網(wǎng)中的 PC 默認(rèn)情況下是不能通訊的,也就是說(shuō)他們被物理隔離了。圖 1 的右邊顯示了虛擬化環(huán)境下的情景,四個(gè)虛擬機(jī)同時(shí)運(yùn)行在一個(gè)物理主機(jī)上,并且需要象圖 1 左邊的真實(shí)環(huán)境一樣劃分出兩個(gè)子網(wǎng)并隔離。如何才能做到這一點(diǎn),或者說(shuō)如何簡(jiǎn)單方便的創(chuàng)建出和圖 1 左邊部分類似的網(wǎng)絡(luò)環(huán)境,成為虛擬化里必須要解決的一個(gè)問(wèn)題。
虛擬化環(huán)境中模擬網(wǎng)絡(luò)的主要方法
為方便理解,本文把虛擬化環(huán)境中模擬現(xiàn)實(shí)網(wǎng)絡(luò)的方法分為兩種:使用傳統(tǒng)網(wǎng)絡(luò)技術(shù),或使用虛擬化網(wǎng)絡(luò)擴(kuò)展技術(shù)。傳統(tǒng)網(wǎng)絡(luò)技術(shù)主要指在虛擬化技術(shù)流行以前,現(xiàn)實(shí)世界中已經(jīng)存在的以太網(wǎng)絡(luò),包括傳統(tǒng) IP 網(wǎng)絡(luò)、802.1Q VLAN 網(wǎng)絡(luò),對(duì)它們 Linux 已經(jīng)有良好支持,用戶可以配置這些 Linux 設(shè)備以完成對(duì)現(xiàn)實(shí)網(wǎng)絡(luò)的模擬。虛擬化網(wǎng)絡(luò)擴(kuò)展技術(shù)主要指為應(yīng)對(duì)云計(jì)算與虛擬化環(huán)境帶來(lái)的挑戰(zhàn)而新出現(xiàn)的網(wǎng)絡(luò)技術(shù),包括 802.1Qbg 和 802.1Qbh 網(wǎng)絡(luò)。
虛擬化環(huán)境中網(wǎng)絡(luò)模型說(shuō)明
圖 2 本文使用的網(wǎng)絡(luò)模型說(shuō)明
為方便閱讀,上圖列出了本文將使用的網(wǎng)絡(luò)元素。圖中左列表示現(xiàn)實(shí)世界中存在的網(wǎng)絡(luò)元素,分別為電腦終端、二層交換機(jī)、路由器、網(wǎng)關(guān)、支持 802.1Q VLAN 的交換機(jī)、三層交換機(jī)、物理網(wǎng)卡、支持 Hairpin 模式的交換機(jī)。圖中中列為虛擬化環(huán)境中的元素,分別為虛擬機(jī),Linux Bridge、Linux 路由表、Linux iptables、Host 主機(jī)。棕色虛線框表示以太網(wǎng)廣播域,黑色虛線框表示物理捆綁關(guān)系。圖中右列為 Linux 系統(tǒng)里的網(wǎng)絡(luò)設(shè)備模型,分別為 TAP 設(shè)備、VETH 設(shè)備、工作在 VEPA 模式的 MACVLAN 設(shè)備、工作在 Bridge 模式的 MACVLAN 設(shè)備、工作在 Passthrough 模式的 MACVLAN 設(shè)備、SRIOV 的虛擬 VF 設(shè)備、VLAN 設(shè)備,下文將有對(duì)它們的簡(jiǎn)介。
使用傳統(tǒng)網(wǎng)絡(luò)技術(shù)模擬現(xiàn)實(shí)網(wǎng)絡(luò)
Linux Host 側(cè)使用的網(wǎng)絡(luò)元素簡(jiǎn)介
Linux 主要使用以下三種設(shè)備模型:Bridge、TAP、VETH、VLAN。Bridge 設(shè)備是基于內(nèi)核實(shí)現(xiàn)的二層數(shù)據(jù)交換設(shè)備,其作用類似于現(xiàn)實(shí)世界中的二級(jí)交換機(jī)。TAP 設(shè)備是一種工作在二層協(xié)議的點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)設(shè)備,每一個(gè) TAP 設(shè)備都有一個(gè)對(duì)應(yīng)的 Linux 字符設(shè)備,用戶程序可以通過(guò)對(duì)字符設(shè)備的讀寫(xiě)操作,完成與 Linux 內(nèi)核網(wǎng)絡(luò)協(xié)議棧的數(shù)據(jù)交換工作,在虛擬化環(huán)境中經(jīng)常被模擬器使用。VETH 設(shè)備是一種成對(duì)出現(xiàn)的點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)設(shè)備,從一段輸入的數(shù)據(jù)會(huì)從另一端改變方向輸出,通常用于改變數(shù)據(jù)方向,或連接其它網(wǎng)絡(luò)設(shè)備。VLAN 設(shè)備是以母子關(guān)系出現(xiàn)的一組設(shè)備,是 Linux 里對(duì) 802.1.Q VLAN 技術(shù)的部分實(shí)現(xiàn),主要完成對(duì) 802.1.Q VLAN Tag 的處理。
模擬傳統(tǒng)以太網(wǎng)
圖 3 .現(xiàn)實(shí)世界中的傳統(tǒng)以太網(wǎng)絡(luò) A
上圖為一個(gè)典型的傳統(tǒng)以太網(wǎng)結(jié)構(gòu):5 個(gè)終端機(jī)器通過(guò)各自的網(wǎng)卡連接接入層的交換機(jī),交換機(jī)再通過(guò)匯聚端口連接第二級(jí)交換機(jī),進(jìn)而接入作為網(wǎng)關(guān)的路由器,路由器通過(guò) NAT(Net Address Translate)轉(zhuǎn)發(fā)數(shù)據(jù)到外界網(wǎng)絡(luò),從而構(gòu)成一個(gè)封閉但是可以連接外網(wǎng),并且只占有一個(gè)公共 IP 的私網(wǎng)環(huán)境。由于所有的終端都在同一個(gè)二級(jí)交換機(jī)下,根據(jù)以太網(wǎng)協(xié)議,二層的廣播報(bào)文將在整個(gè)網(wǎng)絡(luò)內(nèi)傳遍,構(gòu)成了潛在的廣播風(fēng)暴風(fēng)險(xiǎn)。類似的網(wǎng)絡(luò)結(jié)構(gòu)廣泛存在于公司、小區(qū)、家庭用戶中。
圖 4 .虛擬網(wǎng)絡(luò) A_V0
上圖所示為虛擬化情況下,對(duì)網(wǎng)絡(luò) A 的一種比較準(zhǔn)確的模擬。四臺(tái)虛擬機(jī)通過(guò) TAP 設(shè)備連接到接入層 Bridge 設(shè)備,接入層 Bridge 設(shè)備通過(guò)一對(duì) VETH 設(shè)備連接到二級(jí) Bridge 設(shè)備,主機(jī)通過(guò)一對(duì) VETH 設(shè)備接入二級(jí) Bridge 設(shè)備。二級(jí) Bridge 設(shè)備進(jìn)一步通過(guò) Linux 路由表,IP Tables 與物理網(wǎng)卡形成數(shù)據(jù)轉(zhuǎn)發(fā)關(guān)系,最終和外部物理網(wǎng)絡(luò)連接。此圖中的元素與網(wǎng)絡(luò) A 中的元素近乎一一對(duì)應(yīng),Bridge 相當(dāng)于現(xiàn)實(shí)世界中的二層交換機(jī),VETH 設(shè)備相當(dāng)于連接 Bridge 的網(wǎng)線,虛擬機(jī)看到的網(wǎng)絡(luò)和網(wǎng)絡(luò) A 的物理機(jī)一樣,廣播域包括所有虛擬用戶終端。但在通常情況下,虛擬機(jī)不一定需要二級(jí)的 Bridge 同時(shí)存在,它僅僅需要數(shù)據(jù)的轉(zhuǎn)發(fā)功能,因此為了提高效率一般改變虛擬網(wǎng)絡(luò)配置只保留最核心的功能。
圖 5 .虛擬網(wǎng)絡(luò) A_V1
上圖為虛擬化環(huán)境中一種常用的網(wǎng)絡(luò)配置,對(duì)比網(wǎng)絡(luò) A_V0 有如下變化:不再一一映射網(wǎng)絡(luò) A,省去二級(jí) Bridge,省去 VETH 設(shè)備。這種情況下,虛擬機(jī)仍然能通過(guò)虛擬網(wǎng)關(guān)上網(wǎng),只不過(guò)探測(cè)不到二級(jí) Bridge 的存在。由于效率較高,這種一級(jí) Bridge 加 NAT 的網(wǎng)絡(luò)被選為 Libvirt 的默認(rèn)虛擬網(wǎng)絡(luò)。圖中的 Bridge 設(shè)備總是連接有一個(gè) MAC 為 52:xx:xx:xx:xx:xx 的 TAP 設(shè)備,原因是 Linux 內(nèi)核里 Bridge 的實(shí)現(xiàn)有一個(gè)缺陷:當(dāng)加入的設(shè)備 MAC 為最小 MAC 時(shí),MAC 學(xué)習(xí)會(huì)打斷 Bridge 的工作,因此事先創(chuàng)建一個(gè) MAC 值很小的設(shè)備 51:xx:xx:xx:xx:xx 繞過(guò)此問(wèn)題。圖中由于存在兩個(gè)子網(wǎng)(192.168.1.0 網(wǎng)段與 192.168.2.0 網(wǎng)段),因此使用了兩個(gè) Bridge 設(shè)備以區(qū)分出兩個(gè)廣播域,和網(wǎng)絡(luò) A 產(chǎn)生了區(qū)別,這在沒(méi)有 802.1Q VLAN 的情況下不可避免。
#p#
模擬 802.1Q VLAN 以太網(wǎng)
在虛擬化技術(shù)流行之間,通訊業(yè)界已制定了 802.1Q VLAN 標(biāo)準(zhǔn),以解決復(fù)雜網(wǎng)絡(luò)環(huán)境下廣播風(fēng)暴域的問(wèn)題。使用 802.1Q VLAN 技術(shù),可以把邏輯上的子網(wǎng)和物理上的子網(wǎng)分割開(kāi)來(lái),即物理上連接在同一交換機(jī)上的終端可以屬于不同邏輯子網(wǎng),處于不同邏輯子網(wǎng)的終端相互隔離,從而解決了前文描述的廣播域混亂的問(wèn)題。
圖 6 .現(xiàn)實(shí)世界中的 802.1Q VLAN 以太網(wǎng)絡(luò) B
上圖所示為一個(gè)現(xiàn)實(shí)世界中的 802.1Q VLAN 網(wǎng)絡(luò)。六臺(tái)電腦終端通過(guò)一級(jí)交換機(jī)接入網(wǎng)絡(luò),分屬 VLAN 10、VLAN 20、VLAN 30。做為例子,圖中左側(cè)的交換機(jī)不支持 802.1Q VLAN,導(dǎo)致其連接的兩臺(tái)終端處于一個(gè)廣播域中,盡管它們屬于不同子網(wǎng)。作為對(duì)比,圖中右側(cè)的交換機(jī)支持 802.1Q VLAN,通過(guò)正確配置正確切割了子網(wǎng)的廣播域,從而隔離了分屬不同網(wǎng)段的終端。在連接外網(wǎng)之間,需要一個(gè)支持 802.1Q VLAN 的三層交換機(jī),在進(jìn)行數(shù)據(jù)外發(fā)時(shí)剝離 VLAN Tag,收到數(shù)據(jù)時(shí)根據(jù) IP 信息轉(zhuǎn)發(fā)到正確的 VLAN 子網(wǎng)。路由器根據(jù) IP 信息進(jìn)行 NAT 轉(zhuǎn)換最終連接外網(wǎng)。
圖 7.虛擬網(wǎng)絡(luò) B_V0
上圖能在虛擬化的條件下對(duì)網(wǎng)絡(luò) B 進(jìn)行較精確的模擬,六臺(tái)虛擬機(jī)將和網(wǎng)絡(luò) B 中的真實(shí) PC 看到一樣的網(wǎng)絡(luò)環(huán)境。Host C 上的 Bridge、VLAN Device 與物理網(wǎng)卡共同完成了網(wǎng)絡(luò) B 中的支持 802.1Q VLAN 的一級(jí)交換機(jī)的功能,從而隔離邏輯子網(wǎng)。Host B 上的 Bridge 僅僅起連接物理網(wǎng)卡與虛擬機(jī)的作用。Host A 上的 Bridge 相當(dāng)于普通交換機(jī),和網(wǎng)絡(luò) B 一樣存在廣播域交叉問(wèn)題。
圖 8 .虛擬網(wǎng)絡(luò) B_V1
上圖通過(guò)在 Host A 與 Host B 上引入 VLAN 設(shè)備,解決了 B_V0 中存在的廣播域交叉問(wèn)題,虛擬機(jī)已經(jīng)能正確用使用相互隔離的子網(wǎng)。大多數(shù)情況下虛擬機(jī)并不關(guān)心 Bridge 以上部分的網(wǎng)絡(luò)情況,只要求正確隔離邏輯子網(wǎng),并且他們可以運(yùn)行在同一個(gè) Host 上,因此常把網(wǎng)絡(luò)加以變換簡(jiǎn)化。
圖 9.虛擬網(wǎng)絡(luò) B_V2
上圖表示了一個(gè)經(jīng)常在虛擬化中使用的 802.1Q VLAN 網(wǎng)絡(luò)。對(duì)于所有虛擬機(jī)來(lái)說(shuō),它們處于和網(wǎng)絡(luò) B 相同的邏輯子網(wǎng)中,并且由于 VLAN Device 的引入,避免了 B 中的 VLAN 10 與 VLAN 20 的廣播域交叉問(wèn)題。多個(gè)虛擬機(jī)需要接入同一個(gè) VLAN 時(shí),只需使用一個(gè) Bridge 來(lái)擴(kuò)展,而不必像現(xiàn)實(shí)世界中的交換機(jī)那樣使用多級(jí)交換機(jī)進(jìn)行數(shù)據(jù)匯聚,因?yàn)?Bridge 擁有近乎無(wú)限多個(gè)端口用于連接其他設(shè)備,沒(méi)有物理端口數(shù)限制。物理網(wǎng)卡輸出的將是帶 VLAN Tag 的數(shù)據(jù),和網(wǎng)絡(luò) B 一樣,需要一個(gè)支持 802.1Q VLAN 的三層交換機(jī)進(jìn)行處理。
#p#
使用虛擬化網(wǎng)絡(luò)擴(kuò)展技術(shù)模擬現(xiàn)實(shí)網(wǎng)絡(luò)
網(wǎng)絡(luò)標(biāo)準(zhǔn)側(cè)的擴(kuò)展技術(shù)
針對(duì)云計(jì)算中的復(fù)雜網(wǎng)絡(luò)問(wèn)題,業(yè)界主要提出了兩種擴(kuò)展技術(shù)標(biāo)準(zhǔn):802.1Qbg 與 802.1Qbh。802.1Qbh Bridge Port Extension 主要由 Vmware 與 Cisco 提出,嘗試從接入層到匯聚層提供一個(gè)完整的虛擬化網(wǎng)絡(luò)解決方案,盡可能達(dá)到軟件定義一個(gè)可控網(wǎng)絡(luò)的目的。它擴(kuò)展了傳統(tǒng)的網(wǎng)絡(luò)協(xié)議,因此需要新的網(wǎng)絡(luò)設(shè)備支持,成本較高。802.1Qbg Edge Virtual Bridging (EVB) 主要由 HP 等公司聯(lián)合提出,嘗試以較低成本利用現(xiàn)有設(shè)備改進(jìn)軟件模擬的網(wǎng)絡(luò)。本文主要針對(duì)后者做解析。
802.1Qbg 的一個(gè)核心概念是 VEPA(Virtual Ethernet Port Aggregator ),簡(jiǎn)單來(lái)說(shuō)它通過(guò)端口匯聚和數(shù)據(jù)分類轉(zhuǎn)發(fā),把 Host 上原來(lái)由 CPU 和軟件來(lái)做的網(wǎng)絡(luò)處理工作轉(zhuǎn)移到一級(jí)交換機(jī)上,減少 Host CPU 負(fù)載,同時(shí)使得在一級(jí)的交換機(jī)上做虛擬機(jī)網(wǎng)絡(luò)流量監(jiān)控成為可能,從而更清晰地分割服務(wù)器與網(wǎng)絡(luò)設(shè)備的工作范圍,方便系統(tǒng)的管理。
圖 10.VEPA 概念圖(來(lái)自 09 年 HP VEPA 研討會(huì),略做修改)
上圖顯示了 VEPA 中的基本概念:在物理終端上,即虛擬機(jī)運(yùn)行的 Host 上,需要一個(gè)設(shè)備將虛擬端口根據(jù)一定的規(guī)則進(jìn)行分組,完成端口分組功能(Port Group)。同時(shí)這個(gè)設(shè)備能夠?qū)ν獬橄蟪霰环譃橐唤M的端口,將屬于同一組端口的數(shù)據(jù)一起投遞出去,完成端口匯聚功能(Port Aggregation)。圖中畫(huà)出了虛擬端口中的數(shù)據(jù)流向:所有來(lái)自虛擬端口的數(shù)據(jù)將和同組數(shù)據(jù)匯聚后投遞到臨近的一級(jí)交換機(jī)上,物理終端不再進(jìn)行二層協(xié)議解析處理。同一物理終端里的虛擬端口之間的通訊,也必須通過(guò)一級(jí)交換機(jī)轉(zhuǎn)發(fā)回來(lái),而不能走捷徑在物理終端內(nèi)部進(jìn)行轉(zhuǎn)發(fā),會(huì)增加一些一級(jí)交換機(jī)的流量負(fù)載。這樣做的好處是網(wǎng)絡(luò)處理的任務(wù)重新回到了專用網(wǎng)絡(luò)設(shè)備端,同時(shí)所有的虛擬機(jī)網(wǎng)絡(luò)流量變的對(duì)網(wǎng)絡(luò)設(shè)備透明,方便網(wǎng)絡(luò)管理員使用專用網(wǎng)絡(luò)設(shè)備進(jìn)行管控,不再與 Host Server 牽扯不清。需要注意的是,VEPA 模式只能用在接入層的一級(jí)交換機(jī)上,網(wǎng)絡(luò)里不能同時(shí)存在兩層 VEPA 設(shè)備,顧稱之為邊緣虛擬化。
圖 11.802.1Qbg 小結(jié)(來(lái)自 09 年 HP VEPA 研討會(huì),略做修改)
上圖為 802.1Qbg 技術(shù)總結(jié)圖:802.1Qbg 也在不斷發(fā)展,VEB(Virtual Ethernet Bridge)表示虛擬機(jī)接入的一級(jí)數(shù)據(jù)交換功能模塊,在 Linux 里可以看成用 Bridge 設(shè)備提供的 Host 內(nèi)數(shù)據(jù)交換功能。Tag-less VEPA 為前文描述的 VEPA 數(shù)據(jù)流導(dǎo)出模式。這兩種模式下由于通訊協(xié)議沒(méi)有被修改,因此可以利用現(xiàn)有設(shè)備以很低的成本實(shí)現(xiàn),其中 VEPA 模式只要刷新現(xiàn)有的交換機(jī)程序使其支持 Hairpin 模式完成數(shù)據(jù)的回傳即可。作為長(zhǎng)期解決方案,802.1Qbg 計(jì)劃支持 VN-tagged 模式,即擴(kuò)展通信協(xié)議使用新的 Tag 來(lái)標(biāo)記數(shù)據(jù)。和 802.1Qbh 一樣,這必將需要新的硬件支持,帶來(lái)成本的上升。
Linux Host 側(cè)的擴(kuò)展技術(shù)
為支持新的虛擬化網(wǎng)絡(luò)技術(shù),Linux 引入了新的網(wǎng)絡(luò)設(shè)備模型:MACVTAP。MACVTAP 的實(shí)現(xiàn)基于傳統(tǒng)的 MACVLAN。和 TAP 設(shè)備一樣,每一個(gè) MACVTAP 設(shè)備擁有一個(gè)對(duì)應(yīng)的 Linux 字符設(shè)備,并擁有和 TAP 設(shè)備一樣的 IOCTL 接口,因此能直接被 KVM/Qemu 使用,方便地完成網(wǎng)絡(luò)數(shù)據(jù)交換工作。引入 MACVTAP 設(shè)備的目標(biāo)是:簡(jiǎn)化虛擬化環(huán)境中的交換網(wǎng)絡(luò),代替?zhèn)鹘y(tǒng)的 Linux TAP 設(shè)備加 Bridge 設(shè)備組合,同時(shí)支持新的虛擬化網(wǎng)絡(luò)技術(shù),如 802.1 Qbg。
圖 12 Linux MACVTAP 設(shè)備原理
上圖詳細(xì)解釋了 MACVTAP 設(shè)備原理。MACVTAP 設(shè)備和 VLAN 設(shè)備類似,是以一對(duì)多的母子關(guān)系出現(xiàn)的。在一個(gè)母設(shè)備上可以創(chuàng)建多個(gè) MACVTAP 子設(shè)備,一個(gè) MACVTAP 設(shè)備只有一個(gè)母設(shè)備,MACVTAP 子設(shè)備可以做為母設(shè)備,再一次嵌套的創(chuàng)建 MACVTAP 子設(shè)備。母子設(shè)備之間被隱含的橋接起來(lái),母設(shè)備相當(dāng)于現(xiàn)實(shí)世界中的交換機(jī) TRUNK 口。實(shí)際上當(dāng) MACVTAP 設(shè)備被創(chuàng)建并且模式不為 Passthrough 時(shí),內(nèi)核隱含的創(chuàng)建了 MACVLAN 網(wǎng)絡(luò),完成轉(zhuǎn)發(fā)功能。MACVTAP 設(shè)備有四種工作模式:Bridge、VEPA、Private,Passthrough。Bridge 模式下,它完成與 Bridge 設(shè)備類似功能,數(shù)據(jù)可以在屬于同一個(gè)母設(shè)備的子設(shè)備間交換轉(zhuǎn)發(fā),虛擬機(jī)相當(dāng)于簡(jiǎn)單接入了一個(gè)交換機(jī)。當(dāng)前的 Linux 實(shí)現(xiàn)有一個(gè)缺陷,此模式下 MACVTAP 子設(shè)備無(wú)法和 Linux Host 通訊,即虛擬機(jī)無(wú)法和 Host 通訊,而使用傳統(tǒng)的 Bridge 設(shè)備,通過(guò)給 Bridge 設(shè)置 IP 可以完成。VEPA 模式是對(duì) 802.1Qbg 標(biāo)準(zhǔn)中的 VEPA 機(jī)制的部分軟件實(shí)現(xiàn),工作在此模式下的 MACVTAP 設(shè)備簡(jiǎn)單的將數(shù)據(jù)轉(zhuǎn)發(fā)到母設(shè)備中,完成數(shù)據(jù)匯聚功能,通常需要外部交換機(jī)支持 Hairpin 模式才能正常工作。Private 模式和 VEPA 模式類似,區(qū)別是子 MACVTAP 之間相互隔離。Passthrough 模式下,內(nèi)核的 MACVLAN 數(shù)據(jù)處理邏輯被跳過(guò),硬件決定數(shù)據(jù)如何處理,從而釋放了 Host CPU 資源。
圖中畫(huà)出了 SR-IOV(Single Root I/O Virtualization)網(wǎng)絡(luò)設(shè)備存在的情況下,通過(guò) MACVTAP 設(shè)備使用 VF 的一種情況。其中 VF 設(shè)備是支持 SR-IOV 的物理網(wǎng)卡虛擬出來(lái)的虛擬網(wǎng)卡,每一個(gè)虛擬網(wǎng)卡都可以被當(dāng)成一個(gè)真實(shí)的網(wǎng)卡使用,虛擬網(wǎng)卡之間相互隔離,從而分享了硬件資源。
圖 13 MACVTAP Passthrough 與 PCI Passthrough
MACVTAP Passthrough 概念與 PCI Passthrough 概念不同,上圖詳細(xì)解釋了兩種情況的區(qū)別。PCI Passthrough 針對(duì)的是任意 PCI 設(shè)備,不一定是網(wǎng)絡(luò)設(shè)備,目的是讓 Guest OS 直接使用 Host 上的 PCI 硬件以提高效率。以 X86 平臺(tái)為例,數(shù)據(jù)將通過(guò)需要硬件支持的 VT-D 技術(shù)從 Guest OS 直接傳遞到 Host 硬件上。這樣做固然效率很高,但因?yàn)槟M器失去了對(duì)虛擬硬件的控制,難以同步不同 Host 上的硬件狀態(tài),因此當(dāng)前在使用 PCI Passthrough 的情況下無(wú)法做動(dòng)態(tài)遷移。MACVTAP Passthrough 僅僅針對(duì) MACVTAP 網(wǎng)絡(luò)設(shè)備,目的是饒過(guò)內(nèi)核里 MACVTAP 的部分軟件處理過(guò)程,轉(zhuǎn)而交給硬件處理。在虛擬化條件下,數(shù)據(jù)還是會(huì)先到達(dá)模擬器 I/O 層,再轉(zhuǎn)發(fā)到硬件上。這樣做效率有損失,但模擬器仍然控制虛擬硬件的狀態(tài)及數(shù)據(jù)的走向,可以做動(dòng)態(tài)遷移。綜上所述,對(duì)于一個(gè) SRIOV 網(wǎng)絡(luò)設(shè)備,可以用兩種模式使用它:MACVTAP Passthrough 與 PCI Passthrough,取決于用戶對(duì)效率與功能的選擇。
#p#
模擬傳統(tǒng)以太網(wǎng)
圖 14 .虛擬網(wǎng)絡(luò) A_M0
此圖表示使用 MACVTAP 設(shè)備對(duì)現(xiàn)實(shí)網(wǎng)絡(luò) A 進(jìn)行模擬的情況。為減少圖例,圖中的 MACVTAP 可以工作在 Bridge 或 VEPA 模式,曲線分別表示兩種模式下數(shù)據(jù)的流向。工作在 Bridge 模式下時(shí),數(shù)據(jù)無(wú)法從虛擬機(jī)流向寄主 Linux 系統(tǒng)用戶程序。工作在 VEPA 模式下時(shí)沒(méi)有此限制,但一級(jí)交換機(jī)必須工作在 Hairpin 模式。此虛擬網(wǎng)絡(luò)類似地映射了網(wǎng)絡(luò) A,但仍然存在廣播域混亂問(wèn)題,原因是虛擬端口沒(méi)有被分組。如前文所述,工作在 VEPA 模式的 Linux MACVTAP 設(shè)備只實(shí)現(xiàn)了數(shù)據(jù)匯聚功能。對(duì)比網(wǎng)絡(luò) A_V1,可以看到 MACVTAP 設(shè)備代替了 TAP 與 Bridge 設(shè)備組合。此網(wǎng)絡(luò)沒(méi)有使用寄主 Linux 系統(tǒng)的路由和 IP Tables,這些任務(wù)重新由外界物理網(wǎng)絡(luò)設(shè)備承擔(dān),這也是 802.1Qbg 技術(shù)的目標(biāo)之一,即讓專業(yè)的網(wǎng)絡(luò)設(shè)備承擔(dān)網(wǎng)絡(luò)數(shù)據(jù)處理任務(wù),因此使用 MACVTAP 設(shè)備無(wú)法像網(wǎng)絡(luò) A_V1 那樣使用寄主 Linux 系統(tǒng)的附屬網(wǎng)絡(luò)服務(wù)。
模擬 802.1Q VLAN 以太網(wǎng)
圖 15.虛擬網(wǎng)絡(luò) B_M0
上圖較為精確的用 MACVTAP 設(shè)備模擬了網(wǎng)絡(luò) B。Linux Bridge 設(shè)備與工作在 Bridge 模式下的 MACVTAP 設(shè)備都可以看成是對(duì) 802.1Qbg VEB 概念的軟件實(shí)現(xiàn)。Host C 上加入了 Linux VLAN 設(shè)備,參照 VEPA 標(biāo)準(zhǔn),VLAN Tag 可以用來(lái)對(duì)數(shù)據(jù)及虛擬端口進(jìn)行分組。在 Host C 上,工作在 VEPA 模式的 MACVTAP 設(shè)備完成了匯聚功能,VLAN 設(shè)備完成了分組功能,兩者組合形成了一個(gè)完整的對(duì) VEPA 技術(shù)的軟件實(shí)現(xiàn),從而正確的隔離了 Host C 上的虛擬機(jī)所處的邏輯子網(wǎng)。Host C 與工作在 Hairpin 模式的一級(jí)交換機(jī)組合,能導(dǎo)出 Host C 上所有虛擬機(jī)的網(wǎng)絡(luò)數(shù)據(jù)到網(wǎng)絡(luò)設(shè)備側(cè)進(jìn)行管控。讀者可以對(duì)比網(wǎng)絡(luò) B_V0 找出有哪些設(shè)備被 MACVTAP 設(shè)備代替。和網(wǎng)絡(luò) B_V0 一樣,Host A 上由于沒(méi)有引入 VLAN 設(shè)備,還存在廣播域交叉問(wèn)題。
圖 16 虛擬網(wǎng)絡(luò) B_M1
上圖通過(guò)在 Host A 與 Host B 上引入 VLAN 與 MACVTAP 設(shè)備,解決了網(wǎng)絡(luò) B_M0 中的廣播域問(wèn)題,與網(wǎng)絡(luò) B_V1 類似。
圖 17 .虛擬網(wǎng)絡(luò) B_M2
上圖將所有虛擬機(jī)放置到同一個(gè) Host 上,進(jìn)一步節(jié)省了硬件資源,形成與網(wǎng)絡(luò) B_V2 類似的環(huán)境。可以看到,此環(huán)境下數(shù)據(jù)的走向稍有不同:虛擬機(jī)之間的通訊必須通過(guò)外部交換機(jī),無(wú)法像 B_V2 那樣內(nèi)部完成。
圖 18.虛擬網(wǎng)絡(luò) B_M3
上圖所示為使用 MACVTAP Passthrough 技術(shù)的一種網(wǎng)絡(luò)配置,在不影響虛擬機(jī)動(dòng)態(tài)遷移功能的前提下,進(jìn)一步減少了寄主 Host CPU 負(fù)載,提高效率。
總結(jié)
虛擬化環(huán)境中的網(wǎng)絡(luò)看似復(fù)雜,其實(shí)質(zhì)是為虛擬客戶機(jī)創(chuàng)建和現(xiàn)實(shí)世界中類似的網(wǎng)絡(luò)結(jié)構(gòu)。本文詳細(xì)描述了 Linux 上虛擬網(wǎng)絡(luò)的結(jié)構(gòu)與意義,按照文中的原理,用戶可以零成本地使用 Linux 軟件實(shí)現(xiàn)的 Bridge、VLAN、MACVTAP 設(shè)備定制與現(xiàn)實(shí)世界類似的虛擬網(wǎng)絡(luò),也可以用非常低的成本按照 802.1Qbg 中的 VEPA 模型創(chuàng)建升級(jí)版的虛擬網(wǎng)絡(luò),引出虛擬機(jī)網(wǎng)絡(luò)流量,減少 Host 服務(wù)器負(fù)載。當(dāng)有支持 SRIOV 的網(wǎng)卡存在時(shí),可以使用 Passthrough 技術(shù)近一步減少 Host 負(fù)載。