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