Kind环境下Flannel IPsec模式跨节点通信故障,如何一步步排查解决?

摘要:环境信息 部署方式 Docker + Kind K8s 版本 v1.27.3 CNI Flannel IPsec 模式 节点网络 172.18.0.016(Docker bridge) 问题现象 同节点 Pod 通信正常
环境信息 部署方式 Docker + Kind K8s 版本 v1.27.3 CNI Flannel IPsec 模式 节点网络 172.18.0.0/16(Docker bridge) 问题现象 同节点 Pod 通信正常,跨节点 Pod 通信卡住超时: # 同节点访问正常 docker exec flannel-ipsec-control-plane curl -s 10.244.0.4 PodName: Pod-1 | PodIP: eth0 10.244.0.4/24 # 跨节点访问卡住 docker exec flannel-ipsec-control-plane curl -s 10.244.1.7 # 无响应... 检查 IPsec 状态,SA 未建立: docker exec flannel-ipsec-control-plane ip xfrm state # 空 排查过程 查看 Flannel 日志 control-plane 节点: kubectl logs -n kube-system kube-flannel-ds-cd8rf 06[CFG] loaded IKE shared key for: '172.18.0.3' 13[CFG] loaded IKE shared key for: '172.18.0.2' 07[NET] received packet: from 172.18.0.1[500] to 172.18.0.3[500] (720 bytes) 07[IKE] no IKE config found for 172.18.0.3...172.18.0.1, sending NO_PROPOSAL_CHOSEN worker 节点: kubectl logs -n kube-system kube-flannel-ds-gk7pl 11[NET] sending packet: from 172.18.0.2[500] to 172.18.0.3[500] (720 bytes) 04[NET] received packet: from 172.18.0.1[500] to 172.18.0.2[500] (720 bytes) 04[IKE] no IKE config found for 172.18.0.2...172.18.0.1, sending NO_PROPOSAL_CHOSEN 发现问题: IKE 包经过 Docker bridge 时,源 IP 被 SNAT 成了网关地址。 预期源 IP 实际源 IP 172.18.0.2 (worker) 172.18.0.1 (网关) 172.18.0.3 (control-plane) 172.18.0.1 (网关) 检查 iptables NAT 规则 iptables -t nat -L POSTROUTING -n -v Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 706 42360 MASQUERADE 0 -- * !br-822761cba2a3 172.18.0.0/16 0.0.0.0/0 269 19012 MASQUERADE 0 -- * !br-64b0f4dac739 172.18.0.0/16 0.0.0.0/0 按规则字面意思,出口不是网桥 !br-xxx 才触发 MASQUERADE,同网桥转发不应该 NAT。 但问题是:K8s 部署时需要开启 bridge-nf-call-iptables = 1,导致网桥转发流量也会经过 iptables,触发了 MASQUERADE。
阅读全文