在pod內抓包有兩種方式:
一、進入pod內部使用tcpdump進行抓包(鏡像內安裝tcpdump包)
1、kubectl get pod -o wide | grep podname
2、Kubectl exec -it podname /bin/bash
3、tcpdump -i any -vnn host 177.177.202.43 and udp and port 162 -w name.pcap
二、 在Pod所在主機上抓包
基本原理,用nsenter轉換網路命名空間。
操作步驟:
1、首先查找pod運行在那個節點上kubectl get pod -o wide | grep podname(只能在該節點上抓包)。
2、登錄節點使用docker ps|grep xxx命令,獲取運行中的docker容器的container id,下面記為$CID。
[root@160 ~]# docker ps | grep alarm
02aca4d677c2 matrix-registry.h3c.com:8088/plat/itom-alarm-dm "/opt/iMC/server/bin…" 7 days ago Up 7 days k8s_itom-alarm-dm_itom-alarm-dm-78b4cbbcb-46r58_service-software_fc16782d-572f-4bfb-8bf0-9ed6b47a31b7_0
3、使用docker inspect --format "{{.State.Pid}}" $CID命令,獲取docker容器的行程ID,記為$PID。
[root@160 ~]# docker inspect --format "{{.State.Pid}}" 02aca4d677c2
9573
4、使用nsenter轉換網路命名空間,命令為:nsenter –n –t $PID
[root@160 ~]# nsenter -n -t 9573
[root@160 ~]#
注意,這條命令成功時沒有回顯,所以沒有訊息就是好訊息
5、 查看當前命名空間下的網卡名稱,命令:ip addr或ifconfig
eth0@if3339: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:38:1a:53:81:85 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 177.177.56.212/32 scope global eth0
valid_lft forever preferred_lft forever
注意:網卡名稱只是@符號之前的部分,在這個例子中就是eth0
6、 到這里一切準備就緒,可以使用tcpdump抓包了,如下圖:
tcpdump -i eth0 -w 1.pcap
這里的引數,除了-i系結網卡意外,其余的可以根據需要自行添加和洗掉,就和普通的tcpdump抓包沒有區別了
7.使用wireshark進行分析
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/22728.html
標籤:專題技術討論區
