k8s中网络Connection Reset故障分析

在k8s生成环境中偶尔会出现Connection Reset的现象,如果直接在容器内部访问服务端,没有问题,可以确定故障本身和服务端没有关系,应该是出现在转发的地方。在新版本(ipvs)、老版本(iptables)中都出现过这个坑。

iptables+conntrack

在正常情况下,客户端访问clusterIP后,iptables会通过DNAT将目的地址改成目标容器的IP,服务端处理完成后,会通过SNAT将源地址改成clusterIP后返回给客户端。

k8s中网络Connection Reset故障分析

但如果conntrack表如果满了,返回的数据包将无法执行SNAT操作,客户端看到的源IP不是请求的目标地址,则无法建立TCP通信,返回服务端reset connection。我们可以通过下面的命令调整conntrack表的最大条目。

sysctl -w net.netfilter.nf_conntrack_max=262144
echo "net.netfilter.nf_conntrack_max=262144" >> /etc/sysctl.conf

ipvs

在切换到ipvs后,偶尔还是会出现Connection Reset的问题,ipvs转发原理如下:在INPUT链上对目标地址进行转换,将VIP替换成后端服务的IP。

k8s中网络Connection Reset故障分析

但如果服务的使用长链接的时候,keepalive的时间通常都是2个小时,此时如果ipvs发现长时间没有流量,就会自动断开了。可以通过下面的命令来将 ipvs的 tcp链接过期时间改为2小时,从而避免由于ipvs超时导致连接断开的问题。

 ipvsadm --set 7200 7200 300

后来kube-proxy的也增加了ipvs-tcp-timeout这个参数的配置。

展开阅读全文

页面更新:2024-05-06

标签:目的   条目   服务端   容器   客户端   流量   故障   命令   原理   现象   目标   小时   地址   链接   时间   科技   网络

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top