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