我遇到了一个关于kubectl exec -it ...会话的特殊问题。
它们会在4-5分钟后超时,这取决于云提供商和一些模糊的调整,尽管我进行了搜索,但我无法弄清楚。这是一个已知的问题,人们似乎不同意这是由于负载均衡器超时还是kubelet超时。
无论哪种方式,kubectl或kubectl exec上的选项都不提供任何类型的保持连接或超时调优。
我用tcpdump跟踪了一些事情,我确实在4-5分钟后收到了RESET数据包。
然而,我也注意到,只有在会话空闲时才会发生这种情况。如果我键入任何命令,4-5分钟将被重置。
因此,我正在寻找一种方法,每隔几分钟就可以轻松地将kubectl会话中的keepalive TCP/UDP数据包发送回调用计算机(然后自行决定是否超时)。
我怎样才能做到这一点呢?
编辑:另一种问这个问题的方法是:-如何找到打开kubectl exec会话的计算机的IP/端口?
发布于 2020-04-30 18:56:51
我已经尝试用不同的配置和方法在GCP上重现您的问题,但我无法实现相同的问题。
遗憾的是,这个问题没有简单的答案。Kubernetes的许多实现依赖于主服务器和节点之间的SSH隧道,因此隧道也可能超时,这取决于它的配置。在GKE上,它在公共群集上具有ssh隧道,并在私有群集上使用VPC对等,但其他安装可能有其他方法,因此没有简单的解决方案。
但是,作为一种变通方法,您可以让ping在后台运行,以避免空闲。这样就不会再让你超时了。
如果有帮助,请让我知道。
发布于 2020-04-22 13:26:28
如果您为kubectl服务选择tcp连接。TCP有一个保活机制。对于Linux工作站,默认的保持连接时间为7200s。
sysctl -a | grep keep
net.ipv4.tcp_keepalive_time = 7200您可以在/etc/sysctl.conf和'sysclt -p‘中将保持连接时间更改为200s以使其生效。
cat /etc/sysctl.conf | grep keep
net.ipv4.tcp_keepalive_time=200tcp注意:此更改是系统级别的,一旦更改,所有连接都将受此的影响
发布于 2020-08-28 16:34:07
4-5分钟本质上是为集群提供高可用性的负载均衡器的超时设置。
我遇到了同样的问题(对于logs -f和exec),我得出的结论是kubectl应该发送keep alive信号,这样负载均衡器就不会因为连接看起来空闲而终止连接。
所以我在Kubernetes端为这个创建了这个特性请求:https://github.com/kubernetes/kubernetes/issues/94301
https://stackoverflow.com/questions/61354759
复制相似问题