Flannel 支持的后端
Flannel 是一个为 Kubernetes 设计的容器网络解决方案,支持多种后端(backend)来处理节点间的数据包转发。根据官方文档和其他可靠来源,以下是 Flannel 支持的后端类型及其说明:
-
VXLAN(推荐)
- 描述:使用内核中的 VXLAN(Virtual Extensible LAN)来封装数据包,创建覆盖网络(overlay network)。
- 特点:
- 默认后端,性能较好,广泛支持。
- 使用 UDP 端口(默认 8472)传输封装数据包。
- 支持 IPv4 和 IPv6 双栈。
- 可配置参数:
VNI
(VXLAN Identifier):默认值为 1,Windows 上需 ≥ 4096。Port
:用于发送封装数据包的 UDP 端口。GBP
(Group Based Policy):布尔值,默认 false。
- 适用场景:适用于大多数 Kubernetes 集群,尤其是在需要跨子网通信的场景。
- 注意事项:需要确保防火墙允许相关 UDP 端口(如 8472)。
-
host-gw
- 描述:通过直接更新主机的路由表来创建主机间的直接路由(direct routing)。
- 特点:
- 性能优于 VXLAN,因为不涉及数据包封装。
- 仅适用于同一二层(Layer 2)网络中的主机(需要直接 L2 连接)。
- 不适合云环境,因为云提供商通常不支持直接的二层网络连接。
- 支持 IPv4 和 IPv6 双栈。
- 适用场景:适合有经验的用户在本地或裸金属环境中追求高性能。
- 注意事项:需要主机间直接的二层网络连接。
-
UDP
-
WireGuard
- 描述:使用内核中的 WireGuard 进行数据包封装和加密,创建安全的 VPN 隧道。
- 特点:
- 提供加密通信,适合需要安全性的场景。
- 可配置参数:
PSK
(Pre-Shared Key):可选,用于加密的预共享密钥。ListenPort
:IPv4 的监听端口,默认 51820。ListenPortV6
:IPv6 的监听端口,默认 51821。MTU
:数据包的最大传输单元,默认为外部接口的 MTU。Mode
:支持separate
(IPv4 和 IPv6 使用单独隧道,默认)或auto
(单一隧道支持双栈)。
- 支持 IPv4 和 IPv6 双栈。
- 适用场景:需要加密通信的 Kubernetes 集群。
- 注意事项:需要确保所有节点安装了 WireGuard 内核模块。
-
AWS-VPC(实验性,未受支持)
-
GCE(实验性,未受支持)
-
AliVPC(实验性,未受支持)
-
Alloc
- 描述:仅进行子网分配,不负责数据包转发。
- 特点:
- 通常与其他后端结合使用,本身不提供网络通信功能。
- 适用场景:特殊场景下仅需子网分配时使用。
- 注意事项:不常用,通常需要与其他机制配合。
-
IPIP(实验性,未受支持)
-
IPSec(已废弃)
配置注意事项
- 后端选择不可动态更改:一旦选择某个后端(如 VXLAN),不能在运行时直接更改,必须停止所有工作负载并重启 Flannel 守护进程(flanneld)。
- 防火墙配置:某些后端(如 VXLAN、UDP、WireGuard)需要开放特定的 UDP 端口(如 8472、8285、51820/51821),确保防火墙规则允许这些流量。
- 双栈支持:VXLAN、host-gw 和 WireGuard 支持 IPv4 和 IPv6 双栈模式,需在配置中启用
EnableIPv6
并设置IPv6Network
。 - 性能对比:
host-gw
提供最佳性能,但受限于二层网络。VXLAN
是默认选择,平衡性能和兼容性。UDP
性能较差,仅用于调试。WireGuard
提供加密,但需要额外模块支持。
- 云环境限制:AWS-VPC、GCE 和 AliVPC 仅适用于特定云平台,且为实验性功能。
配置示例
以下是一个配置 VXLAN 后端的 Flannel 配置文件(net-conf.json
)示例:
{"Network": "10.244.0.0/16","Backend": {"Type": "vxlan","VNI": 1,"Port": 8472}
}
如果需要使用 WireGuard 后端:
{"Network": "10.244.0.0/16","Backend": {"Type": "wireguard","ListenPort": 51820,"PSK": "your-pre-shared-key"}
}
总结
Flannel 支持的后端包括 VXLAN(推荐)、host-gw(高性能但受限于二层网络)、UDP(仅用于调试)、WireGuard(加密通信)、AWS-VPC、GCE、AliVPC(实验性)、Alloc 和 IPIP(实验性)。此外,IPSec 已废弃。选择后端时需根据网络环境、性能需求和安全性要求进行权衡。