k8s nodeport 端口故障排查记录

发布时间 2023-03-22 21:09:27作者: 疯狂搬砖

有反馈K8S集群nodeport 端口经常不通,不断重试后可能恢复,现场可复现。nginx-ingress 服务也用的是nodeport模式,上机测试,确认问题存在。

 

故障现象:

1、在集群外telnet ingress 端口,偶然性出现超时。

2、集群ingress pod 不停在重启。(在10.10.1.13,10.10.1.31节点上正常)。

 

排查记录:

因刚完成集群版本从v1.15 到 v1.18 版本升级,首先想到是否升级过程异常?

1、查看kubelet 日志发现存在一些报错

 

 

2、查看ingres pod 状态,一直在重启。。

root@xx-10-10-1-17 ~]# kubectl get pods -o wide -n ingress-nginx
NAME                                        READY   STATUS    RESTARTS   AGE     IP            NODE                  NOMINATED NODE   READINESS GATES
nginx-ingress-controller-54956f969c-6295x   1/1     Running   1          5m19s   10.20.2.163   xx-10-10-1-14   <none>           <none>
nginx-ingress-controller-54956f969c-6nmkq   1/1     Running   1          118m    10.20.0.133   xx-10-10-1-11   <none>           <none>
nginx-ingress-controller-54956f969c-ddsrk   1/1     Running   0          118m    10.20.1.120   xx-10-10-1-31   <none>           <none>
nginx-ingress-controller-54956f969c-h7pvc   1/1     Running   0          118m    10.20.0.255   xx-10-10-1-13   <none>           <none>
nginx-ingress-controller-54956f969c-pvqtf   1/1     Running   2       9m28s   10.20.1.23    xx-10-10-1-15   <none>           <none>
nginx-ingress-controller-54956f969c-wfsx4   0/1     Running   2          12m     10.20.2.250   xx-10-10-1-21   <none>           <none>

重启的原因为健康探测失败,pod 被重启。健康探测行为是kubelet发起的。应该是Kuelet在升级时有问题,先处理掉kubelet报错。重建ingress 服务。 pod 状态恢复正常。

 

 

 

ingress pod恢复,但是30080 端口仍出现偶然性不通的情况。

尝试重启 kube-proxy 组件,calico-node 组件。问题依旧。

 

整理一下思路,从新开始测试,在集群上进行抓包。发现服务端不回包??这时想到了内核参数的问题。

 

 

逐一确认了一下,net.ipv4.tcp_tw_recycle = 1 发现快速回收配置为打开。整个集群操作关闭。问题解决。

 

 

总结一下:

当多个客户端通过 NAT 方式联网并与服务端交互时,服务端看到的是同一个 IP,也就是说对服务端而言这些客户端实际上等同于一个,可惜由于这些客户端的时间戳可能存在差异,于是乎从服务端的视角看,便可能出现时间戳错乱的现象,进而直接导致时间戳小的数据包被丢弃。如果发生了此类问题,具体的表现通常是是客户端明明发送的 SYN,但服务端就是不响应 ACK。