k8s pod抓包
1 列出待抓包的pod 及分布在哪些节点上
kubectl get pods -n ns1 -o wide | egrep myapp
2 找到对应的containerID
1 | kubectl get pod -n ns1 myapp-xxxxxx-xxxx -o json | jq .status.containerStatuses[0].containerID |
这里我们可以看到一些 containerID 的信息,记录下来,例如我的是 f712d63e9415c02472dd247219fe2245bae8a13c03838b3043434dae81c2565e
3 到对应的K8s Node节点上执行下面命令:
1 | docker exec f712d63e9415c02472dd247219fe2245bae8a13c03838b3043434dae81c2565e /bin/bash -c 'cat /sys/class/net/eth0/iflink' |
得到结果类似:533
4 然后去找对应的虚拟网卡地址:
1 | for i in /sys/class/net/*/ifindex; do grep -l 533 $i; done #不通网络插件网卡名称不通 |
得到结果类似:/sys/class/net/veth79c1674f/ifindex
**5 这样就可以在宿主机上抓包:
**
1 | tcpdump -i veth79c1674f -w /root/tcpdump.cap |
6 然后用wireshark分析:
例如常用的条件表达式: ip.addr == x.x.x.x