问题描述
根据官方文档(从 AKS 群集上的 Pod 捕获 TCP 数据包: https://learn.microsoft.com/zh-cn/troubleshoot/azure/azure-kubernetes/logs/packet-capture-pod-level)的内容,本文将实验如何从AKS Pod中下载网络数据包。
实验操作
第一步:使用kubectl连接到Pod中
- 运行
kubectl get pods -A
以查看 AKS 群集上的 Pod 列表。 -
运行 kubectl exec <pod name> -it -- /bin/bash 连接到Pod
image.png
第二步:tcpdump是否已经安装
- 运行
tcpdump --version
以确定是否安装了 TCPdump - 如果没有,运行 apt-get update && apt-get install tcpdump 安装
第三步:抓取文件并保存网络包到本地目录中
- 运行
tcpdump -s 0 -vvv -w /capture.cap
以开始捕获 Pod 上的 TCP 数据包- 如果以上步骤遇见”tcpdump: /capture.cap: Permission denied“问题,可以把 /capture的路径修改到/var/tmp目录下。
- 数据包捕获完成后,退出 Pod shell 会话
- 运行 kubectl cp <pod name>:/<your path>/capture.cap capture.cap 将网络数据包保存到本地
-
如果在cp时候,遇见错误“tar: removing leading '/' from member names,可以使用 kubectl exec <Pod Name> -- cat /var/tmp/capture.cap > mylocalcapture.cap 来实现
image.png
-
附录:完整的命令
kubectl get pods
kubectl exec <pod name> -it -- /bin/bash
tcpdump --version
kubectl cp <pod name>:/<your path>/capture.cap capture.cap
# Ctrl + C
kubectl exec <Pod Name> -- cat /var/tmp/capture.cap > mylocalcapture.cap
附录:动图展示
aks pod tcpdump.gif
参考资料
从 AKS 群集上的 Pod 捕获 TCP 数据包: https://learn.microsoft.com/zh-cn/troubleshoot/azure/azure-kubernetes/logs/packet-capture-pod-level
当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!