首页 > 解决方案 > 连接丢失时 kubectl port-forward 不返回

问题描述

的说help_kubectl port-forwardThe forwarding session ends when the selected pod terminates, and rerun of the command is needed to resume forwarding.

虽然它不会在 pod 终止时自动重新连接,但该命令也不会返回,只会挂起并出现错误:

E0929 11:57:50.187945   62466 portforward.go:400] an error occurred forwarding 8000 -> 8080: error forwarding port 8080 to pod a1fe1d167955e1c345e0f8026c4efa70a84b9d46029037ebc5b69d9da5d30249, uid : network namespace for sandbox "a1fe1d167955e1c345e0f8026c4efa70a84b9d46029037ebc5b69d9da5d30249" is closed
Handling connection for 8000
E0929 12:02:44.505938   62466 portforward.go:400] an error occurred forwarding 8000 -> 8080: error forwarding port 8080 to pod a1fe1d167955e1c345e0f8026c4efa70a84b9d46029037ebc5b69d9da5d30249, uid : failed to find sandbox "a1fe1d167955e1c345e0f8026c4efa70a84b9d46029037ebc5b69d9da5d30249" in store: not found

我希望它返回,以便我可以处理此错误并制作将重新运行它的脚本。

有什么方法或解决方法可以做到这一点吗?

标签: bashshellkubernetescommand-line-interfacekubectl

解决方案


根据GitHub 上 Kubernetes 问题页面上描述的信息,我可以假设这是您的情况的正常行为:在删除 pod 时无法取消端口转发连接,因为服务器端的 REST 连接器内部没有连接管理.

即使 pod 不存在,从 kubectl 一直到挂起的 kubelet 都保持着连接。

我们将在端口转发上代理一个 websocket 连接 kubectl->kubeapiserver->kubelet。


推荐阅读