本文詳解之flannel-host-gw模式

本文詳解之flannel-host-gw模式

host-gw

host-gw即Host Gateway,從名字中就可以想到這種方式是通過把主機當作網關來實現跨節點網絡通信的。那麼具體如何實現跨節點通信呢?

同理UDP模式和VXLAN模式,首先將Backend中的type改為host-gw,這裡就不再贅述,只講一下網絡通信的實現流程。

採用host-gw模式後flanneld的唯一作用就是負責主機上路由表的動態更新, 想一下這樣會不會有什麼問題?

使用host-gw Backend的Flannel網絡的網絡包傳輸過程如下圖所示:

本文詳解之flannel-host-gw模式

  1. 同UDP、VXLAN模式一致,通過容器A的路由表IP包到達cni0
  1. 到達cni0的IP包匹配到host A當中的路由規則(10.244.2.0),並且網關為172.16.130.164,即host B,所以內核將IP包發送給host B(172.16.130.164)
  1. IP包通過物理網絡到達host B的eth1
  1. 到達host B eth1的IP包匹配到host B當中的路由表(10.244.2.0),IP包被轉發給cni0
  1. cni0將IP包轉發給連接在cni0上的容器B

host-gw模式其中一個侷限性就是,由於是通過節點上的路由表來實現各個節點之間的跨節點網絡通信,那麼就得保證兩個節點是可以直接路由過去的。按照內核當中的路由規則,網關必須在跟主機當中至少一個IP處於同一網段,故造成的結果就是採用host-gw這種Backend方式時則集群中所有的節點必須處於同一個網絡當中,這對於集群規模比較大時需要對節點進行網段劃分的話會存在一定的侷限性。另外一個則是隨著集群當中節點規模的增大,flanneld需要維護主機上成千上萬條路由表的動態更新也是一個不小的壓力。


分享到:


相關文章: