在k8s 中對容器內veth 進行 tcpdump

在K8s調試網絡問題時間經常需要tcpdump 容器內虛擬網卡,歸納一下主要是以下2種方法可以實現。
1, 如果pod 內容器已經安裝有bash。
參照https://community.pivotal.io/s/article/How-to-get-tcpdump-for-containers-inside-Kubernetes-pods?language=en_US .
1.1 kubectl get pod podname_xxx -o json 
    獲取pod 所處host 和 containerID
1.2 docker exec containerID  /bin/bash -c 'cat /sys/class/net/eth0/iflink'
    在host上獲取容器內eth0 iflinkid
1.3 ip link |grep iflinkid
    獲取虛擬網卡的name
1.4 tcpdump -i vethxxx

2, 如果pod 內容器沒有安裝有bash。
2.1 同1.1 獲取host 
2.2 docker ps|grep pause|grep podname_xxx
    獲取pod裏面pause 容器的containerID
2.3 docker inspect 容器的containerID  |grep SandboxKey
    獲取pause 容器的網絡命名空間ID nsID
2.4 ln -s /var/run/docker/netns /var/run/netns
    映射nsID 容器網絡命名空間映射出來.
2.5 ip netns exec nsID ifconfig 或者 ip netns exec nsID tcpdump -i eth0
    這樣就可以在host 執行容器網絡命名空間的veth設置和抓包。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章