kubectl - list all port forwards across all services?

11/15/2019

I'm new to kubernetes and am wondering if there's a way for me to see a list of all currently configured port forwards using kubectl ?

I see there's a kubectl port-forward command, but it doesn't seem to list them, just set one up.

-- Brad Parks
kubectl
kubernetes

3 Answers

11/15/2019

In addition to Dylan's answer, small adjustment to use with 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"

p.s. Somehow Dylan's original answer wasn't picked, however it inspired me to play with jq. Upvote him please.

-- Oleg Butuzov
Source: StackOverflow

11/15/2019

If the question is about listing which ports have been forwarded from a client host to a pod on a Kubernetes cluster...I am not aware of a kubectl / kubectl port-forward command for that.

Ultimately, a kubectl port-forward ends up calling the /api/v1/namespaces/{namespace}/pods/{name}/portforward endpoint and establishes a connection to one of the Kubernetes API servers over the SPDY protocol; the kube-apiserver then proxies the connection to a concrete pod. That seems to be the case for when forwarding port(s) with kubectl port-forward to a concrete pod, pod selected from a deployment, or pod for a particular Kubernetes service.

Given that the kube-apiserver proxies the connection, examining the network connections on the client or server side with something like lsof only shows the port number of the proxy (say, 443 or 8443) for connections to it. On the client side then, using the PID, you can figure out on which port it is listening on - that is the local port that's forwarded.

Also on the client side, just listing all kubectl processes using something like ps -f | grep 'kubectl' | grep 'port-forward' will list all current port forwards established with kubectl port-forward

-- apisim
Source: StackOverflow

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

Port forwards are listed in the services the above command should loop through all of them and print them out

-- Dylan
Source: StackOverflow