上一節咱們在 flannel 網絡中部署了容器,本節討論 flannel 的連通和隔離特性。docker
測試 bbox1 和 bbxo2 的連通性:
網絡
bbox1 可以 ping 到位於不一樣 subnet 的 bbox2,經過 traceroute
分析一下 bbox1 到 bbox2 的路徑。測試
bbox1 與 bbox2 不是一個 subnet,數據包發送給默認網關 10.2.40.1(docker0)。spa
根據 host1 的路由表(下圖),數據包會發給 flannel.1。
code
flannel.1 將數據包封裝成 VxLAN,經過 enp0s8 發送給 host2。路由
host2 收到包解封裝,發現數據包目的地址爲 10.2.17.2,根據路由表(下圖)將數據包發送給 flannel.1,並經過 docker0 到達 bbox2。
部署
數據流向如圖所示:容器
另外,flannel 是沒有 DNS 服務的,容器沒法經過 hostname 通訊。route
flannel 爲每一個主機分配了獨立的 subnet,但 flannel.1 將這些 subnet 鏈接起來了,相互之間能夠路由。本質上,flannel 將各主機上相互獨立的 docker0 容器網絡組成了一個互通的大網絡,實現了容器跨主機通訊。flannel 沒有提供隔離。二維碼
由於 flannel 網絡利用的是默認的 bridge 網絡,因此容器與外網的連通方式與 bridge 網絡同樣,即:
容器經過 docker0 NAT 訪問外網
經過主機端口映射,外網能夠訪問容器
詳細討論可參考前面 bridge 網絡相關章節。
以上是 flannel vxlan 的相關知識點,下一節咱們討論 flannel host-gw backend。