kubernetes 容器内抓包

在使用 kubernetes 跑应用的时候,可能会遇到一些网络问题,比较常见的是服务端无响应(超时)或回包内容不正常,如果没找出各种配置上有问题,这时我们需要确认数据包到底有没有最终被路由到容器里,或者报文到达容器的内容和出容器的内容符不符合预期,通过分析报文可以进一步缩小问题范围。那么如何在容器内抓包呢?
本文提供实用的方法一键进入容器网络命名空间(netns),使用宿主机上的tcpdump进行抓包。

1、查看容器所在node节点ip

[root@harbor ]# kubectl get pod -o wide 
NAME                          READY   STATUS    RESTARTS   AGE    IP              NODE                           NOMINATED NODE   READINESS GATES
nginx-test-5b87f64654-nbh5d   1/1     Running   0          68d    172.21.68.228   ap-southeast-1.172.21.53.204   <none>           <none>

2、获取container id

[root@harbor ]# kubectl describe pods nginx-test-5b87f64654-nbh5d | grep docker
    Container ID:   docker://05337700823e3d5ab5e3ce22270eb9ca975047d0e412a3c5ff029c17afb0b4d7
    Image ID:       docker-pullable://harbor.hcloud.com:81/library/nginx@sha256:7e8a23b29ff996d7152705ee1bc471951b967ef27acd70e26475c033f73975ac

3、登录pod所在服务器获取容器pid

[root@iZt4n1gvg0s2ndoqxgkzfaZ ~]# docker inspect -f {{.State.Pid}} 05337700823e3d5ab5e3ce22270eb9ca975047d0e412a3c5ff029c17afb0b4d7
3079932

4、进入pod的network namespace

[root@iZt4n1gvg0s2ndoqxgkzfaZ ~]# nsenter -n --target pid

说明:这时已经进入 pod 的 netns,可以执行宿主机上的 ip a 或 ifconfig 来查看容器的网卡,执行 netstat -tunlp 查看当前容器监听了哪些端口

5、通过宿主机 tcpdump 命令抓包,然后用wireshark分析即可

[root@iZt4n1gvg0s2ndoqxgkzfaZ ~]# tcpdump -i eth0 -w test.pcap port 80
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

运维那些事~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值