成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Kubernetes 中使用插件 sniff 進(jìn)行網(wǎng)絡(luò)抓包

Baoyuan / 2579人閱讀

摘要:安裝好的命令在目錄下面,所以我們可以把這個(gè)路徑加到終端的配置文件中。這里面其實(shí)下載了兩個(gè)文件,其中一個(gè)是,另外一個(gè)是,稍后我們會(huì)看到這個(gè)的用途。我們拿第一個(gè)出來測試下抓包。為了方便敘述,我們把每一行輸出都標(biāo)上了數(shù)字。

背景

在 Kubernetes 的實(shí)際使用中,我們經(jīng)常需要配合業(yè)務(wù)調(diào)查問題,對于微服務(wù)來說,這個(gè)問題更多的是查看 API 的調(diào)用情況,這些API或者采用 RPC 協(xié)議或者是采用 HTTP 的協(xié)議。這兩種協(xié)議都是基于 TCP 的協(xié)議,所以一般我們會(huì)到容器中使用 tcpdump 工具來抓包,然后就地或者拿出來放到 wireshark 圖形化軟件里面分析。

這種情況下,需要我們的基礎(chǔ)鏡像提前把 tcpdump 等排查工具打包進(jìn)去,否則線上安裝 debug 軟件,一者違反安全規(guī)則,另外如果需要支持的 Pod 過多,安裝 debug 工具本身就有不小的工作量。

krew

在 Kubernetes 中,有一個(gè)插件命令叫做 krew,可以通過這個(gè)命令來安裝一個(gè)叫做 sniff 的插件工具來完成這個(gè)工作。下面我們先看看如何安裝這個(gè) krew 插件。

krew 的項(xiàng)目地址在:https://github.com/kubernetes-sigs/krew 。如果有興趣可以自行瀏覽,我們這里介紹下在 Centos 等 Linux 下面如何安裝。

首先,需要確認(rèn)系統(tǒng)安裝了 git 。

其次,復(fù)制下面的命令到終端軟件中,這段命令會(huì)去下載和安裝這個(gè) krew 插件。

$(
  set -x; cd "$(mktemp -d)" &&
  curl -fsSLO "https://storage.googleapis.com/krew/v0.2.1/krew.{tar.gz,yaml}" &&
  tar zxvf krew.tar.gz &&
  ./krew-"$(uname | tr "[:upper:]" "[:lower:]")_amd64" install 
    --manifest=krew.yaml --archive=krew.tar.gz
)

安裝好的 krew 命令在目錄 ~/.krew/bin 下面,所以我們可以把這個(gè)路徑加到終端的配置文件中。一般是 ~/.bashrc 或者是 ~/.zshrc

例如,使用如下的命令將 krew 命令的所在路徑寫入到 $PATH 中。

$ echo "export PATH=$PATH:$HOME/.krew/bin" >> ~/.bashrc

需要注意的是,上面設(shè)置的這個(gè)路徑同時(shí)也是通過 krew 安裝的其他的插件命令所在的目錄,所以一次設(shè)置后面其他的命令都可以直接使用了。

安裝完 krew 之后,我們需要通過 kubectl krew update 命令來更新支持的插件命令列表,下載下來的 Plugin 配置文件都存放在 ~/.krew/index/plugins 下面。

$ kubectl krew update
Updated the local copy of plugin index.
sniff

我們可以使用命令 kubectl krew install sniff 來安裝這個(gè)插件命令,安裝好的命令位于 ~/.kube/store/sniff 下面。

$ kubectl krew install sniff
Updated the local copy of plugin index.
Installing plugin: sniff
CAVEATS:

 |  This plugin needs the following programs:
 |  * wireshark (optional, used for live capture)
/
Installed plugin: sniff

我們可以看下 sniff 命令的所在目錄下的文件。

$ ls -ahl ~/.krew/store/sniff/71102253eded8900c8f7b0d0624c65b3c77ecd6bcd28fabc9a200daac502282a/
total 36M
drwx------ 2 root root 4.0K Jun 11 17:58 .
drwxr-xr-x 3 root root 4.0K Jun 11 17:58 ..
-rwxr-xr-x 1 root root  33M Jun 11 17:58 kubectl-sniff
-rwxr-xr-x 1 root root 2.6M Jun 11 17:58 static-tcpdump

這里面其實(shí)下載了兩個(gè)文件,其中一個(gè)是 sniff,另外一個(gè)是 tcpdump,稍后我們會(huì)看到這個(gè) tcpdump 的用途。

Pod 抓包

我們首先找個(gè) Pod 來研究下 sniff 的具體抓包操作方法。

NAME                         READY   STATUS    RESTARTS   AGE
echo-go-bdf4bd7ff-v6hml      1/1     Running   0          8h
echo-java-55c5dcbbc9-7dh5c   1/1     Running   1          30h

我們拿第一個(gè) Pod 出來測試下抓包。

$ kubectl sniff echo-go-bdf4bd7ff-v6hml -n devops
<1> INFO[0000] sniffing method: upload static tcpdump
<2> INFO[0000] using tcpdump path at: "/root/.krew/store/sniff/71102253eded8900c8f7b0d0624c65b3c77ecd6bcd28fabc9a200daac502282a/static-tcpdump"
<3> INFO[0000] no container specified, taking first container we found in pod.
<4> INFO[0000] selected container: "echo-go"
<5> INFO[0000] sniffing on pod: "echo-go-bdf4bd7ff-v6hml" [namespace: "devops", container: "echo-go", filter: "", interface: "any"]
<6> INFO[0000] uploading static tcpdump binary from: "/root/.krew/store/sniff/71102253eded8900c8f7b0d0624c65b3c77ecd6bcd28fabc9a200daac502282a/static-tcpdump" to: "/tmp/static-tcpdump"
<7> INFO[0000] uploading file: "/root/.krew/store/sniff/71102253eded8900c8f7b0d0624c65b3c77ecd6bcd28fabc9a200daac502282a/static-tcpdump" to "/tmp/static-tcpdump" on container: "echo-go"
<8> INFO[0000] executing command: "[/bin/sh -c ls -alt /tmp/static-tcpdump]" on container: "echo-go", pod: "echo-go-bdf4bd7ff-v6hml", namespace: "devops"
<9> INFO[0000] command: "[/bin/sh -c ls -alt /tmp/static-tcpdump]" executing successfully exitCode: "0", stdErr :""
<10> INFO[0000] file found: "-rwxr-xr-x 1 root root 2642872 Jan  1  1970 /tmp/static-tcpdump"
<11> INFO[0000] file was already found on remote pod
<12> INFO[0000] tcpdump uploaded successfully
<13> INFO[0000] spawning wireshark!
<14> INFO[0000] starting sniffer cleanup
<15> INFO[0000] sniffer cleanup completed successfully
<16> Error: exec: "wireshark": executable file not found in $PATH

為了方便敘述,我們把每一行輸出都標(biāo)上了數(shù)字。這些數(shù)字不在實(shí)際輸出的結(jié)果中。 從第 <1> - <7> 行我們可以看出,sniff 命令把我們剛剛看到的 static-tcpdump 上傳到 Pod 中,我們可以到 Pod 里面在 /tmp 目錄下發(fā)現(xiàn)這個(gè) static-tcpdump 文件。然后試圖啟動(dòng) wireshark 進(jìn)程,但是由于我們服務(wù)器一般不安裝 wireshark 所以啟動(dòng)失敗了。

這種情況下,我們可以使用一個(gè)新的選項(xiàng) -o 來將抓包的內(nèi)容輸出到文件中。

$ kubectl sniff echo-go-bdf4bd7ff-v6hml -n devops -o test.pcap
kubectl sniff echo-go-bdf4bd7ff-v6hml -n devops -o pcap
INFO[0000] sniffing method: upload static tcpdump
INFO[0000] using tcpdump path at: "/root/.krew/store/sniff/71102253eded8900c8f7b0d0624c65b3c77ecd6bcd28fabc9a200daac502282a/static-tcpdump"
INFO[0000] no container specified, taking first container we found in pod.
INFO[0000] selected container: "echo-go"
INFO[0000] sniffing on pod: "echo-go-bdf4bd7ff-v6hml" [namespace: "devops", container: "echo-go", filter: "", interface: "any"]
INFO[0000] uploading static tcpdump binary from: "/root/.krew/store/sniff/71102253eded8900c8f7b0d0624c65b3c77ecd6bcd28fabc9a200daac502282a/static-tcpdump" to: "/tmp/static-tcpdump"
INFO[0000] uploading file: "/root/.krew/store/sniff/71102253eded8900c8f7b0d0624c65b3c77ecd6bcd28fabc9a200daac502282a/static-tcpdump" to "/tmp/static-tcpdump" on container: "echo-go"
INFO[0000] executing command: "[/bin/sh -c ls -alt /tmp/static-tcpdump]" on container: "echo-go", pod: "echo-go-bdf4bd7ff-v6hml", namespace: "devops"
INFO[0000] command: "[/bin/sh -c ls -alt /tmp/static-tcpdump]" executing successfully exitCode: "0", stdErr :""
INFO[0000] file found: "-rwxr-xr-x 1 root root 2642872 Jan  1  1970 /tmp/static-tcpdump
"
INFO[0000] file was already found on remote pod
INFO[0000] tcpdump uploaded successfully
INFO[0000] output file option specified, storing output in: "pcap"
INFO[0000] start sniffing on remote container
INFO[0000] executing command: "[/tmp/static-tcpdump -i any -U -w - ]" on container: "echo-go", pod: "echo-go-bdf4bd7ff-v6hml", namespace: "devops"

這種情況下,我們看到容器中的 /tmp/static-tcpdump 命令已經(jīng)啟動(dòng)了,并把輸出導(dǎo)向到 stdout,然后我們在 sniff 命令中把它寫入到 test.pcap 文件中。

最后,我們就可以用本地的 wireshark 圖形化工具打開這個(gè) test.pcap 文件進(jìn)行分析了。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/32994.html

相關(guān)文章

  • 基于 Container 網(wǎng)絡(luò)共享機(jī)制的抓包實(shí)踐

    摘要:由于出于簡單可維護(hù)的目的,這個(gè)容器的基礎(chǔ)鏡像里面沒有帶上任何和網(wǎng)絡(luò)抓包相關(guān)的功能。這就為網(wǎng)絡(luò)抓包提供了基礎(chǔ)。抓包實(shí)踐我們現(xiàn)在用一個(gè)提供簡單服務(wù)的鏡像來進(jìn)行測試。 背景 假設(shè)存在一個(gè)容器,提供的服務(wù)是 HTTP 或者 RPC 的服務(wù)。由于出于簡單可維護(hù)的目的,這個(gè)容器的基礎(chǔ)鏡像里面沒有帶上任何和網(wǎng)絡(luò)抓包相關(guān)的功能。那么如何能搞對這樣的容器進(jìn)行抓包,以分析業(yè)務(wù)上面可能存在的問題呢? 共享網(wǎng)...

    blastz 評論0 收藏0
  • 網(wǎng)絡(luò)安全 - 旁路監(jiān)聽攻擊技術(shù)

    摘要:部分來自網(wǎng)絡(luò),適用于學(xué)習(xí),維護(hù)網(wǎng)絡(luò)安全,做合法公民一和不同,沒有面向連接的機(jī)制,其是一種不可靠的協(xié)議,沒有確認(rèn)機(jī)制。 部分來自網(wǎng)絡(luò),適用于學(xué)習(xí),維護(hù)網(wǎng)絡(luò)安全,做合法公民 一、UDP 和TCP不同,UDP沒有面向連接的機(jī)制,其是一種不可靠的協(xié)議,沒有確認(rèn)機(jī)制。也就是說只要其端口開放,有數(shù)據(jù)需要交互時(shí)直接進(jìn)行數(shù)據(jù)交互,也不需要TCP的三次握手。這樣的話,基于UDP的攻擊比基于TCP的攻擊需...

    CoderBear 評論0 收藏0
  • 基于網(wǎng)絡(luò)抓包實(shí)現(xiàn)kubernetes微服務(wù)的應(yīng)用級監(jiān)控

    摘要:請谷歌一波,會(huì)有遍地的解釋。網(wǎng)絡(luò)抓包實(shí)現(xiàn)使用實(shí)現(xiàn)網(wǎng)絡(luò)抓包非常容易。得益于谷歌的包這里我舉一個(gè)監(jiān)聽網(wǎng)卡的主要代碼網(wǎng)卡名這段代碼就是監(jiān)聽某個(gè)網(wǎng)卡,通過規(guī)則過濾點(diǎn)無用網(wǎng)絡(luò)包,規(guī)則語法與一樣。網(wǎng)絡(luò)抓包監(jiān)控的優(yōu)缺點(diǎn)優(yōu)點(diǎn)應(yīng)用無關(guān)性,監(jiān)控工具通用性強(qiáng)。 微服務(wù)是什么? 此話題不是本文重點(diǎn),如你還不知道。請谷歌一波,會(huì)有遍地的解釋。引用下圖說明下微服務(wù)可能呈現(xiàn)的形態(tài):showImg(https://s...

    clasnake 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<