如何使用 flannel host-gw backend?- 天天5分鐘玩轉 Docker 容器技術(62)

flannel 支持多種 backend,前面咱們討論的是 vxlan,host-gw 是 flannel 的另外一個 backend,本節會將前面的 vxlan backend 切換成 host-gw。

docker

與 vxlan 不一樣,host-gw 不會封裝數據包,而是在主機的路由表中建立到其餘主機 subnet 的路由條目,從而實現容器跨主機通訊。要使用 host-gw 首先修改 flannel 的配置 flannel-config.json: 數據庫

{ json

 "Network": "10.2.0.0/16", 網絡

 "SubnetLen": 24, 性能

 "Backend": { 學習

   "Type": "host-gw" ui

 } spa

}

code

Type  host-gw 替換原先的 vxlan。更新 etcd 數據庫: orm

etcdctl --endpoints=192.168.56.101:2379 set /docker-test/network/config < flannel-config.json

 

Ctrl+C 掉以前 host1 和 host2 的 flanneld 進程並重啓。

flanneld -etcd-endpoints=http://192.168.56.101:2379 -iface=enp0s8 -etcd-prefix=/docker-test/network

 

host1 上 flanneld 啓動輸出以下:

與以前 vxlan backend 啓動時有幾點不一樣:

① flanneld 檢查到原先已分配的 subnet 10.2.40.0/24,重用之。

② flanneld 從 etcd 數據庫中檢索到 host2 的 subnet 10.2.17.0/24,但由於其 type=vxlan,當即忽略。

③ 兩分鐘後,再次發現 subnet 10.2.17.0/24,將其加到路由表中。此次沒有忽略 subnet 的緣由是此時咱們在 host2 上重啓了 flanneld,根據當前 etcd 的配置使用 host-gw backend。

查看 host1 的路由表,增長了一條到 10.2.17.0/24 的路由,網關爲 host2 的 IP 192.168.56.105。

相似的,host2 啓動 flanneld 時會重用 subnet 10.2.17.0/24,並將 host1 的 subnet 10.2.40.0/24 添加到路由表中,網關爲 host1 IP 192.168.56.104。

從 /run/flannel/subnet.env 能夠看到 host-gw 使用的 MTU 爲 1500:

這與 vxlan MTU=1450 不一樣,因此應該修改 docker 啓動參數 --mtu=1500並重啓 docker daemon。

下面對 host-gw 和 vxlan 這兩種 backend 作個簡單比較。

  1. host-gw 把每一個主機都配置成網關,主機知道其餘主機的 subnet 和轉發地址。vxlan 則在主機間創建隧道,不一樣主機的容器都在一個大的網段內(好比 10.2.0.0/16)。

  2. 雖然 vxlan 與 host-gw 使用不一樣的機制創建主機之間鏈接,但對於容器則無需任何改變,bbox1 仍然能夠與 bbox2 通訊。

  3. 因爲 vxlan 須要對數據進行額外打包和拆包,性能會稍遜於 host-gw。

至此 flannel 已經討論完了,下一節咱們開始學習另外一個網絡方案:Weave。

二維碼+指紋.png

相關文章
相關標籤/搜索