Docker以及它的容器概念快速改變著人們在云計算環(huán)境下構(gòu)建應(yīng)用程序的方法。這些改變也對網(wǎng)絡(luò)產(chǎn)生了影響,容器似乎可能會利用軟件定義網(wǎng)絡(luò)的功能。
這是因為,容器使開發(fā)者重新思考他們使用計算機(jī)能力的方法——新方法需要更高級別的網(wǎng)絡(luò)抽象技術(shù)。這點可以從谷歌的Kubernetes項目上看出端倪,這個項目已經(jīng)在2014年6月份開源,它可以使用一個代理技巧(可以歸類為SDN)。
“在我看來,網(wǎng)絡(luò)、存儲和安全將進(jìn)一步的更加接近一個Docker容器,而非一個單獨的應(yīng)用”,Docker公司的CEO Ben Golub說。逐步的,例如負(fù)載均衡或橋接之類的任務(wù)將使用容器到容器(container-to-container)的方式完成,而并非機(jī)器到機(jī)器的(machine-to-machine)方式。
容器變得很酷
2013年3月正式推出,Docker定義了一個能容納應(yīng)用程序(包括其依賴關(guān)系:諸如二進(jìn)制和庫)的容器,這個容器可以存在于任何物理的或者虛擬的Linux服務(wù)器中。其實,在Docker出現(xiàn)前,類似于Google的公司就已經(jīng)在使用容器技術(shù)了,但Docker公司的出現(xiàn),使容器標(biāo)準(zhǔn)化和更容易使用了。
Golub用一個比喻形象地說明了這個問題:在Docker之前,有很多鋼制的箱子,但是大小剛好合適,并且在合適的地方有掛鉤的箱子才是Docker。
復(fù)雜的應(yīng)用可以在多個容器間“蔓延”,但是要保證這些容器間能夠互相通信,又產(chǎn)生了另一個技術(shù)上的創(chuàng)新:開源的Docker容器管理和編排技術(shù)。Kubernetes和Mesos就是其中的代表,Docker也開發(fā)了自己的版本Libswarm,并且提供了一個通用的接口。
實際上,Docker正在嘗試用Libchan統(tǒng)一這些解決方案,Libchan是一個build復(fù)雜網(wǎng)絡(luò)服務(wù)的庫,Golub說:“我們正在嘗試提供通用而又不過于死板的接口”。
Open vSwitch和OpenFlow陣營中的人們也已經(jīng)開始致力于網(wǎng)絡(luò)化Docker的工作,Golub說。理想情況下,一個容器能定義它在網(wǎng)絡(luò)中所需要的,它使用的端口,和需要通信的其它容器。
通過代理為應(yīng)用程序提供服務(wù)(Serving Apps by Proxy)
Kubernete有一個特殊的與SDN非常類似的網(wǎng)絡(luò)化概念:一個服務(wù)代理,它創(chuàng)建一個IP地址,這個IP地址可以分配給(fan out)任意數(shù)目的容器。
6月份開源,Kubernetes是Borg的一個開源派生。Borg是一個Google工具,它讓開發(fā)者可以從大量的分散的數(shù)據(jù)中心來池化計算能力。Kubernetes獲得了一些重量級的支持:CoreOS,Docker,IBM,Mesosphere,Microsoft,Red Hat和SaltStack。
Brendan Burns說,服務(wù)代理的想法是網(wǎng)絡(luò)抽象技術(shù)的一個轉(zhuǎn)折。Google兩位工程師開啟了Kubernetes項目,Brendan Burns是其中之一。
Kubernetes使用了一種代理方法,通過一個特殊的服務(wù)(被定義為一個跨容器的查詢)——獲得自己的IP地址。在這個地址后面可能是一大堆提供相同服務(wù)的容器。但是,在前端,應(yīng)用程序或使用該服務(wù)的用戶僅通過這一IP地址調(diào)用服務(wù)。
這就意味著,運行一個服務(wù)的容器數(shù)量,可以根據(jù)需要增加或縮減,而客戶或使用該服務(wù)的應(yīng)用程序不需要關(guān)心這些細(xì)節(jié)。可以想象,如果服務(wù)是一個移動網(wǎng)絡(luò)后端進(jìn)程,當(dāng)流量激增時,大量容器將被加入到這個服務(wù)中,一旦流量恢復(fù)正常,則刪除多余的容器。發(fā)現(xiàn)特定容器運行的服務(wù),和這些容器之間的負(fù)載均衡,將在后臺進(jìn)行。如果沒有這個代理服務(wù),你可以添加更多的容器,但是,你不得不告訴用戶和應(yīng)用程序這些細(xì)節(jié)。Google的方法消除了這個配置需求。
Burns認(rèn)為:”從某種意義上說,這種代理方法,可以代理任何給定的服務(wù)(in the Kubernetes sense),這些服務(wù)可以來自于它自身的網(wǎng)絡(luò)。“
這種代理方案有點SDN的味道,盡管,它不是構(gòu)建在典型的與SDN有關(guān)的第2-3層機(jī)制。“這是我們寫的一個二進(jìn)制。它未使用OVS或者任何與OVS類似的東東”,Burns說,“但是,我們預(yù)想,當(dāng)SDN變得更加普遍時,它(我們寫的一個二進(jìn)制)將被SDN技術(shù)取代”。