kubernetes 实用技巧: 使用 ksniff 抓包

https://krew.sigs.k8s.io/

https://krew.sigs.k8s.io/docs/user-guide/setup/install/

发现所有的安装方式,都需要******上网才能,访问请求的地址和下载包的地址基本都是github

手动安装一下

下载相关的软件包(上网下载,这个就不细说了)

https://github.com/kubernetes-sigs/krew/releases/download/v0.4.5/krew-linux_amd64.tar.gz

tar -zxvf  krew-linux_amd64.tar.gz

 

./krew-linux_amd64 install krew (运气好,可能安装了,大概率是访问超时)

如果安装成功 在运行下面 命令安装sniff 大概率不会成功,github 这个网站国内访问大概率超时

kubectl krew install sniff 

这个命令运行之前,要安装git 它要克隆一个仓库https://github.com/kubernetes-sigs/krew-index

 

 成功以后会生成这个目录

 

默认是安装在当前登录的用户家目录,没有就创建

 

[root@Wan100 src]# ll /root/.krew/
total 0
drwxr-xr-x 2 root root 47 Jun 11 16:00 bin
drwxr-xr-x 3 root root 21 Jun 11 15:26 index
drwxr-xr-x 2 root root 41 Jun 11 16:46 receipts
drwxr-xr-x 4 root root 31 Jun 11 15:50 store
-rw-r--r-- 1 root root 0 Jun 11 16:08 test.pcap

我参考安装成功的目录结构创建相应的目录

 发现有软连接,这些软连接都指向/root/.krew/store/

所有按目录结构创建目录

mkdir -p /root/.krew/store/krew/v0.4.5

mkdir -p/root/.krew/store/sniff/v1.6.2/

查看需要下载的包

[root@Wan100 bin]# cat /root/.krew/index/default/plugins/sniff.yaml|egrep ksniff.zip
- uri: https://github.com/eldadru/ksniff/releases/download/v1.6.2/ksniff.zip
- uri: https://github.com/eldadru/ksniff/releases/download/v1.6.2/ksniff.zip
- uri: https://github.com/eldadru/ksniff/releases/download/v1.6.2/ksniff.zip
- uri: https://github.com/eldadru/ksniff/releases/download/v1.6.2/ksniff.zip

因为上面已经下载过krew 的二进制包了,直接拷贝

cp krew-linux_amd64 /root/.krew/store/krew/v0.4.5

cd /root/.krew/store/sniff/v1.6.2/

unzip ksniff.zip

删除掉没用的包

下面是做软连接

ln -s  /root/.krew/store/krew/v0.4.5/krew kubectl-krew

ln -s /root/.krew/store/sniff/v1.6.2/kubectl-sniff kubectl-sniff

 然后下载这个两个文件,拷贝到相应目录,如果

 有这个仓库的文件,直接去plugins 下面拷贝 krew.yaml sniff.yaml文件到 /root/.krew/receipts/

[root@Wan100 receipts]# ll /root/.krew/receipts/
total 8
-rw-r--r-- 1 root root 3534 Jun 11 15:48 krew.yaml
-rw-r--r-- 1 root root 2260 Jun 11 15:57 sniff.yaml

[root@Wan100 default]# kubectl krew -h
krew is the kubectl plugin manager.
You can invoke krew through kubectl: "kubectl krew [command]..."

Usage:
kubectl krew [command]

Available Commands:
help Help about any command
index Manage custom plugin indexes
info Show information about an available plugin
install Install kubectl plugins
list List installed kubectl plugins
search Discover kubectl plugins
uninstall Uninstall plugins
update Update the local copy of the plugin index
upgrade Upgrade installed plugins to newer versions
version Show krew version and diagnostics

Flags:
-h, --help help for krew
-v, --v Level number for the log level verbosity

Use "kubectl krew [command] --help" for more information about a command.

 

这样表明安装成功

kubectl  sniff -n default  test-5756465887-g75tj  -p -o test.pcap 

kubectl describe pods ksniff-84tj5

 发现下载的docker 官网镜像,这个国内不做加速是下载不到,所以通过kubectl sniff -h 发现有两个参数可以指定镜像,一个是生成POD 的镜像,一个是镜像内需要拉取的tcpdump 镜像

 

如果只指定--image 这个镜像,会报下面的错,这个是这个POD 内部要下载的一个tcpdump 镜像,这个启动日志

 这时候按要求指定--tcpdum-image 的镜像

kubectl sniff     ctu-documents-pro-7fb98775d7-w4v4d --image harbor.xxxnet/devops/ksniff-helper:v3  --tcpdump-image harbor.xxx.net/devops/tcpdump:latest  -c nginx  -n default -p -o test.pcap

当我指定了私有镜像,又报下面的错

 

 

看构建历史

 https://github.com/hamravesh/ksniff-helper/blob/master/Dockerfile

 

 这个原因是他默认的那个镜像,crictl 是0.19 的版本,我当前容器运行时 containerd 2.1.1 已经移除了对V1 版本的一些功能

根据上面的Dockerfile更新相应的客户端版本

我这边安装的是当前最新版本1.33

vim  Dockerfile

FROM alpine

RUN apk add --no-cache jq

RUN wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.33.0/crictl-v1.33.0-linux-amd64.tar.gz && \
tar xzf crictl-v1.33.0-linux-amd64.tar.gz && \
mv crictl /usr/bin && \
rm crictl-v1.33.0-linux-amd64.tar.gz

然后构建成harbor.xxx.net/devops/ksniff-helper:latest 推送到自己的harbor 仓库

最终命令

kubectl sniff ctu-documents-pro-7fb98775d7-w4v4d --image harbor.xxx.net/devops/ksniff-helper:lateset --tcpdump-image harbor.xxx.net/devops/tcpdump:latest  -n default -p -o test.pcap

[root@Wan100 src]# kubectl get pods |egrep ksniff
ksniff-lqv5w 1/1 Running 0 2m39s

 

下载到本地用wireshark打开,分析网络问题

 nat 网络出现的问题,要不是开启内核优化 

linux开启tcp_timestamps和tcp_tw_recycle引发的问题研究

https://www.cnblogs.com/charlieroro/p/11593410.html

https://blog.51cto.com/h2ofly/1616306

https://www.jianshu.com/p/25e99b2d1956

https://imroc.cc/post/202105/capture-packets-with-ksniff/

 

posted @ 2021-06-15 15:31  屌丝的IT  阅读(260)  评论(0)    收藏  举报