kubectl-列出所有服务中的所有端口转发?

时间:2019-11-15 14:11:42

标签: kubernetes kubectl

我是kubernetes的新手,我想知道是否有一种方法可以让我使用kubectl查看当前配置的所有端口转发列表?

我看到有一个kubectl port-forward命令,但似乎没有列出它们,只需设置一个即可。

3 个答案:

答案 0 :(得分:3)

除了Dylan的答案外,还需要对jq进行细微调整。

Beep(hertz, milli)
kubectl get svc -o json | jq '.items[] | {name:.metadata.name, p:.spec.ports[] } | select( .p.nodePort != null ) | "\(.name): localhost:\(.p.nodePort) -> \(.p.port) -> \(.p.targetPort)"'

p.s。 没找到Dylan最初的答案,但是它启发了我玩"web1: localhost:30329 -> 8080 -> 8080" "web2: localhost:30253 -> 8080 -> 8080" 。请支持他。

答案 1 :(得分:3)

如果问题在于列出哪些端口已从客户端主机转发到Kubernetes集群上的Pod ...我不知道要使用kubectl / kubectl port-forward命令。 / p>

最终,kubectl port-forward最终调用了/api/v1/namespaces/{namespace}/pods/{name}/portforward endpoint并通过SPDY协议建立了与Kubernetes API servers之一的连接;然后,kube-apiserver代理到具体Pod的连接。将带有kubectl port-forward的端口转发到具体的pod,从部署中选择的pod或特定Kubernetes服务的pod时,似乎是这种情况。

鉴于kube-apiserver代理了该连接,使用诸如lsof之类的内容检查客户端或服务器端的网络连接,仅显示了代理的端口号(例如443或8443) 。然后,在客户端使用PID,可以确定它正在侦听的端口是转发的本地端口。

同样在客户端,仅使用kubectl之类的列表列出所有ps -f | grep 'kubectl' | grep 'port-forward'进程将列出使用kubectl port-forward建立的所有当前端口转发

答案 2 :(得分:2)

kubectl get svc --all-namespaces -o go-template='{{range .items}}{{range.spec.ports}}{{if .nodePort}}{{.nodePort}}{{"\n"}}{{end}}{{end}}{{end}}'

端口转发在服务中列出,上述命令应遍历所有端口并打印出来