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