前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flannel VXLAN 通信异常问题排障记录

Flannel VXLAN 通信异常问题排障记录

原创
作者头像
颇忒脱
发布2022-11-21 10:07:35
6000
发布2022-11-21 10:07:35
举报

现象

rancher 所在 k8s 集群(local 集群)间歇性挂,而其纳管的另一个生产 k8s 集群没有这个问题。

rancher 的 3 台服务器 rancher1(172.16.1.194)、rancher2(172.16.1.195)、rancher3(172.22.1.199)

注意到 rancher3 和 rancher1/2 不在一个网段。

排查

经过排查发现以下几个现象:

  1. 浏览器不访问 rancher 没有事,访问一会儿就挂。
  2. 挂的时候 etcd 集群不健康,存在 leader 丢失 ,节点间通信异常,查询响应缓慢(100ms~20s)

1

docker logs --tail 500 -f etcd

  1. 挂的时候,tcpdump etcd 2380 端口,发现大量连接重置错误

1

docker logs --tail 500 -f etcd

  1. 挂的时候,ping rancher2->rancher3 正常,但是 rancher3->rancher2 不正常。
  2. 挂的时候,traceroute rancher2->rancher3 正常,但是 rancher3->rancher2 不正常。
  3. 挂的时候,rancher3 同子网其他机器 ping rancher2 正常。
  4. 挂的时候,rancher1/2 etcd cluster-health 看到rancher3 unhealthy,

rancher3 etcd cluster-health 看到 rancher1/2 dial 不通,然后看到自己 unhealthy。

恢复的时候,和 ping 一样,rancher 1/2 看到 rancher3 healthy,但是 rancher3 看到的问题依旧。

1 2 3 4 5 6

etcdctl \ --cert-file /etc/kubernetes/ssl/kube-etcd-<ip>.pem \ --key-file /etc/kubernetes/ssl/kube-etcd-<ip>-key.pem \ --ca-file /etc/kubernetes/ssl/kube-ca.pem \ --endpoint https://localhost:2379 \ cluster-health

7.1)重装了 rancher3 操作系统,问题依旧

7.2)修改集群模式,当只有 rancher3 一个节点,没有什么问题

7.3)修改集群模式,rancher3 作为 master,rancher1/2 作为 worker,问题依旧

8)分别在 rancher1 和 3 上抓 flannel 8472 端口的包:

1

tcpdump -i ens160 -nn 'udp and port 8472' -w udp.pcap

然后用 wireshark 分析,发现 rancher3 上有时间跨度 90s 的包收发,rancher1 上只有 33s 的包收发,说明传输过程中数据丢失了。

flannel 用的是 UDP 协议,而传输问题出在 UDP 协议上,那么可以推测数据包超过某个大小时,故障就会发生。

9)测试 UDP 传输

在 rancher1 上启动 nc 监听 UDP 端口

1

nc -u -l -p 8888

在 rancher3 上同样用 nc 传输数据,经过测试发现,1472 字节是单次传输的最大尺寸了,超过这个尺寸 rancher1 就收不到了。

1

nc -u rancher1 8888 < 1473.log

而在 rancher2 上,传输一个 10M 的文件都没有问题。

注意:nc 在做过一次传输之后,服务端要重启,因为 nc 一次只能接收一个连接,要关掉重开才行。

10)虽然测出了超出 1472 字节的 UDP 数据传不过去,但是这时 rancher3 ping rancher1 依然是通的。

推测和流量有关,必须 UDP 流量达到一定程度,才会阻断 rancher3 -> rancher1 的所有通信。

在 rancher1 上启动 iperf3 服务端:

1

iperf3 -s

在 rancher3 上启动 iperf3 压测(流量 22100Kbit/sec)

1

iperf3 -c rancher1 -u -b 22100K

然后 rancher3 -> rancher1 就不通了,ping 也不通。

另外发现,rancher3 -> rancher1 ping 不通的时候,ping rancher2 也不同,实际上是阻断了 rancher3 -> 172.16.1.0/24 网段的所有流量。

结论

还是网络问题,UDP 流量稍大点的时候,某个触发了某个网络设备限流策略。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 现象
  • 排查
  • 结论
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档