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