Linux中的虛擬網(wǎng)絡(luò)
現(xiàn)在計(jì)算又重新興盛起來(lái)。雖然虛擬化出現(xiàn)是在幾十年前,但通過商品硬件的使用,它真正的潛力現(xiàn)在才被認(rèn)識(shí)到。虛擬化加強(qiáng)了服務(wù)器負(fù)載的效率,但服務(wù) 器生態(tài)系統(tǒng)的其他部分也成為了未來(lái)加強(qiáng)的選項(xiàng)。許多人視虛擬化為 CPU,內(nèi)存和存儲(chǔ)的鞏固,但是這樣太過簡(jiǎn)單化解決方案了。網(wǎng)絡(luò)是虛擬化的一個(gè)關(guān)鍵方面,代表虛擬化設(shè)置中第一等的元素。
我們從問題的高層次開始探索,然后深入到 Linux® 構(gòu)建和支持的網(wǎng)絡(luò)虛擬化各種方法。
在傳統(tǒng)環(huán)境中(見圖 1 ),一系列物理服務(wù)器支持所需的應(yīng)用程序設(shè)置。為了實(shí)現(xiàn)服務(wù)器間的通信,每個(gè)服務(wù)器都包含一個(gè)或者多個(gè)網(wǎng)絡(luò)接口卡(NICs),它們連接到一個(gè)外部網(wǎng)絡(luò)設(shè) 施上。帶有網(wǎng)絡(luò)軟件棧的 NIC 通過網(wǎng)絡(luò)設(shè)施支持端點(diǎn)間的通信。正如圖 1 所示,這個(gè)在功能上表示為一個(gè)交換機(jī),它支持參與其中的端點(diǎn)間的高效數(shù)據(jù)包通信。
圖 1. 傳統(tǒng)網(wǎng)絡(luò)基礎(chǔ)架構(gòu)
服務(wù)器合并背后的關(guān)鍵改革是物理硬件的抽象,允許多操作系統(tǒng)和應(yīng)用程序共享硬件(見圖 2)。這一改革名為 hypervisor (或者 virtual machine [VM] monitor)。 每個(gè) VM(一個(gè)操作系統(tǒng)和應(yīng)用程序設(shè)置)視底層硬件為非共享的,一個(gè)完整機(jī)器,即使它們部分可能并不存在,或者被多個(gè) VM 共享。虛擬的 NIC(vNIC)就是一個(gè)例子。管理程序?yàn)槊總€(gè) VM 創(chuàng)建一個(gè)或者多個(gè) vNICs。這些 NICs 對(duì) VM 可以作為物理 NICs,但是它們實(shí)際上只表示 NIC 的接口。管理程序也允許虛擬網(wǎng)絡(luò)的動(dòng)態(tài)構(gòu)建,由虛擬交換機(jī)完成,支持可配置的 VM 端點(diǎn)間的通信。最后,管理程序還允許和物理網(wǎng)絡(luò)基礎(chǔ)架構(gòu)的通信,通過將服務(wù)器的物理 NICs 連接到管理程序的邏輯設(shè)施,允許管理程序中 VMs 間高效的通信,以及和外部網(wǎng)絡(luò)的高效通信。
虛擬網(wǎng)絡(luò)設(shè)施還支持其他有趣的革新,比如虛擬設(shè)備。除了虛擬網(wǎng)絡(luò)的元素以外,我們還關(guān)注這些內(nèi)容,作為該探索的一部分。
虛擬網(wǎng)絡(luò)設(shè)施的關(guān)鍵開發(fā)之一就是虛擬交換機(jī)的開發(fā)。虛擬交換機(jī)連接 vNICs 到服務(wù)器的物理 NICs,并且 —更重要的是—它將 vNICs 連接到服務(wù)器中的其他 vNICs,進(jìn)行本地通信。這之所以有趣是因?yàn)樵谝粋€(gè)虛擬交換機(jī)中,所受限制和網(wǎng)絡(luò)速度無(wú)關(guān),而是和內(nèi)存帶寬有關(guān),它允許本地 VMs 間的高效通信,并且最小化網(wǎng)絡(luò)設(shè)施的開銷。這個(gè)節(jié)省是源自物理網(wǎng)絡(luò)只用于服務(wù)器間的通信,服務(wù)期間的跨 VM 通信被隔離。
但是,因?yàn)?Linux 已經(jīng)在內(nèi)核中包含一個(gè) 2 層交換機(jī),所以有人可能會(huì)問,為什么會(huì)需要虛擬交換機(jī)?答案包括多個(gè)屬性,但是最重要之一的是由這些交換機(jī)類型的新分類定義的。新的類名為 分布式虛擬交換機(jī),它采用使底層服務(wù)器架構(gòu)更透明的方法,支持跨服務(wù)器橋接。一個(gè)服務(wù)器中的虛擬交換機(jī)能夠透明地和其他服務(wù)器中的虛擬交換機(jī)連接(見 圖 3),使服務(wù)器間(以及它們的虛擬接口)的 VM 遷移更簡(jiǎn)單,因?yàn)樗鼈兛梢赃B接到另一個(gè)服務(wù)器的分布式虛擬交換機(jī),并且透明地連接到它的虛擬交換網(wǎng)絡(luò)。
#p#
在這期間最重要的項(xiàng)目之一名為 Open vSwitch, 接下來(lái)本文會(huì)探討這部分內(nèi)容。
在服務(wù)器中隔離本地流量的一個(gè)問題就是流量不是外部可視的(例如,對(duì)網(wǎng)絡(luò)分析員)。實(shí)現(xiàn)通過各種計(jì)劃解決了這一問題,例如 OpenFlow,NetFlow 和 sFlow,它們還用于輸出遠(yuǎn)程訪問來(lái)控制和監(jiān)控流量。
分布式虛擬交換機(jī)的早期實(shí)現(xiàn)已經(jīng)結(jié)束,并且受限于管理程序?qū)S性O(shè)置的操作。但是在今天的云環(huán)境中,支持多管理程序共存的異構(gòu)環(huán)境是很理想的。
Open vSwitch 是一個(gè)多層的虛擬交換機(jī),在 Apache 2.0 許可下可用作為開放資源。截止 2010 年 5 月,Open vSwitch 已有版本 1.0.1 可用,并且支持一系列有用的功能。Open vSwitch 支持領(lǐng)先的開源管理程序解決方案,包括基于內(nèi)核的 VM(KVM),VirtualBox,Xen 和 XenServer。它還是當(dāng)前 Linux 橋模塊的下拉替換。
Open vSwitch 由交換機(jī)守護(hù),管理基于流的交換機(jī)的配套內(nèi)核模塊組成。還存在各種其他的守護(hù)程序和實(shí)體,用于管理交換機(jī)(特別是從 OpenFlow 方面)。您可以在用戶空間完全運(yùn)行 Open vSwitch,但是這么做會(huì)導(dǎo)致性能的下降。
除了為 VM 環(huán)境提供一個(gè)生產(chǎn)品質(zhì)的交換機(jī),Open vSwitch 還有令人印象深刻的功能路線圖,和其他相似的、專有的解決方案競(jìng)爭(zhēng)。
NIC 硬件的虛擬化以各種形式已經(jīng)存在了一段時(shí)間 — 在虛擬交換機(jī)出現(xiàn)之前。本節(jié)將說明實(shí)現(xiàn)和硬件加速的部分內(nèi)容,它們可用于改善網(wǎng)絡(luò)虛擬化的速度。
雖然 QEMU 是一個(gè)平臺(tái)模擬器,但它還提供各種硬件設(shè)備的軟件模擬,包括 NICs。此外,QEMU 還提供了用于 IP 地址分配的內(nèi)部 Dynamic Host Configuration Protocol 服務(wù)器。QEMU 和 KVM 一起運(yùn)作,提供平臺(tái)模擬和獨(dú)立的設(shè)備模擬,為基于 KVM 的虛擬化提供平臺(tái)。
virtio
是一個(gè) Linux 的輸入/輸出(I/O)準(zhǔn)虛擬化框架,它簡(jiǎn)化并加快了 VM 到管理程序的 I/O 通信。virtio
創(chuàng)建了 VM 和用于虛擬塊設(shè)備,通用的外圍組件互連(PCI)設(shè)備,網(wǎng)絡(luò)設(shè)備等的管理程序間 I/O 的標(biāo)準(zhǔn)化傳輸機(jī)制。
虛擬化在網(wǎng)絡(luò)棧中實(shí)現(xiàn)已經(jīng)有一段時(shí)間了,允許 VM 訪客網(wǎng)絡(luò)棧訪問主機(jī)網(wǎng)絡(luò)棧。計(jì)劃之二就是 TAP 和 TUN。TAP 是一個(gè)虛擬網(wǎng)絡(luò)內(nèi)核驅(qū)動(dòng),該驅(qū)動(dòng)實(shí)現(xiàn) Ethernet 設(shè)備,并在 Ethernet 框架級(jí)別操作。TAP 驅(qū)動(dòng)提供了 Ethernet “tap”,訪客 Ethernet 框架能夠通過它進(jìn)行通信。TUN(或者網(wǎng)絡(luò)“通道”)模擬網(wǎng)絡(luò)層設(shè)備,并且在 IP 數(shù)據(jù)包的較高層進(jìn)行通信,這些數(shù)據(jù)包提供一些優(yōu)化,因?yàn)榈讓?Ethernet 設(shè)備能夠管理 TUN 的 IP 數(shù)據(jù)包的 2 層框架。
I/O 虛擬化來(lái)自在硬件層上支持加速虛擬化的 PCI-Special Interest Group(SIG)的標(biāo)準(zhǔn)化計(jì)劃。特別是,Single-root IOV(SR-IOV)提供一個(gè)接口,通過它獨(dú)立的 PCI Express(PCIe)卡能夠作為多 PCIe 卡出現(xiàn)在眾多用戶面前,允許多個(gè)獨(dú)立的驅(qū)動(dòng)連接到 PCIe 卡,無(wú)需相互了解。SR-IOV 通過將虛擬功能擴(kuò)展到各種用戶來(lái)實(shí)現(xiàn),這是作為 PCIe 空間的物理功能,但是在卡中作為共享功能表示。
SR-IOV 帶給網(wǎng)絡(luò)虛擬化的好處就是性能。比起實(shí)現(xiàn)物理 NIC 共享的管理程序,卡自身實(shí)現(xiàn)復(fù)合,允許從訪客 VM I/O 接口直接到卡的通路。
#p#
Linux 今天包含對(duì) SR-IOV 的支持,這對(duì) KVM 管理程序很有好處。Xen 也包括對(duì) SR-IOV 的支持,允許它高效地向訪客 VMs 顯示 vNIC。對(duì) SR-IOV 的支持在 Open vSwitch 的路線圖上。
雖然相關(guān),但是虛擬 LANs(VLANs)是網(wǎng)絡(luò)虛擬化的物理方法。VLANs 提供創(chuàng)建跨分布網(wǎng)絡(luò)的虛擬網(wǎng)絡(luò)的能力,這樣就會(huì)出現(xiàn)不同的主機(jī)(在獨(dú)立的網(wǎng)絡(luò)上),如果它們是相同廣播域的一部分。VLANs 通過使用 VLAN 信息標(biāo)記框架完成這個(gè),用來(lái)識(shí)別特定 LAN(按照 Institute of Electrical and Electronics Engineers [IEEE] 802.1Q 標(biāo)準(zhǔn))的成員關(guān)系。主機(jī)和 VLAN 交換機(jī)一起運(yùn)作,進(jìn)行物理網(wǎng)絡(luò)虛擬化。然而,雖然 VLANs 提供獨(dú)立網(wǎng)絡(luò)的假象,但它們共享同一個(gè)網(wǎng)絡(luò)以及可用帶寬,影響阻塞帶來(lái)的結(jié)果。
許多針對(duì) I/O 的虛擬化加速開始出現(xiàn),尋址 NICs 和其他設(shè)備。Intel® Virtualization Technology for Directed I/O(VT-d)提供隔離 I/O 資源的功能來(lái)獲得改進(jìn)的可靠性和安全性,它包括重映射直接內(nèi)存訪問(使用多級(jí)頁(yè)表)和設(shè)備相關(guān)的中斷重映射,支持未修正的和虛擬化感知的訪客。Intel Virtual Machine Device Queues(VMDq)還通過硬件中的嵌入排序和智能排序,加速了在虛擬化設(shè)置中的網(wǎng)絡(luò)通信流,實(shí)現(xiàn)了管理程序較低的 CPU 利用率和總體系統(tǒng)性能的更大程度改善。Linux 包含對(duì)兩者的支持。
目前為止,本文探討了 NIC 設(shè)備和交換機(jī)的虛擬化,當(dāng)前實(shí)現(xiàn)的部分內(nèi)容,通過硬件加速虛擬化的部分方法?,F(xiàn)在,我們將這個(gè)討論擴(kuò)大到通常的網(wǎng)絡(luò)服務(wù)。
虛擬化范圍內(nèi)的有趣革新之一就是從服務(wù)器整合演化而來(lái)的生態(tài)系統(tǒng)。比起將應(yīng)用程序投入到特定的硬件版本,服務(wù)器的一部分和服務(wù)器內(nèi)擴(kuò)展服務(wù)的強(qiáng)大 VM 相隔離。這些 VMs 被稱為 虛擬設(shè)備, 因?yàn)樗鼈冴P(guān)注一個(gè)特定的應(yīng)用程序,被部署用于虛擬化設(shè)置。
虛擬設(shè)備通常連接到管理程序 — 或者有管理程序的良好網(wǎng)絡(luò)設(shè)置— 來(lái)擴(kuò)展特定的服務(wù)。這個(gè)之所以獨(dú)特是因?yàn)?,在合并服?wù)器中,處理功能的部分(例如核)和 I/O 帶寬能夠?yàn)樘摂M設(shè)備動(dòng)態(tài)地配置。這個(gè)功能使它更成本有效(因?yàn)橐粋€(gè)獨(dú)立的服務(wù)器并不會(huì)為它而被隔離),并且您能夠根據(jù)在服務(wù)器上運(yùn)行的其他應(yīng)用程序的需 求,動(dòng)態(tài)地改變它的功能。虛擬設(shè)備還能更易于管理,因?yàn)閼?yīng)用程序被綁定在操作系統(tǒng)中(在 VM 內(nèi))。無(wú)需特殊配置,因?yàn)?VM 是作為整體進(jìn)行預(yù)配置的。這對(duì)于虛擬設(shè)備來(lái)說是個(gè)值得考慮的好處,這也是今天它一直發(fā)展的原因。
虛擬設(shè)備已經(jīng)為許多企業(yè)軟件進(jìn)行了開發(fā),并且包括 WAN 優(yōu)化,路由器,虛擬專用網(wǎng),防火墻,防止/檢測(cè)入侵的系統(tǒng),郵件分類和管理等等。除了網(wǎng)絡(luò)服務(wù)以外,虛擬設(shè)備還用于存儲(chǔ),安全,應(yīng)用程序框架以及內(nèi)容管理。
曾幾何時(shí)一切都可管理還是物理上可實(shí)現(xiàn)的。但是今天,在我們不斷虛擬化的世界中,物理設(shè)備和服務(wù)已經(jīng)消失不見。物理網(wǎng)絡(luò)被虛擬化地分割,允許 通信隔離和跨地理實(shí)體的虛擬網(wǎng)絡(luò)的構(gòu)建。應(yīng)用程序消失在虛擬設(shè)備中,這些設(shè)備在強(qiáng)大服務(wù)器的核之間被分割,雖然為管理者添加了很多復(fù)雜性,但是也提供了更 好的靈活性,改善了可管理能力。當(dāng)然,Linux 就走在前沿。