成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何優(yōu)雅的在 Kubernetes Pod 內進行網(wǎng)絡抓包

系統(tǒng) Linux
正好前幾天也做了一次抓包問題排查,這次就介紹一下快速進行網(wǎng)絡抓包的幾種方法。

使用 Kubernetes 時,經(jīng)常會遇到一些棘手的網(wǎng)絡問題需要對 Pod 內的流量進行抓包分析。然而所使用的鏡像一般不會帶有 tcpdump 命令,過去常用的做法簡單直接暴力:登錄到節(jié)點所在節(jié)點,使用 root 賬號進入容器,然后安裝 tcpdump。抓到的包有時還需要拉回本地,使用 Wireshark 進行分析。而且整個過程非常繁瑣,跨越幾個環(huán)境。

正好前幾天也做了一次抓包問題排查,這次就介紹一下快速進行網(wǎng)絡抓包的幾種方法。

TL;DR

幾種方法各有優(yōu)缺點,且都不建議在生產環(huán)境使用。假如必須使用,個人傾向于 kubectl debug 臨時容器的方案,但這個方案也有不足。

  • 使用額外容器:這種方案為了 Pod 添加一個額外的容器,使用了靜態(tài)編譯的 tcpdump 進行抓取,借助了多容器共享網(wǎng)絡空間的特性,適合 distroless 容器。缺點是需要修改原來的 Pod,調式容器重啟會引起 Pod 重啟。
  • kubectl plugin ksniff:一個 kubectl 插件。支持特權和非特權容器,可以將捕獲內容重定向到 wireshark 或者 tshark。非特權容器的實現(xiàn)會稍微復雜。
  • kubectl debug 臨時容器:該方案對于 distroless 容器有很好的支持,臨時容器退出后也不會導致 Pod 重啟。缺點是 1.23 的版本臨時容器才進入 beta 階段;而且筆者在將捕獲的數(shù)據(jù)重定向到本地的 Wireshark 時會報數(shù)據(jù)格式不支持的錯誤。

環(huán)境

使用 k3d 創(chuàng)建 k3s 集群,這里版本選擇 1.23:

$ k3d cluster create test --image rancher/k3s:v1.23.4-k3s1

抓包的對象使用 Pipy[1] 運行的一個 echo 服務(返回請求的 body 內容):

$ kubectl run echo --image addozhang/echo-server --image-pull-policy IfNotPresent

為了方便訪問,創(chuàng)建一個 NodePort Service:

$ kubectl expose pod echo --name echo --port 8080 --type NodePort

掛載容器

在之前的文章我們介紹調試 distroless 容器的幾種方法時曾用過修改 Pod 添加額外容器的方式,新的容器使用鏡像 addozhang/static-dump 鏡像。這個鏡像中加入了靜態(tài)編譯的 tcpdump。

修改后的 Pod:

apiVersion: v1
kind: Pod
metadata:
labels:
run: echo
name: echo
spec:
containers:
- image: addozhang/echo-server
imagePullPolicy: IfNotPresent
name: echo
resources: {}
- image: addozhang/static-dump
imagePullPolicy: IfNotPresent
name: sniff
command: ['sleep', '1d']
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}

重新部署后,就可以使用下面命令將抓取網(wǎng)絡包并重定向到本地的 Wireshark:

$ kubectl exec -i echo -c sniff -- /static-tcpdump -i eth0 -U -w - | wireshark -k -i -

debug-container

kubectl plugin ksniff

ksniff[2] 是一個 kubectl 插件,利用 tcpdump  和 Wireshark 對 Pod 中的網(wǎng)絡包實現(xiàn)遠程抓取。使用這種方法既可以借助 Wireshark 的強大功能,又能降低對 Pod 的影響。

ksniff 的實現(xiàn)是上傳一個靜態(tài)編譯的tcpdump 到 Pod 中,然后將 tcpdump 的輸出重定向到本地的 Wireshark 進行調試。

核心可以理解成 tcpdump -w - | wireshark -k -i -,與前面使用 debug 容器的方案類似。

安裝

通過 krew[3] 安裝:

$ kubectl krew install sniff

或者下載發(fā)布包,手動安裝:

$ unzip ksniff.zip
$ make install

特權模式容器

使用說明參考 ksniff 官方說明[4],這里我們只需要執(zhí)行如下命令,默認就會重定向到 Wireshark,不需要顯示地指定:

$ kubectl sniff echo -n default -f "port 8080"

ksniff

除了使用 Wireshark,可以使用其命令行模式的 tshark:

$ kubectl sniff echo -n default -f "port 8080" -o - | tshark -r -

非特權模式容器

對于無特權的容器,就無法使用上面的方法了,會收到如下的錯誤提示:

INFO[0000] command: '[/tmp/static-tcpdump -i any -U -w - port 8080]' executing successfully exitCode: '1', stdErr :'static-tcpdump: any: You don't have permission to capture on that device
(socket: Operation not permitted)

不過,Ksniff 對此類容器也提供了支持。通過添加 -p 參數(shù),ksniff 會創(chuàng)建一個新的可以訪問節(jié)點上 Docker Daemon 的 pod,然后將容器附加到目標容器的網(wǎng)絡命名空間,并執(zhí)行報文捕獲。

注意,筆者使用的是 k3s 的環(huán)境,執(zhí)行命令時需要通過參數(shù)指定 Docker Daemon 的 socket 地址 --socket /run/k3s/containerd/containerd.sock

$ kubectl sniff echo -n default -f "port 8080" --socket /run/k3s/containerd/containerd.sock -p | wireshark -k -i -

ksniff-priviledged

kubectl debug 臨時容器

接下來也是之前介紹過的 kubectl debug ,也就是為 Pod 添加臨時容器[5]。

同樣我們可以通過這種方法對 Pod 的網(wǎng)絡進行抓包,臨時容器我們使用 addozhang/static-dump 鏡像。

$ kubectl debug -i echo --image addozhang/static-dump --target echo -- /static-tcpdump -i eth0

原本臨時容器應該是其中最接近完美的方案:不需上傳任何文件目標容器、無需修改 Pod、無需重啟、無需特權、支持 distroless 容器。然而,當嘗試重定向到 Wireshark 或者 tshark 的時候,會遇到 Data written to the pipe is neither in a supported pcap format nor in pcapng format. 問題。

最后經(jīng)過一番折騰,也未能解決該問題。

責任編輯:龐桂玉 來源: 奇妙的Linux世界
相關推薦

2023-10-19 19:42:25

IstioPodkubernetes

2022-09-15 15:31:50

AndroidHTTPS抓包

2022-07-04 09:13:54

KubernetespodLinux

2021-12-21 15:17:53

Kubernetes緩存Linux

2021-10-26 10:28:41

開發(fā)架構Kubernetes

2024-03-28 18:08:44

Kubernetes抓包Pod

2024-03-29 12:11:46

2024-06-19 09:33:05

2019-01-21 09:28:32

版本命令程序員

2020-08-29 19:28:08

版本回退命令代碼

2020-11-30 12:15:26

KubernetesPodLinux

2020-07-06 07:52:10

Kubernetes網(wǎng)絡通信

2023-02-09 16:47:34

KubernetesPod優(yōu)先級

2022-03-30 09:11:00

Python網(wǎng)絡爬蟲

2020-04-10 08:00:08

Kubernetes補丁pod

2022-09-15 07:31:49

Spring攔截器注解

2024-12-06 09:27:28

2022-01-21 09:45:42

Mozilla SOKubernetesLinux

2022-09-22 12:11:38

PodKubernetes

2024-04-15 05:00:00

kubernete網(wǎng)絡容器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久天天躁狠狠躁夜夜躁2014 | 国产免费一区 | 欧美精品在线视频 | 亚洲视频免费在线观看 | 欧美男人天堂 | 欧美成人精品一区二区男人看 | 免费在线一区二区三区 | 一区二区三区亚洲 | 午夜av电影 | 免费观看色 | 日韩欧美理论片 | 夜夜草 | 亚洲精品久久久久久首妖 | 一级黄色片免费在线观看 | 日韩欧美一区二区三区 | 狠狠操电影 | 午夜精品在线观看 | 国产一级电影网 | 国产免费一区二区 | 精品欧美一区二区三区久久久小说 | 欧美999 | 99久久精品免费看国产四区 | 看黄在线| 日韩中文字幕一区二区 | 亚洲男人天堂av | 日本a在线| 日韩视频一区二区 | av片网站 | 日韩一区二区三区精品 | 精品国产一区二区三区成人影院 | 一区二区三区四区在线视频 | 精品国产一区二区国模嫣然 | 欧美在线天堂 | 天天艹天天干天天 | 亚洲一区二区三区在线免费观看 | 色爽女| 国产亚洲区 | 国产精品日韩欧美一区二区三区 | 欧美淫片| 精品久久久久久久 | 99精品国产一区二区三区 |