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 工具进入容器内部执行调试命令。

步骤:

  1. 在节点上安装 nsenter 工具(如果尚未安装)
  2. 查看待调试的业务 Pod 名和 IP:
1
  kubectl get po -owide | grep redis-sentinel-master
  1. 获取容器 ID:
1
docker ps | grep redis-sentinel-master
  1. 获取容器运行的 PID:
1
docker inspect <container_id> | grep -i pid
  1. 使用 nsenter 查看容器 IP,确认是否与步骤 2 查看的 IP 一致:
1
nsenter -t <container_pid> -n ip -4 addr
  1. 使用 nsenter 进入容器网络命名空间进行调试:
1
nsenter -t <container_pid> -n
  1. 在容器内执行调试命令,例如:
1
netstat -antp | grep :6379 | wc -l
  1. 调试完毕后,执行 exit 退出容器命名空间