【发布时间】:2021-12-02 13:26:51
【问题描述】:
我是 kubernetes 的新手,想知道是否有办法让我使用 kubectl 查看所有当前配置的端口转发列表?
我看到有一个kubectl port-forward 命令,但它似乎没有列出它们,只需设置一个。
【问题讨论】:
标签: kubernetes kubectl
我是 kubernetes 的新手,想知道是否有办法让我使用 kubectl 查看所有当前配置的端口转发列表?
我看到有一个kubectl port-forward 命令,但它似乎没有列出它们,只需设置一个。
【问题讨论】:
标签: kubernetes kubectl
kubectl get svc --all-namespaces -o go-template='{{range .items}}{{range.spec.ports}}{{if .nodePort}}{{.nodePort}}{{"\n"}}{{end}}{{end}}{{end}}'
端口转发列在服务中,上面的命令应该遍历所有这些并打印出来
【讨论】:
error: error parsing template {{range .items}}{{range.spec.ports}}{{if .nodePort}}{{.nodePort}}{{\n}}{{end}}{{end}}{{end}}, template: output:1: unexpected "\\" in command
kubectl get svc --all-namespaces -o go-template="{{range .items}}{{range.spec.ports}}{{if .nodePort}}{{.nodePort}}{{'\n'}}{{end}}{{end}}{{end}}", @user2233706
除了迪伦的回答,小调整配合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)"'
"web1: localhost:30329 -> 8080 -> 8080"
"web2: localhost:30253 -> 8080 -> 8080"
【讨论】:
如果问题是关于列出哪些端口已从客户端主机转发到 Kubernetes 集群上的 pod...我不知道有 kubectl / kubectl port-forward 命令。
最终,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,您可以确定它正在侦听哪个端口 - 即被转发的本地端口。
同样在客户端,仅列出所有使用ps -f | grep 'kubectl' | grep 'port-forward' 之类的kubectl 进程将列出所有当前使用kubectl port-forward 建立的端口转发
【讨论】:
对集群所有命名空间的 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"
【讨论】:
如果问题是关于从客户端到集群建立的端口转发,则可以这样做:
ps -f | grep 'kubectl' | grep 'port-forward' | awk '{print $10 " " $11}'
【讨论】: