上一節我們在 flannel 網路中部署了容器,本節討論 flannel 的連通和隔離特性。
(1)flannel 網路連通性
測試 bbox1 和 bbxo2 的連通性:
docker exec bbox1 ping -c 10.2.17.2
bbox1 能夠 ping 到位於不同 subnet 的 bbox2,通過traceroute
分析一下 bbox1 到 bbox2 的路徑。
docker exec bbox1 traceroute 10.2.17.2
bbox1 與 bbox2 不是乙個 subnet,資料報傳送給預設閘道器 10.2.40.1(docker0)。
根據 host1 的路由表,資料報會發給 flannel.1。
host1# ip route
10.2.0.0/16 dev flannel.1
3.flannel.1 將資料報封裝成 vxlan,通過 ens33 傳送給 host2。
4.host2 收到包解封裝,發現資料報目的位址為 10.2.17.2,根據路由表(下圖)將資料報傳送給 flannel.1,並通過 docker0 到達 bbox2。
host2:ip route
10.2.0.0/16 dev flannel.1
10.2.17.0/24 dev docker0 proto kernel scope link scr 10.2.17.1
資料流向如圖所示:
另外,flannel 是沒有 dns 服務的,容器無法通過 hostname 通訊。
host1#docker exec bbox1 ping -c bbox2
(2)flannel 網路隔離
flannel 為每個主機分配了獨立的 subnet,但 flannel.1 將這些 subnet 連線起來了,相互之間可以路由。本質上,flannel 將各主機上相互獨立的 docker0 容器網路組成了乙個互通的大網路,實現了容器跨主機通訊。flannel 沒有提供隔離。
(3)flannel 與外網連通性
因為 flannel 網路利用的是預設的 bridge 網路,所以容器與外網的連通方式與 bridge 網路一樣,即:
容器通過 docker0 nat 訪問外網
flannel網路的VXLAN及host gw
flannel network 實現原理 flannel為每個主機提供獨立的子網,整個集群的網路資訊儲存在etcd上。對於跨主機的 目標容器的ip位址,需要從etcd獲取。先上圖,比較直觀 步驟 1 ip資料報被封裝並通過容器的eth0傳送。2 container1的eth0通過veth對與dock...
flannel網路的VXLAN及host gw
vxlan是linux核心本身支援的一種網路虛擬化技術,是核心的乙個模組,在核心態實現封裝解封裝,構建出覆蓋網路,其實就是乙個由各宿主機上的flannel.1裝置組成的虛擬二層網路。由於vxlan由於額外的封包解包,導致其效能較差,所以flannel就有了host gw模式,即把宿主機當作閘道器,除...
docker網路flannel的安裝配置測試
1.flannel為了避免ip重複分配,使用etcd解決衝突,目前測試,使用單機版etcd network 用於指定flannel位址池,整個overlay網路為10.0.0.0 16網段 subnetlen 用於指定分配給單個宿主機的docker0的ip段的子網掩碼的長度 subnetmin 用於...