要确认 Flannel 是否工作在隧道模式(如 VXLAN 或 UDP),可以通过以下步骤验证:
1. 检查 Flannel 的后端配置
Flannel 的隧道模式通常由后端类型决定,常见的隧道模式后端包括 VXLAN 或 UDP。通过以下命令查看 Flannel 的配置:
kubectl -n kube-system get configmap kube-flannel-cfg -o jsonpath='{.data.net-conf\.json}' | jq
输出示例(VXLAN 隧道模式):
{
"Network": "10.244.0.0/16",
"Backend": {
"Type": "vxlan" # 关键字段:标识隧道模式
}
}
- 如果
Backend.Type
是vxlan
或udp
,则为隧道模式。 - 如果
Backend.Type
是host-gw
(Host Gateway),则是路由模式,非隧道模式。
2. 检查节点的网络接口
隧道模式会在节点上创建虚拟隧道接口(如 flannel.1
或 flannel-vxlan
),通过以下命令验证:
ip addr show | grep flannel
输出示例:
4: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN group default
- 如果存在
flannel.1
(VXLAN 接口)或flannel-udp
(UDP 接口),则表明工作在隧道模式。 - 如果只有
cni0
接口而无flannel.1
,可能是host-gw
模式。
3. 查看 Flannel 日志(辅助验证)
检查 Flannel Pod 日志,确认启动时加载的后端类型:
kubectl -n kube-system logs <flannel-pod-name> | grep "Backend type"
输出示例:
I0701 10:00:00.123456 1 main.go:234] Backend type: vxlan
隧道模式 vs. 路由模式
特征 | 隧道模式(VXLAN/UDP) | 路由模式(host-gw) |
---|---|---|
跨节点通信方式 | 封装数据包(隧道) | 直接路由(依赖节点路由表) |
性能 | 较低(有封装开销) | 较高(无封装开销) |
依赖条件 | 节点间开放 VXLAN/UDP 端口 | 节点间二层互通或路由可达 |
接口特征 | 存在 flannel.1 等虚拟接口 | 仅 cni0 和物理接口 |
总结
通过检查 Flannel 配置中的 Backend.Type
和 节点上的虚拟接口,可以明确是否工作在隧道模式。
如果确认是隧道模式但跨节点不通,需继续排查防火墙、路由或 MTU 问题(参考之前的解决方案)。