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

Bra*_*rks 13 kubernetes kubectl

我是 kubernetes 的新手,想知道是否有办法让我使用kubectl?

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

Dyl*_*lan 13

kubectl get svc --all-namespaces -o go-template='{{range .items}}{{range.spec.ports}}{{if .nodePort}}{{.nodePort}}{{"\n"}}{{end}}{{end}}{{end}}'
Run Code Online (Sandbox Code Playgroud)

端口转发列在服务中,上面的命令应该遍历所有这些并打印出来

  • 在 Windows 上,您需要反转引号,以便参数使用双引号: `kubectl get svc --all-namespaces -o go-template="{{range .items}}{{range.spec.ports}}{{if .nodePort}}{{.nodePort}}{{'\n'}}{{end}}{{end}}{{end}}"`, @user2233706 (3认同)

Ole*_*zov 12

除了迪伦的回答,小调整与 jq 一起使用。

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)"'
Run Code Online (Sandbox Code Playgroud)
"web1: localhost:30329 -> 8080 -> 8080"
"web2: localhost:30253 -> 8080 -> 8080"
Run Code Online (Sandbox Code Playgroud)


Den*_*mov 11

针对集群的所有命名空间的 Oleg Butuzov 答案的修改。

kubectl get svc --all-namespaces -o json | jq '.items[] | {name:.metadata.name, ns:.metadata.namespace, p:.spec.ports[] } | select( .p.nodePort != null ) | "\(.ns)/\(.name): localhost:\(.p.nodePort) -> \(.p.port) -> \(.p.targetPort)"'
# output
"dbtest/mysql: localhost:31281 -> 3306 -> mysql"
Run Code Online (Sandbox Code Playgroud)


api*_*sim 10

如果问题是关于列出哪些端口已从客户端主机转发到 Kubernetes 集群上的 pod...我不知道kubectl/kubectl port-forward命令。

最终,akubectl port-forward最终调用/api/v1/namespaces/{namespace}/pods/{name}/portforward 端点并通过协议建立与 Kubernetes API 服务器之一的连接SPDY;然后 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


rob*_*rse 6

如果问题是关于从客户端到集群建立的端口转发,则可以执行以下操作:

ps -f | grep 'kubectl' | grep 'port-forward' | awk '{print $10 " " $11}'
Run Code Online (Sandbox Code Playgroud)