CONNECTION_RESET(k8s中网络Connection Reset故障分析)

CONNECTION_RESET(k8s中网络Connection Reset故障分析)

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

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

CONNECTION_RESET(k8s中网络Connection Reset故障分析)





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

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




CONNECTION_RESET(k8s中网络Connection Reset故障分析)





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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站(www.zengtui.com)有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 5735363@.com 举报,一经查实,本站将立刻删除。

版权声明:本文内容由作者小仓提供,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至907991599@qq.com 举报,一经查实,本站将立刻删除。如若转载,请注明出处:https://www.shaisu.com/270631.html

(0)
小仓的头像小仓

相关推荐