1. 程式人生 > >Docker系列(五):Docker網路機制(上)

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又減了一
在這裡插入圖片描述
回來的時候,資料包流程:c2128 docker0128 eth0130 eth0130 docker0c1
在這裡插入圖片描述

在這裡插入圖片描述
注意:上圖示黃的兩個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