Flannel UDP 模式的优缺点
UDP 模式的特点、优缺点
优点
- 高兼容性:通过用户态 UDP 封装,无需内核支持 VXLAN 或其他高级网络功能,适用于旧版 Linux 内核或非标准环境。
- 部署灵活:无需特殊内核模块或硬件支持,易于在异构环境中部署。
- 简单实现:UDP 模式逻辑简单,适合快速测试或临时环境。
缺点
- 性能差:用户态处理封装/解封装导致高 CPU 开销和延迟,不适合高吞吐量场景。
- 高开销:封装增加约 28 字节头部(UDP 头 + IP 头),带宽开销约 5-15%。
- 不推荐生产:性能和效率远低于 VXLAN 或 host-gw,官方文档明确建议仅用于调试或兼容性场景。
- 缺乏隔离:不像 VXLAN 提供 VNI 隔离,难以实现多租户网络分割。
跨节点通信的具体实现
UDP 模式通过用户态进程(flanneld
)以 UDP 协议封装数据包,实现跨节点容器通信。以下是详细流程:
1. 网络架构概述
- Pod IP 分配:Flannel 为每个节点分配一个子网(如 10.244.x.0/24),Pod 从该子网获取 IP 地址。
- etcd 存储:Flannel 使用 etcd 存储网络配置,包括每个节点的子网和物理 IP 地址。
- UDP 设备:每个节点运行一个虚拟 TUN 设备(如
flannel0
),由flanneld
进程处理数据包的 UDP 封装和解封装。
2. 通信流程
假设 Pod A(IP: 10.244.1.2,节点 1)向 Pod B(IP: 10.244.2.3,节点 2)发送数据包:
-
数据包生成:
- Pod A 生成数据包,源 IP 为 10.244.1.2,目标 IP 为 10.244.2.3。
- 数据包通过 Pod 的虚拟网卡(如 veth)发送到节点 1 的 CNI 桥接(如
cni0
)。
-
路由决策:
- 节点 1 的路由表(由 Flannel 配置)识别目标 IP 10.244.2.3 属于节点 2 的子网(10.244.2.0/24)。
- 路由规则将数据包转发到虚拟 TUN 设备
flannel0
。
-
UDP 封装:
flannel0
设备将数据包交给用户态的flanneld
进程处理。flanneld
对数据包进行 UDP 封装:- 内层数据包:原始数据包(源 IP: 10.244.1.2,目标 IP: 10.244.2.3)。
- 外层数据包:
- 添加 UDP 头部(默认端口 8472)。
- 添加外层 IP 头部:源 IP 为节点 1 的物理 IP(如 192.168.1.10),目标 IP 为节点 2 的物理 IP(如 192.168.1.11)。
- 总封装开销约 28 字节(UDP 头 8 字节 + 外层 IP 头 20 字节)。
- 封装后的数据包通过节点 1 的物理网卡发送。
-
网络传输:
- 封装数据包通过底层物理网络(支持 L3 网络)从节点 1 传输到节点 2。
- 防火墙需允许 UDP 8472 端口流量。
-
UDP 解封装:
- 节点 2 的物理网卡接收到 UDP 数据包,内核将其交给监听 8472 端口的
flanneld
进程。 flanneld
解封装数据包,剥离外层 UDP 和 IP 头部,提取原始数据包(源 IP: 10.244.1.2,目标 IP: 10.244.2.3)。- 解封装后的数据包通过
flannel0
设备送回内核。
- 节点 2 的物理网卡接收到 UDP 数据包,内核将其交给监听 8472 端口的
-
转发到目标 Pod:
- 内核根据目标 IP(10.244.2.3)查询路由表,将数据包转发到节点 2 的 CNI 桥接(如
cni0
)。 - 数据包最终送达 Pod B 的虚拟网卡,完成通信。
- 内核根据目标 IP(10.244.2.3)查询路由表,将数据包转发到节点 2 的 CNI 桥接(如
3. 关键技术细节
- 用户态处理:
- 不同于 VXLAN(内核态)或 host-gw(路由表),UDP 模式依赖
flanneld
用户态进程处理封装/解封装,导致性能瓶颈。 flanneld
通过 TUN 设备与内核交互,增加上下文切换开销。
- 不同于 VXLAN(内核态)或 host-gw(路由表),UDP 模式依赖
- etcd 动态配置:
- Flannel 通过 etcd 获取节点子网和物理 IP 的映射,动态更新封装目标地址。
- MTU 调整:
- 封装增加 28 字节,需降低容器网络 MTU(默认 1472 字节,物理网络 MTU 通常 1500 字节),避免分片。
- 性能瓶颈:
- 用户态处理导致高 CPU 开销,尤其在高并发场景下。
- 带宽开销约 5-15%,视数据包大小和流量模式而定。
4. 通信示意图
Pod A (10.244.1.2) -> cni0 (节点 1) -> flannel0 -> flanneld (UDP 封装) -> 物理网卡 (192.168.1.10 -> 192.168.1.11)
-> 物理网卡 (节点 2) -> flanneld (UDP 解封装) -> flannel0 -> cni0 -> Pod B (10.244.2.3)
总结
- UDP 模式的优势在于高兼容性,适合旧内核或测试环境,但性能差、高 CPU 开销使其不适合生产。
- 跨节点通信通过用户态
flanneld
进程以 UDP 协议封装数据包,依赖 etcd 动态管理节点映射,通信效率低于 VXLAN(内核态)和 host-gw(无封装)。