所有节点在二层网络互通的情况下,直接配置节点的三层路由即可互通,不需要使用VXLAN隧道。
使用host-gw模式,需要修改flannel的ConfigMap将Backend.Type 从vxlan改为host-gw:
net-conf.json: |
{
"Network": "10.244.0.0/16",
"Backend": {
"Type": "host-gw" // <- 改成host-gw
}
}
在host-gw模式下,由于不涉及VXLAN的封包解包,不再需要flannel.1虚机网卡。 flanneld 负责为各节点设置路由 ,将对应节点Pod子网的下一跳地址指向对应的节点的IP,如图中路由表①所示。
[root@Node1 ~]# ip r
...
10.244.0.0/24 dev cni0 proto kernel scope link src 10.244.0.1
10.244.1.0/24 via 192.168.50.3 dev eth0 # Node2子网的下一跳地址指向Node2的public ip。
...
由于没有封包解包带来的消耗,host-gw性能要好。不过一般在云环境下,二层互通的条件可能不好满足,不能支持使用host-gw的模式,在私有化部署的场景下,可以考虑。