K8s对pod进行网络抓包

Posted sjlinux

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了K8s对pod进行网络抓包相关的知识,希望对你有一定的参考价值。

对pod抓包有两种办法:

一、进入pod内使用tcpdump抓包:

  1. kubectl get pod -owide -n namespace | grep podname
  2. kubectl exec -it podname -n namespace -- bash
  3. tcpdump -i any -vnn host 192.168.1.5 and udp and port 6033 -w name.pcap

tcpdump的使用请参照:​https://www.cnblogs.com/howhy/p/6396664.html

二、pod所在的宿主机(node)上抓包

使用nsenter转换网络命名空间,nsenter就是namespace enter的意思,它可以进入到目标程序所在的namespace中,因此可以用来调试容器程序。我们都知道目前存在的几个namespace,比如网络,用户,pid等,nsenter都有对应的参数可以指定,从而进入该namespace。

  1. 获取pod所在的node:kubectl get pod -owide -n namespace | grep podname
  2. 查看指定 pod 运行的容器 ID:kubectl describe podname -n namespase 或者 docker ps | grep podname
  3. 获得容器进程的 pid: docker inspect --format "{{.State.Pid}}" 容器 ID
  4. 进入该容器的 network namespace:nsenter -n --target PID
  5. 使用tcpdump抓包:tcpdump -i any -vnn host 192.168.1.5 and udp and port 6033 -w name.pcap

以上是关于K8s对pod进行网络抓包的主要内容,如果未能解决你的问题,请参考以下文章

K8S Pod 内抓包定位网络问题

如何在 Kubernetes Pod 内进行网络抓包

kubernetes pod内抓包,telnet检查网络连接的几种方式

网络Wireshark对远程主机抓包

网络抓包原理

如何用抓包工具wireshark对交换机其中一端口进行抓包分析