網(wǎng)絡(luò)虛擬化
1.為什么要虛擬化
對(duì)于傳統(tǒng)網(wǎng)絡(luò)而言统抬,傳統(tǒng)網(wǎng)絡(luò)就是由各種網(wǎng)絡(luò)設(shè)備(如:交換機(jī)铸董,路由器)相連組成的一個(gè)網(wǎng)狀結(jié)構(gòu),任何人可以通過這個(gè)巨大的網(wǎng)絡(luò)實(shí)現(xiàn)互聯(lián)削茁。在傳統(tǒng)網(wǎng)絡(luò)環(huán)境中宙枷,每臺(tái)物理機(jī)會(huì)包含一個(gè)或多個(gè)網(wǎng)卡(NIC),一個(gè)主機(jī)要實(shí)現(xiàn)與其他主機(jī)的通信茧跋,要通過自身的網(wǎng)卡連接到外部的網(wǎng)絡(luò)設(shè)備慰丛,如交換機(jī)上。圖1所示:
在這種架構(gòu)下瘾杭,應(yīng)用的隔離將通過部署在不同物理機(jī)實(shí)現(xiàn)诅病,網(wǎng)絡(luò)的隔離通過在交換機(jī)中劃分VLAN實(shí)現(xiàn)。傳統(tǒng)網(wǎng)絡(luò)架構(gòu)利用率不高粥烁,并且當(dāng)要進(jìn)行擴(kuò)展時(shí)只能通過增加設(shè)備來實(shí)現(xiàn)贤笆,造成資源的浪費(fèi),因此讨阻,需要將網(wǎng)絡(luò)進(jìn)行虛擬化芥永。
2.虛擬化網(wǎng)絡(luò)架構(gòu)
利用虛擬化技術(shù)對(duì)物理機(jī)的物理資源進(jìn)行抽象,將一個(gè)物理網(wǎng)卡虛擬成多個(gè)虛擬網(wǎng)卡钝吮,通過虛擬機(jī)來隔離不同的應(yīng)用埋涧。并且可以通過虛擬化層的管理對(duì)資源進(jìn)行合理的利用并能動(dòng)態(tài)擴(kuò)容。架構(gòu)如圖2:
3.Linux下的虛擬化形式
3.1TAP/TUN/VETH
3.1 TAP/TUN/VETH
TAP/TUN 是 Linux 內(nèi)核實(shí)現(xiàn)的一對(duì)虛擬網(wǎng)絡(luò)設(shè)備奇瘦,TAP 工作在二層棘催,TUN 工作在三層。Linux 內(nèi)核通過 TAP/TUN 設(shè)備向綁定該設(shè)備的用戶空間程序發(fā)送數(shù)據(jù)链患,反之巧鸭,用戶空間程序也可以像操作物理網(wǎng)絡(luò)設(shè)備那樣瓶您,向 TAP/TUN 設(shè)備發(fā)送數(shù)據(jù)麻捻「偃裕基于 TAP 驅(qū)動(dòng),即可實(shí)現(xiàn)虛擬機(jī) vNIC 的功能贸毕,虛擬機(jī)的每個(gè) vNIC 都與一個(gè) TAP 設(shè)備相連郑叠,vNIC 之于 TAP 就如同 NIC 之于 eth。
當(dāng)一個(gè) TAP 設(shè)備被創(chuàng)建時(shí)明棍,在 Linux 設(shè)備文件目錄下會(huì)生成一個(gè)對(duì)應(yīng)的字符設(shè)備文件乡革,用戶程序可以像打開一個(gè)普通文件一樣對(duì)這個(gè)文件進(jìn)行讀寫。比如摊腋,當(dāng)對(duì)這個(gè) TAP 文件執(zhí)行 write 操作時(shí)沸版,相當(dāng)于 TAP 設(shè)備收到了數(shù)據(jù),并請(qǐng)求內(nèi)核接受它兴蒸,內(nèi)核收到數(shù)據(jù)后將根據(jù)網(wǎng)絡(luò)配置進(jìn)行后續(xù)處理视粮,處理過程類似于普通物理網(wǎng)卡從外界收到數(shù)據(jù)。當(dāng)用戶程序執(zhí)行 read 請(qǐng)求時(shí)橙凳,相當(dāng)于向內(nèi)核查詢 TAP 設(shè)備是否有數(shù)據(jù)要發(fā)送蕾殴,有的話則發(fā)送,從而完成 TAP 設(shè)備的數(shù)據(jù)發(fā)送岛啸。
TUN 則屬于網(wǎng)絡(luò)中三層的概念钓觉,數(shù)據(jù)收發(fā)過程和 TAP 是類似的,只不過它要指定一段 IPv4 地址或 IPv6 地址坚踩,并描述其相關(guān)的配置信息荡灾,其數(shù)據(jù)處理過程也是類似于普通物理網(wǎng)卡收到三層 IP 報(bào)文數(shù)據(jù)。
VETH 設(shè)備總是成對(duì)出現(xiàn)瞬铸,一端連著內(nèi)核協(xié)議棧卧晓,另一端連著另一個(gè)設(shè)備,一個(gè)設(shè)備收到內(nèi)核發(fā)送的數(shù)據(jù)后赴捞,會(huì)發(fā)送到另一個(gè)設(shè)備上去逼裆,這種設(shè)備通常用于容器中兩個(gè) namespace 之間的通信。
3.2 Bridge
- Bridge 也是 Linux 內(nèi)核實(shí)現(xiàn)的一個(gè)工作在二層的虛擬網(wǎng)絡(luò)設(shè)備赦政,但不同于 TAP/TUN 這種單端口的設(shè)備胜宇,Bridge 實(shí)現(xiàn)為多端口,本質(zhì)上是一個(gè)虛擬交換機(jī)恢着,具備和物理交換機(jī)類似的功能桐愉。Bridge 可以綁定其他 Linux 網(wǎng)絡(luò)設(shè)備作為從設(shè)備,并將這些從設(shè)備虛擬化為端口掰派,當(dāng)一個(gè)從設(shè)備被綁定到 Bridge 上時(shí)从诲,就相當(dāng)于真實(shí)網(wǎng)絡(luò)中的交換機(jī)端口上插入了一根連有終端的網(wǎng)線。如圖3所示靡羡,Bridge 設(shè)備 br0 綁定了實(shí)際設(shè)備 eth0 和 虛擬設(shè)備設(shè)備 tap0/tap1系洛,當(dāng)這些從設(shè)備接收到數(shù)據(jù)時(shí)俊性,會(huì)發(fā)送給 br0 ,br0 會(huì)根據(jù) MAC 地址與端口的映射關(guān)系進(jìn)行轉(zhuǎn)發(fā)描扯。