越來(lái)越多的人關(guān)注新型容器網(wǎng)絡(luò)軟件,來(lái)運(yùn)行可擴(kuò)展的云應(yīng)用。就像我們看到的,網(wǎng)絡(luò)可以通過(guò)很多方式連接到容器,盡管最終選擇哪個(gè)容器還不確定,但是他們提供很多選項(xiàng)來(lái)滿足不同的基礎(chǔ)設(shè)施。
容器網(wǎng)絡(luò)和傳統(tǒng)的SDN有什么區(qū)別?
SDN系統(tǒng)還處于發(fā)展階段。它經(jīng)常被創(chuàng)建為物理網(wǎng)絡(luò)的邏輯版本,通過(guò)抽象的端口、網(wǎng)絡(luò)或子網(wǎng),又連接到邏輯網(wǎng)絡(luò)交換機(jī),并且連接到虛擬機(jī)上。作為服務(wù)項(xiàng)目的OpenStack網(wǎng)絡(luò)Neutron和其它SDN軟件,都支持這一概念。這對(duì)那些使用虛擬機(jī)的人來(lái)說(shuō)有很多優(yōu)勢(shì),因?yàn)樗麄兊墓ぷ髫?fù)載可以鏡像到物理服務(wù)器上。雖然虛擬機(jī)更容易和配置物理機(jī)來(lái)對(duì)比,但他們和現(xiàn)在基于容器的計(jì)算相比,相對(duì)來(lái)說(shuō)更穩(wěn)定。隨著微服務(wù)系統(tǒng)的發(fā)展,很多容器都可以被動(dòng)態(tài)配置并迅速刪除,所以用戶需要一種可以容納這種情況的網(wǎng)絡(luò)系統(tǒng)。
關(guān)于容器網(wǎng)絡(luò)的基礎(chǔ)知識(shí)以及其局限性
從根本上來(lái)說(shuō),一個(gè)和網(wǎng)絡(luò)相關(guān)的容器,反過(guò)來(lái),可能也會(huì)橋接到網(wǎng)絡(luò)接口。這也是默認(rèn)情況下Docker網(wǎng)絡(luò)系統(tǒng)做的事情,但在實(shí)際使用時(shí)又顯得差強(qiáng)人意。它的局限性在有多個(gè)主機(jī)的時(shí)候會(huì)更為嚴(yán)重,因?yàn)椴煌鳈C(jī)上的容器之間不能通話,或者它可以用于容器管理或Kubernetes這種業(yè)務(wù)流程系統(tǒng)。Docker推出了一個(gè)叫l(wèi)ibnetwork的新的多主機(jī)容器網(wǎng)絡(luò)架構(gòu),可以解決這些問(wèn)題。
Kubernetes
Kubernetes允許網(wǎng)絡(luò)在pod中實(shí)現(xiàn)服務(wù)器部署,是應(yīng)用程序和容器共享資源的集合。每個(gè)pod都被分配一個(gè)IP地址,和傳統(tǒng)系統(tǒng)不一樣,傳統(tǒng)系統(tǒng)是每個(gè)服務(wù)器或虛擬機(jī)被分配一個(gè)IP地址。Pod不是一個(gè)容器,而是容器的集合。相反,容器和端口的協(xié)調(diào)可以確保應(yīng)用程序之間相互通信。
這就回到了如何設(shè)計(jì)并部署應(yīng)用程序的問(wèn)題上。APP在容器中部署,反過(guò)來(lái)在pod中運(yùn)行,這些APP具有高可用性,并能隨時(shí)處理故障。相反,在傳統(tǒng)的虛擬環(huán)境中,還要時(shí)刻關(guān)注虛擬機(jī),以免出現(xiàn)故障。這就體現(xiàn)了在應(yīng)用程序負(fù)載設(shè)計(jì)和基礎(chǔ)設(shè)施運(yùn)營(yíng)方面的差異性。
新型SDN系統(tǒng)
傳統(tǒng)的SDN架構(gòu)已經(jīng)逐步發(fā)展成為支持容器部署。像OpenStack或者vSphere這種orchestration架構(gòu)系統(tǒng)最初是用于虛擬機(jī)的,但是現(xiàn)在已經(jīng)用于運(yùn)行容器。舉個(gè)例子來(lái)說(shuō),Kuryr項(xiàng)目可以把Docker網(wǎng)絡(luò)映射到OpenStackNeutron網(wǎng)絡(luò)。VMware的NSX還支持容器部署。當(dāng)然,這些為了適應(yīng)容器網(wǎng)絡(luò)的調(diào)整需要保護(hù)現(xiàn)有基礎(chǔ)設(shè)施中的投資。
但是,新的SDN架構(gòu)是這種情況外的兼容容器的架構(gòu)。這些新系統(tǒng)對(duì)APP開(kāi)發(fā)人員最有用處,因?yàn)樗挥妙檻]低層網(wǎng)絡(luò)基礎(chǔ)設(shè)施,而是創(chuàng)建了一個(gè)簡(jiǎn)單視圖網(wǎng)絡(luò)。開(kāi)發(fā)人員關(guān)心連通性,但是不太關(guān)心傳統(tǒng)概念,比如2層網(wǎng)絡(luò)。3層IP地址對(duì)他們來(lái)說(shuō)就足夠了,新的SDN系統(tǒng)就專門(mén)提供這些。他們可以簡(jiǎn)化配置,加快部署。
案例
- Calico:Calico是一個(gè)第3層虛擬化網(wǎng)絡(luò)服務(wù),它使用內(nèi)置的Linux網(wǎng)絡(luò)和BPG協(xié)議并基于IPtables做轉(zhuǎn)發(fā),在數(shù)據(jù)中心中共享路由,不依賴任何硬件,只在網(wǎng)絡(luò)中進(jìn)行。這個(gè)系統(tǒng)可以運(yùn)行多種平臺(tái),比如OpenStack、Docker和Kubernetes。
- Contiv:Contiv是把應(yīng)用程序與基礎(chǔ)設(shè)施的業(yè)務(wù)決策聯(lián)系起來(lái)的一個(gè)項(xiàng)目。可用于Docker網(wǎng)絡(luò)和存儲(chǔ)容量的插件。
- CoreOSFlannel:Flannel是針對(duì)容器網(wǎng)絡(luò)設(shè)計(jì)的覆蓋SDN系統(tǒng)。它使不同主機(jī)上的容器就像在同一主機(jī)上一樣相互通信。
- WeaveworksWeaveNet:WeaveworksWeaveNet是一個(gè)針對(duì)容器設(shè)計(jì)的覆蓋SDN,可用于多個(gè)平臺(tái),并可跨主機(jī)工作。它提供自動(dòng)發(fā)現(xiàn)服務(wù),避免端口映射。使構(gòu)建多個(gè)容器組成的應(yīng)用程序變得更簡(jiǎn)單。
這些系統(tǒng)之間如何關(guān)聯(lián)?
其實(shí),想知道這些系統(tǒng)之間是如何聯(lián)系的很難,但所幸的是,開(kāi)發(fā)人員在設(shè)計(jì)的時(shí)候把很多都合并了。像Docker這種基本的容器系統(tǒng)都有一個(gè)默認(rèn)的實(shí)現(xiàn)機(jī)制,運(yùn)行在盒子外面,電池是內(nèi)置的,但是插件可能會(huì)用于改變功能,電池可更換。這就類似于OpenStack的Neutron,也是利用插件。
網(wǎng)絡(luò)是所有容器結(jié)合在一起的粘合劑,但是早期很難運(yùn)用。這些新的SDN系統(tǒng)還有待提高,但真的值得探索。開(kāi)發(fā)和生產(chǎn)團(tuán)隊(duì)可以利用它們來(lái)簡(jiǎn)化新的基于容器的應(yīng)用程序的網(wǎng)絡(luò)基礎(chǔ)設(shè)施。根據(jù)不同的系統(tǒng),它可以簡(jiǎn)化安全性、多數(shù)據(jù)中心部署等工作。
我建議企業(yè)檢查新的開(kāi)源項(xiàng)目,它可以簡(jiǎn)化并提高開(kāi)發(fā)和運(yùn)營(yíng)團(tuán)隊(duì)的工作效率。雖然不容易拆封,但是值得一提的是,它常常有專業(yè)的公司在背后做指導(dǎo)。