Docker網路一覽

weixin_33912246發表於2017-08-13

轉自:http://dockone.io/article/1143

【編者的話】本文是Nuage Networks公司Filip Verloy的一篇博文,簡介了一下Docker網路情況,單主機的四種模式及多主機的Libnetwork模式,大家能夠試用了。

同一時候Nuage Networks公司在鼓搗的SDN方案,我認為大家也能夠去了解一下。

@Container容器技術大會將於6月4日在上海光大會展中心國際大酒店舉辦,來自攜程、PPTV、螞蟻金服、京東、浙江移動、海爾電器、唯品會、eBay、道富銀行、麻袋理財、土豆網、阿里百川、騰訊遊戲、點融網等公司的技術負責人將帶來實踐經驗分享。3月21日之前購票僅僅需238元。歡迎感興趣的同學搶購。

介紹

無疑外面已經有非常多關於Docker網路的部落格。我也不想再去反覆那些了。恰恰相反,通過展示以下一些不同設定的樣例。我想為如今Docker網路究竟能做什麼而提供一個清晰的描寫敘述。

總之,Docker的網路方面。也能夠說Docker自己。還是非常年輕的。所以事情進展的非常快而且會隨著時間變化。

去年通過SocketPlane實現了大量的進展和後來的可插入模型,只是隨後還會有很多其它。



Docker容器在設計上就是短暫的(寵物VS奶牛),這導致了一些潛在的問題。當中最重要的一個是因為困難的IP地址管理而不能保證你的防火牆配置更新到最新。也非常難連線到可能隨時消失的服務,使用DNS作為權宜之計也不是一個非常好的解決方式(DNS存在單點故障。不要用它)。

當然還是有幾個選項和方法來克服這些困難的。


單主機Docker網路

單主機Docker網路你有4個選擇:Bridge模式, Host模式, Container模式和None模式。


橋接模式(預設Docker網路模式)

Docker deamon建立一個虛擬乙太網橋“docker0”。用於在連線到它的全部介面之間轉發資料包。主機上的全部容器都連線到該內部網橋,它分配一個介面作為容器的“eth0”介面,在主機的名稱空間分配(想象VRF)還有一個介面。容器被分配一個私有IP地址。為了防止在本地網路上的ARP衝突,Docker daemon從所分配的IP地址隨機生成MAC地址。在以下的樣例中。Docker分配私有IP 172.17.0.1到容器中。


docker11.png

Host 模式

在這樣的模式下。容器共享主機的網路空間,它直接暴露到外部。

這意味著你須要使用port對映訪問容器內的服務,在橋接模式,Docker會自己主動分配port從而使得它們可路由。在以下的樣例中,Docker主機的IP 10.0.0.4,正如你能夠看到的,容器共享這個IP地址。


docker2.png

Container 模式

這樣的模式強制Docker重用還有一個容器的網路名稱空間。在你希望從所述容器提供自己定義網路的時候使用,這也是Kubernetes為多個容器提供網路的模型。在以下這個樣例中,容器ip為172.17.0.2,我們把後面的容器連結到這個容器,正如你能夠看到的,啟動的容器具有同樣的IP地址。
docker3.png

docker4.png

None模式

這樣的模式不配置網路。對於不要求網路訪問的容器實用。只是也能夠用於設定自己定義網路。

 



這也是Nuage網路模式在Docker1.9預覽版本號的實現(很多其它資訊在這裡 )。 

在以下的樣例中,你能夠看到我們新的容器沒有分配IP地址。


docker5.png

預設情況下Docker會啟用容器間通訊(-icc=true),這意味著在主機上的容器都是能夠自由通訊的沒有不論什麼限制,這可能成為一個安全問題。

通過

iptablesip_forwarding與外部通訊。

多主機Docker網路

在現實場景中,取決於你的Docker應用你非常有可能須要跨多個主機使用Docker容器。所以。為了你的分散式應用程式進行內部和外部通訊。如今你須要在這些主機上構建容器網路。正如上面所提到的,在2015年3月Docker公司收購了SDN創業公司SocketPlane,而且帶來了Libnetwork和容器網路模型,意味著向預設的多主機網路設定前進。

Libnetwork

Libnetwork為連線容器提供原生Go語言實現。

libnetwork的目標是提供一個牢固的容器網路模型,提供一個一致的程式設計介面和應用所需的網路抽象。



Libnetwork的一個優點是,它採用了驅動/外掛模式。支援多種底層網路技術,同一時候還是暴露一個簡單而一致的網路模式到終於使用者(通用API),Nuage網路通過已有遠端外掛實現這個模型。



Libnetwork還引入容器網路模型(CNM)來為網路和容器提供互操作。
a63eecba-52a0-471b-b7f5-679d2142014c.png

CNM定義了網路沙盒、端點和網路。網路沙盒是Docker容器網路配置所在的一個隔離環境。

端點是一個能夠在特定網路用於通訊的網路介面。端點僅僅能增加一個網路並且多個端點能夠在單個網路沙盒中存在。網路是能夠與彼此通訊的端點的唯一可識別組。您能夠建立“前端”和“後端”網路。他們將全然隔離。



原文連結:Docker networking overview(翻譯:朱高校)

===========================================================
譯者介紹
朱高校@H3C,雲端計算project師。專注Kubernetes、Docker。


相關文章