Flannel 为 Kubernetes 集群中的容器提供了多种网络通信模式

Flannel 为 Kubernetes 集群中的容器主要提供了三种网络通信模式:VXLAN、host-gw 以及 UDP 。它们在工作原理和性能上有所不同,你可以根据实际的网络环境和需求进行选择。

下面这个表格整理了这三种核心模式的关键信息,帮助你快速了解和对比:

 
网络模式技术原理性能适用场景
VXLAN 在内核态进行封包/解包,创建虚拟隧道(flannel.1设备) 性能较好 通用场景,跨网段通信,是生产环境常用模式
host-gw 纯三层路由,通过在主机上添加路由规则,将目的主机作为网关 性能最高(无封装开销) 二层互通的网络,对性能要求高
UDP 在用户态进行封包/解包,通过TUN设备(flannel0)转发 性能最差

 

  • VXLAN模式:这是Flannel默认且在生产环境中最常用的模式。它在每个节点上创建一个叫 flannel.1 的VTEP(虚拟隧道端点)设备。当数据包需要发送到其他节点上的Pod时,内核会在原始数据包外封装一层新的UDP包,使用宿主机的网络进行传输,到达目标节点后再由内核解封装。这种方式虽然有一定开销,但可以跨越三层网络,灵活性很好。

  • host-gw模式 (Host Gateway):这种模式性能最好。它通过在每个节点上添加到达其他节点Pod子网的静态路由规则来实现通信,下一跳就是目标节点本身的IP地址。因为它不需要对数据包进行任何封装,直接使用原始IP包传输。但关键限制是,它要求集群所有节点处于同一个二层网络(即直接可以通过二层交换通信),否则路由无法生效。

  • UDP模式:这是Flannel最早支持的模式。它与VXLAN类似,也是Overlay网络,但封包和解包工作由运行在用户空间的flanneld进程完成,导致频繁的内核态和用户态切换,性能损耗非常大,通常不推荐在生产环境使用。

Flannel 的 VXLAN 和 host-gw 模式可以通过一种称为 Directrouting 的配置实现“一起使用” 。这种混合模式能智能地选择最佳的数据传输方式,兼顾灵活性和性能。

下面这个表格清晰地展示了这三种方式的主要特点:

 
特性模式工作原理性能配置复杂性网络要求
VXLAN 通过隧道封装数据包,可跨越三层网络  有封装开销,性能稍低  中等 无特殊要求,通用性强
host-gw 通过主机路由表直接转发,无封装  性能最高,接近原生网络  简单 所有节点必须在同一二层网络 
Directrouting (混合) 同子网走host-gw,跨子网走VXLAN  同子网内性能与host-gw相当 

 

如何配置 Directrouting 模式

配置的核心是修改 Flannel 的 ConfigMap。

  1. 修改 Flannel 配置文件
    通常,Flannel 的配置保存在名为 kube-flannel-cfg 的 ConfigMap 中,或者直接在部署的 YAML 文件里。你需要找到 net-conf.json 部分,将其修改为如下结构 :

    yaml
    net-conf.json: |
      {
        "Network": "10.244.0.0/16",  # 这里替换为你的集群 Pod 网段
        "Backend": {
          "Type": "vxlan",
          "Directrouting": true  # 关键:启用直接路由
        }
      }

    • 网络前提是关键:要使 Directrouting 生效并发挥其性能优势,处于同一 IP 子网内的节点之间必须能够通过二层网络(数据链路层)直接通信 。如果同子网的节点间存在防火墙等三层隔离设备,host-gw 的直连路由将无法建立。

    • MTU 设置:纯 VXLAN 模式由于需要封装数据,MTU 需要减小(例如设置为 1450)以容纳额外的头部信息 。而 host-gw 模式没有额外封装,可以使用标准的 1500 MTU 。在 Directrouting 混合模式下,为了兼容性,可能仍需采用 VXLAN 的较小 MTU。如果你的网络环境确认支持更大的 MTU,可以尝试调整。

    • 配置校验:配置完成后,你可以通过 ip route 命令在节点上查看路由表。如果配置成功,对于同一子网内的其他节点,你应该能看到一条类型为 host-gw 的清晰路由,其下一跳网关就是目标节点的 IP。

posted @ 2025-10-24 15:51  滴滴滴  阅读(6)  评论(0)    收藏  举报