一、故障原因

   生产环境采用的是ingress,对接阿里云SLB,但出现了多次访问服务就会有一次响应特别慢的故障,记录一下处理方法。

   后端ingress的pod 上进行抓包,抓一下ingress的网络流量,多访问复现几次问题,看看从ingress pod 的网络抓包里看看能否看到访问超时的情况,从网络连接方面分析。

二、处理办法(查询ingress的pod)

1、 可以先执行kubectl get pods podname -n 命名空间 -o wide看看pod运行的节点。
2、 登录到对应的node上,执行 docker ps|grep pod名称找到容器ID,然后在执行 docker inspect -f {{.State.Pid}} 容器id 找到容器的进程pid。
3、 给节点做个快照备份,执行yum -y install util-linux.x86_64 安装下 nsenter工具,然后执行 nsenter --target 容器pid -n 进入到容器的网络名称空间,通过tcpdump -i eth0 -s 0 -w /var/tmp/1.cap 抓包。用Wireshark分析发现有超时现象。(找会网络的同事分析)

#查询内核参数值
sysctl -a --pattern=tcp_tw_recycle
#设置内核参数
sysctl -w net.ipv4.tcp_tw_recycle=0
#绝对路径
#永久有效
echo 0 > /proc/sys/net/ipv4/tcp_tw_recycle
sysctl -p

三、问题原因

  使用的是阿里云的VPC网络,客户端有三台都是走的同一个IP的NAT网关出公网,数据包通过NAT网关后源IP会变成NAT地址,如果服务端开启了net.ipv4.tcp_tw_recycle=1(tcp快速回收),数据包到达服务端后发出的TPC/IP时间戳不连续,服务端就会识别错乱丢弃连接;

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐