http://www.fly63.com/article/detial/1738
VXLAN是Linux內核本身支持的一種網絡虛擬化技術,是內核的一個模塊,在內核態實現封裝解封裝,構建出覆蓋網絡,其實就是一個由各宿主機上的Flannel.1設備組成的虛擬二層網絡。
由於VXLAN由於額外的封包解包,導致其性能較差,所以Flannel就有了host-gw模式,即把宿主機當作網關,除了本地路由之外沒有額外開銷,性能和calico差不多,由於沒有疊加來實現報文轉發,這樣會導致路由表龐大。因為一個節點對應一個網絡,也就對應一條路由條目。
host-gw雖然VXLAN網絡性能要強很多。,但是種方式有個缺陷:要求各物理節點必須在同一個二層網絡中。
物理節點必須在同一網段中。這樣會使得一個網段中的主機量會非常多,萬一發一個廣播報文就會產生干擾。
在私有雲場景下,宿主機不在同一網段是很常見的狀態,所以就不能使用host-gw了。
VXLAN還有另外一種功能,VXLAN也支持類似host-gw的玩法,如果兩個節點在同一網段時使用host-gw通信,如果不在同一網段中,即 當前pod所在節點與目標pod所在節點中間有路由器,就使用VXLAN這種方式,使用疊加網絡。
結合了Host-gw和VXLAN,這就是VXLAN的Directrouting模式
因此Flnnel的VXLAN模式有兩種:
- VXLAN: 原生的VXLAN,即擴展的虛擬LAN
- Directrouting:直接路由型
Flannel VXLAN之Directrouting模式配置
修改下載的kube-flannel.yml,將flannel的configmap對象改為:
net-conf.json: | { "Network": "10.244.0.0/16", #默認網段 "Backend": { "Type": "VXLAN", #增加, "Directrouting": true #增加 } }
然后把原來的flannel刪除,再重新apply:
參考:
https://blog.csdn.net/weixin_30894583/article/details/97545040