问题描述
当在AKS中遇见复杂的网络问题,想要进入到特定的POD中来抓取网络文件包进行分析。
特分享抓取网络包的方法!
操作步骤
第一步:使用kubectl get pods命令确认问题Pod所在的Node
第二步:使用node shell登录到相应node上
kubectl node-shell <node name>
第三步:在node上使用crictl ps命令找到相应pod的container id
(下图以coredns pod为例,container id是7fa********, 在命令输出的第一列)
第四步:使用下面的命令得到PID:
crictl inspect --output go-template --template '{{.info.pid}}' <container id>
第五步:使用nsenter命令及PID进入Pod的network space:
nsenter -n -t <PID>
第六步:抓包之前可以change directory到/var/tmp,这样可以避免一些可能的Permission Deny问题
cd /var/tmp
第七步:使用tcpdump 命令抓包,其中port表示只抓取3306的数据包,-w表示保存的文件
tcpdump -i eth0 port 3306 -w name.pcap
第八步:复现问题后,停止 tcpdump 抓包
按下 Ctrl+C 键来中断正在运行的 tcpdump 进程