Skip to main content
Version: latest

Using top tcp

The top tcp gadget is used to visualize active TCP connections.

On Kubernetes

First, we need to create one pod for us to play with:

$ kubectl run test-pod --image busybox:latest sleep inf

You can now use the gadget, but output will be empty:

$ kubectl gadget top tcp
K8S.NODE K8S.NAMESPACE K8S.PODNAME K8S.CONTAINERNAME PID COMM IP SRC DST SENT RECV

Indeed, it is waiting for TCP connection to occur. So, open another terminal and keep and eye on the first one, exec the container and use wget:

$ kubectl exec -ti test-pod -- wget 1.1.1.1

On the first terminal, you should see:

K8S.NODE           K8S.NAMESPACE K8S.PODNAMECONTAINER   PID         COMM       IP SRC                        DST                  SENT       RECV
minikube-docker default test-pod test-pod 289548 wget 4 p/default/test-pod:47228 r/1.1.1.1:443 296B 15.49KiB
minikube-docker default test-pod test-pod 289540 wget 4 p/default/test-pod:42604 r/1.1.1.1:80 70B 381B

This line corresponds to the TCP connection initiated by wget.

Clean everything

Congratulations! You reached the end of this guide! You can now delete the pod you created:

$ kubectl delete pod test-pod
pod "test-pod" deleted

With ig

Start a container that runs nginx and access it locally:

$ docker run --rm --name test-top-tcp nginx /bin/sh -c 'nginx; while true; do curl localhost; sleep 1; done'

Start the gadget, it'll show the different connections created the localhost:

$ sudo ig top tcp -c test-top-tcp
RUNTIME.CONTAINERNAME PID COMM IP SRC DST SENT RECV
test-top-tcp 2177846 nginx 4 127.0.0.1:80 127.0.0.1:53130 238B 73B
test-top-tcp 2178303 curl 4 127.0.0.1:53130 127.0.0.1:80 73B 853B