Docker系列(五):Docker網路機制(上)
Linux路由機制打通網路
路由機制是效率最好的
docker128上修改Docker0的網路地址,與docker130不衝突 vi /usr/lib/systemd/system/docker.service(修改配置檔案)
ExecStart=/usr/bin/docker daemon --bip=172.18.42.1/16 -H fd:// - H=unix:///var/run/docker.sock
重要引數:–bip=172.18.42.1/16
systemctl daemon-reload
重啟docker128
新增路由
docker130 上執行 route add -net 172.18.0.0/16 gw 192.168.18.128
docker128 上執行 route add -net 172.17.0.0/16 gw 192.168.18.130
130上啟動一個容器,獲取其IP地址
128上Ping容器
prohibited禁止的,防火牆規則導致Ping禁止
解決:iptables -F ; (防火牆規則清理)iptables -t nat -F (docker的nat規則清理)
在主機上ping成功了。
在兩個容器中ping成功了
分析:
Docker130上的一個容器ping 128上的一個容器
Docker128上抓包看到結果
128中的request1裡面的ttl eth0中 是63 docker0是62
ttl表示經過一次路由會減一,說明eth0到docker0經過了一次路由,說明ping128是先通過路由經過了物理網絡卡eth0,在通過路由到了docker0
詳細分析:
Docker130上的容器 c1:172.17.0.1 ping 128上的容器c2:172.18.0.1時,c1發現這個地址不是自己子網的,於是發 給docker0閘道器
經過路由計算,這個報文被髮往下一跳的路由器埠:eth0,所以ttl減一
報文到達128主機的eth0網絡卡,經過路由計算,被髮往下一跳的埠dock0:
注意到docker0上的ttl又減了一
回來的時候,資料包流程:c2128 docker0128 eth0130 eth0130 docker0c1
注意:上圖示黃的兩個mac地址是不一樣的
Docker網路方案一覽
雙網絡卡獨立大二層交換(linux bridge)
和路由不同,會有廣播風暴。
Overlay網路(openstack)—主流
這種方法,docker的私有網路包,被封裝到了一個已有的物理網路上,外面是看不到的。
優點:對原來的物理網路沒有任何的影響,在上面可以做靈活的封裝
缺點:對效能消耗較多,目前的硬體環境可能支援的不多。
基於ovs的overlay網路
從邏輯上好像是直接聯通的,其實還是通過物理網路傳輸的,所以是虛線。
學習neutron網路
官方的Libnetwork
Socketplane被docker公司收購,成為其官方網路的起源
開發者不想操作是否是 VLANs, VXLANs, Tunnels 或者是 TEPs. 對於架構人們最關心的是效能和可靠性。而 SocketPlane 在 socket 層面提供了一個網路的抽象層,通過可管理的方式去解決各種網路問題。
主要特性:
•Open vSwitch 整合
•用於 Docker 的零配置多主機網路 •Docker/SocketPlane 叢集的優雅增長 •支援多網路
•分散式 IP 地址管理 (IPAM)
docker公司正在做的巨集偉藍圖
1.將libnetwork整合到Docker Engine
2.在Docker CLI中使用新的network命令 3.撰寫『-net』引數的文件,以告知使用者如何使用它來為 容器指定網路 4.在network和endpoint中支援新增『label』 5.研發新的『bridge』外掛,以替換Docker目前的實現
從Docker到Kubernetes之技術實戰 講師 Leader-us
6.研發『分散式bridge』外掛,以支援跨容器網路
DAT
目前看到有一些計劃是打算將OVS專案關聯到Docker上來,從Linux Kernel 3.3開始,OVS專案就是核心的一部分。 當我聽到這個的時候我覺得是不是腦袋讓驢踢了。首先宣告我並不是反對使用OVS,實際上,它是一個非常不錯 的網路工具套件。它的設定比較複雜,對於新手來說有一個陡峭的學習曲線,但是一旦學會,OVS就可以幫你事 半功倍。關於這個話題我聽到的一個討論是:“如果OVS工作在Docker上,那麼工作一切都變得很美好”。讓我 告訴你,親們:如果讓我花費大量時間學習它,最後的結果只能是:“還好,可以用”。我並不想說的那麼憤世 嫉俗,實際情況是在某些常用環境下OVS會崩潰。因此,使用OVS只是一種瘋狂的想法罷了。
http://containertutorials.com/network/ovs_docker.html https://github.com/openvswitch/ovs/blob/master/utilities/ovs-docker
Currently libnetwork is nothing more than an attempt to modularize the Docker platform’s
networking subsystem by moving it into libnetwork as a library.
這僅僅是開始
意思就是docker自己整合網路還只是個藍圖更多還還是openstack和Open vSwitch