tcpdump 抓包#
1
| tcpdump -Xnlps0 -nn -iany port 9001 -w 9001.pcap
|
参数说明:
-X
: 显示包的内容(十六进制和 ASCII)-n
: 不将地址转换为名字-l
: 使标准输出行缓冲-p
: 不让网卡进入混杂模式-s0
: 抓取完整的数据包-nn
: 不将协议和端口转换为名字-iany
: 监听所有网络接口-w
: 将原始数据包写入文件
容器 Debug#
Kubectl Debug#
1
| kubectl debug -it redis-sentinel-master-ss-0 --image=reg.smvm.cn/appbase/debug-tools:latest --target=redis-master
|
这个命令会创建一个新的容器,共享目标容器的网络、PID 和 IPC 命名空间,方便进行调试。
nsenter#
当无法正常获取 debug 镜像时,可以使用节点主机上的 nsenter 工具进入容器内部执行调试命令。
步骤:
- 在节点上安装 nsenter 工具(如果尚未安装)
- 查看待调试的业务 Pod 名和 IP:
1
| kubectl get po -owide | grep redis-sentinel-master
|
- 获取容器 ID:
1
| docker ps | grep redis-sentinel-master
|
- 获取容器运行的 PID:
1
| docker inspect <container_id> | grep -i pid
|
- 使用 nsenter 查看容器 IP,确认是否与步骤 2 查看的 IP 一致:
1
| nsenter -t <container_pid> -n ip -4 addr
|
- 使用 nsenter 进入容器网络命名空间进行调试:
1
| nsenter -t <container_pid> -n
|
- 在容器内执行调试命令,例如:
1
| netstat -antp | grep :6379 | wc -l
|
- 调试完毕后,执行
exit
退出容器命名空间