flannel网络的VXLAN及host-gw

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模式有两种:

  1. VXLAN: 原生的VXLAN,即扩展的虚拟LAN
  2. 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

原文地址:https://www.cnblogs.com/sandshell/p/11772052.html