如何让kubectl port-forward后台运行同时转发多个服务端口
原因说明
kubectl port-forward 是常驻前台的长连接进程,启动后会持续占用当前Shell会话,除非主动终止否则不会主动退出,因此两组命令都无法触发第二个端口转发规则:
- 用
&&拼接时,执行逻辑为前序命令执行成功并正常退出后,才会运行后续命令。第一个端口转发进程始终处于运行状态不退出,第二个命令不会被调度执行 - 用
||拼接时,执行逻辑为前序命令执行失败退出后,才会运行后续命令。第一个端口转发正常运行无报错退出,第二个命令同样不会触发
实现方案
方案1:临时多端口转发(占用当前终端)
在需要后台运行的port-forward命令末尾加&,将进程交给系统后台调度,即可释放当前Shell的输入权限执行后续命令:
# 将service1的端口转发放到后台运行 kubectl port-forward deployment/service1 8080:8080 & # 执行service2的端口转发,如需同时放到后台,在命令末尾也加&即可 kubectl port-forward deployment/service2 8081:8081
使用提示:
- 执行
jobs可查看当前Shell下所有后台运行的转发任务 - 停止转发时,执行
kill %<任务编号>即可终止对应后台进程;直接关闭当前终端,也会自动终止该会话启动的所有转发进程
方案2:常驻后台转发(不占用终端)
如果需要关闭终端后转发规则依然生效,可以搭配nohup将进程和当前Shell会话解绑,同时屏蔽无关日志输出:
# 后台启动service1端口转发 nohup kubectl port-forward deployment/service1 8080:8080 >/dev/null 2>&1 & # 后台启动service2端口转发 nohup kubectl port-forward deployment/service2 8081:8081 >/dev/null 2>&1 &
停止转发时,执行ps aux | grep "kubectl port-forward"找到对应进程ID,执行kill <进程ID>即可终止。
补充
如果是对同一个Kubernetes资源做多端口转发,不需要启动多个进程,直接在单条命令后追加多个端口映射即可:
# 单条命令同时转发同一个Deployment的8080、8081端口 kubectl port-forward deployment/service1 8080:8080 8081:8081
内容的提问来源于stack exchange,提问作者fxf
相关产品推荐
相关产品推荐

