對pod抓包有兩種辦法:

一、進入pod內使用tcpdump抓包:

  1. kubectl get pod -owide -n namespace | grep podname
  2. kubectl exec -it podname -n namespace -- bash
  3. tcpdump -i any -vnn host 192.168.1.5 and udp and port 6033 -w name.pcap

tcpdump的使用請參照:??https://www.cnblogs.com/howhy/p/6396664.html?

二、pod所在的宿主機(node)上抓包

使用nsenter轉換網絡命名空間,nsenter就是namespace enter的意思,它可以進入到目標程序所在的namespace中,因此可以用來調試容器程序。我們都知道目前存在的幾個namespace,比如網絡,用戶,pid等,nsenter都有對應的參數可以指定,從而進入該namespace。

  1. 獲取pod所在的node:kubectl get pod -owide -n namespace | grep podname
  2. 查看指定 pod 運行的容器 ID:kubectl describe podname -n namespase 或者 docker ps | grep podname
  3. 獲得容器進程的 pid:?docker inspect --format "{{.State.Pid}}" 容器 ID
  4. 進入該容器的 network namespace:nsenter -n --target PID
  5. 使用tcpdump抓包:tcpdump -i any -vnn host 192.168.1.5 and udp and port 6033 -w name.pcap