kubectl端口转发超时问题

Sta*_*ley 16 kubernetes kubectl

在使用kubectl端口转发功能时,我能够成功地将本地端口转发到远程端口.然而,似乎在几分钟空转后,连接被丢弃.不知道为什么会这样.

这是用于移植的命令:

kubectl --namespace somenamespace port-forward somepodname 50051:50051
Run Code Online (Sandbox Code Playgroud)

错误信息:

Forwarding from 127.0.0.1:50051 -> 50051
Forwarding from [::1]:50051 -> 50051
E1125 17:18:55.723715    9940 portforward.go:178] lost connection to pod
Run Code Online (Sandbox Code Playgroud)

希望能够保持联系

Mar*_*cel 17

我通过保持连接活动来解决这个问题,例如使用 curl 或 nc。

转发端口:

kubectl --namespace somenamespace port-forward somepodname 50051:50051
Run Code Online (Sandbox Code Playgroud)

在另一个终端中,通过每 10 秒访问端口来保持连接处于活动状态:

while true ; do nc -vz 127.0.0.1 50051 ; sleep 10 ; done
Run Code Online (Sandbox Code Playgroud)

  • 这有效!为什么?天知道……PLAIN C 的日子在哪里!和unix披萨盒... (3认同)
  • 这是在不更改服务器端任何内容的情况下真正保持连接活动的唯一答案。将端口转发命令放入循环中将中断长轮询连接,这是我首先遇到端口转发超时问题的主要原因。 (2认同)

aka*_*ppi 15

似乎有5分钟的超时可以用kubelet参数覆盖:

https://github.com/kubernetes/kubernetes/issues/19231

如果您想将超过5分钟(或无限制)的内容传递到您的kubelet中,您可以指定streaming-connection-idle-timeout.例如 --streaming-connection-idle-timeout=4h,将其设置为4小时.或者: --streaming-connection-idle-timeout=0使其无限制.

  • 当我尝试这个时,我得到“未知标志:--streaming-connection-idle-timeout”。 (5认同)
  • @magnattic `--request-timeout` 会起作用吗?@RobotNerd 在 2018 年的一个现已删除(由他/她)的答案中提到了这一点。 (3认同)

小智 10

为窗户制作这样的蝙蝠(上帝原谅我)

:1
oc port-forward PODNAME 8003:8080
goto 1
Run Code Online (Sandbox Code Playgroud)

  • 你被原谅了 (7认同)

小智 8

将kube设置streaming-connection-idle-timeout为0应该是正确的解决方案,但是如果您不想更改任何内容,则可以使用while-do构造

格式: while true; do <<YOUR COMMAND HERE>>; done

因此,只需在CLI中输入:while true; do kubectl --namespace somenamespace port-forward somepodname 50051:50051; done应保持kubectl在连接丢失时重新连接

  • +1对我来说是更好的解决方案:从没有运行kubelet的跳线主机转发到kubernetes仪表板 (2认同)
  • @AndrewSneck powershell: while ($true) { kubectl port-forward your-command-here } (2认同)
  • 即使超时,kubectl 进程也不会退出(获得此类日志:E0621 10:11:52.183060 20798 portforward.go:340] 为端口 9191 创建错误流时出错 -&gt; 9191:发生超时)。所以我怀疑这个 while 循环在超时时是否会循环。 (2认同)