本文講的是<b>Docker網絡一覽</b>,【編者的話】本文是Nuage Networks公司Filip Verloy的一篇博文,簡單介紹了一下Docker網絡情況,單主機的四種模式及多主機的Libnetwork模式,大家可以試用了。同時本文講的是,Nuage Networks公司在鼓搗的SDN方案,我覺得大家也可以去了解一下。
無疑外面已經有很多關于Docker網絡的部落格,我也不想再去重複那些了,恰恰相反,通過展示下面一些不同設定的例子,我想為現在Docker網絡到底能做什麼而提供一個清晰的描述。
總之,Docker的網絡方面,也可以說Docker自己,還是非常年輕的,是以事情進展的很快并且會随着時間變化。去年通過SocketPlane有了很大的進展和後來的可插入模型,而且随後會更詳細。
Docker容器在設計上就是短暫的(寵物VS奶牛),這導緻了一些潛在的問題,其中最重要的一個是由于困難的IP位址管理而不能保證你的防火牆配置更新到最新,也很難連接配接到可能随時消失的服務,使用DNS作為權宜之計也不是一個很好的解決方案(DNS存在單點故障,不要用它)。當然還是有幾個選項和方法來克服這些困難的。
單主機Docker網絡你有4個選擇:Bridge模式、Host模式、Container模式和None模式。
Docker deamon建立一個虛拟以太網橋“docker0”,用于在連接配接到它的所有接口之間轉發資料包。主機上的所有容器都連接配接到該内部網橋,它配置設定一個接口作為容器的“eth0”接口,在主機的命名空間配置設定(想象VRF)另一個接口。容器被配置設定一個私有IP位址。為了防止在本地網絡上的ARP沖突,Docker daemon從所配置設定的IP位址随機生成MAC位址。在下面的例子中,Docker配置設定私有IP 172.17.0.1到容器中。
<a href="http://dockerone.com/uploads/article/20160321/fabd8d3cca1d0c120c51bd3df29cbce3.png" target="_blank"></a>
在這種模式下,容器共享主機的網絡空間,它直接暴露到外部。這意味着你需要使用端口映射通路容器内的服務,在橋接模式,Docker會自動配置設定端口進而使得它們可路由。在下面的例子中,Docker主機的IP 10.0.0.4,正如你可以看到的,容器共享這個IP位址。
<a href="http://dockerone.com/uploads/article/20160321/e109214a7ef52aaaf1a605c36279020c.png" target="_blank"></a>
這種模式強制Docker重用另一個容器的網絡命名空間。在你希望從所述容器提供自定義網絡的時候使用,這也是Kubernetes為多個容器提供網絡的模型。在下面這個例子中,容器IP為172.17.0.2,我們把後面的容器連結到這個容器,正如你可以看到的,啟動的容器具有相同的IP位址。
<a href="http://dockerone.com/uploads/article/20160321/ba6c0151a6004df57288d62d27e65a56.png" target="_blank"></a>
<a href="http://dockerone.com/uploads/article/20160321/7e02ffecf325a749d1b8657c2e4a58ac.png" target="_blank"></a>
這種模式不配置網絡,對于不要求網絡通路的容器有用,不過也可以用于設定自定義網絡。
在下面的例子中,你可以看到我們新的容器沒有配置設定IP位址。
<a href="http://dockerone.com/uploads/article/20160321/235436ae37dd0b90ce2c3d01e0e93468.png" target="_blank"></a>
在現實場景中,由于你的Docker應用你很有可能需要跨多個主機使用Docker容器。是以,為了你的分布式應用程式進行内部和外部通信,現在你需要在這些主機上建構容器網絡。正如上面所提到的,在2015年3月Docker公司收購了SDN創業公司SocketPlane,并且帶來了Libnetwork和容器網絡模型,意味着向預設的多主機網絡設定前進。
Libnetwork的一個好處是,它采用了驅動/插件模式,支援多種底層網絡技術,同時還是暴露一個簡單而一緻的網絡模式到最終使用者(通用API),Nuage網絡通過已有遠端插件實作這個模型。
Libnetwork還引入容器網絡模型(CNM)來為網絡和容器提供互操作。
<a href="http://dockerone.com/uploads/article/20160321/910f46e5b97d5098f272fb517b493804.png" target="_blank"></a>
CNM定義了網絡沙盒、端點和網絡。網絡沙盒是Docker容器網絡配置所在的一個隔離環境。端點是一個可以在特定網絡用于通信的網絡接口。端點隻能加入一個網絡而且多個端點可以在單個網絡沙盒中存在。網絡是能夠與彼此通信的端點的唯一可識别組。您可以建立“前端”和“後端”網絡,他們将完全隔離。
===========================================================
譯者介紹
朱高校@H3C,雲計算工程師,專注Kubernetes、Docker。
原文釋出時間為:2016-03-20
本文作者:zhugaoxiao
本文來自雲栖社群合作夥伴DockerOne,了解相關資訊可以關注DockerOne。
原文标題:Docker網絡一覽