日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一款强大的Kubernetes API流量查看神器

發布時間:2023/12/4 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一款强大的Kubernetes API流量查看神器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

點擊上方藍字關注?👆👆

大家好,我是小碗湯,今天分享一個k8s流量查看器~mizu。

mizu 是為 Kubernetes 提供的一個簡單而強大的 API 流量查看器,可以查看微服務之間的所有 API 通信,以幫助調試和排除故障。相當于 Kubernetes 的 TCPDump 和 Wireshark。

  • 簡單而強大的 CLI

  • 豐富的過濾規則

  • API 調用實時監控網絡流量視圖,支持的協議:

    • HTTP/1.1(REST 等)、HTTP/2(gRPC)

    • AMQP(RabbitMQ、Apache Qpid 等)

    • Kafka

    • Redis

安裝前準備

mizu 組件會用到以下四個鏡像:

#?Linux上執行mizu?tap安裝時,mizu-apiserver用到 ghcr.io/up9inc/basenine:v0.3.0#?Linux上執行mizu?tap安裝時,mizu-apiserver用到 gcr.io/up9-docker-hub/mizu/develop:0.22.21#?mac上執行mizu?tap安裝時,mizu-apiserver用到 gcr.io/up9-docker-hub/mizu/main:0.22.0#?mizu?install安裝mizu-apiserver用到 gcr.io/up9-docker-hub/mizu-kratos/stable:0.0.0

但在國內會拉取失敗,我已經將用到的鏡像上傳到阿里云倉庫和 dockerhub 倉庫,需要可自行拉取:

#?阿里云倉庫 registry.cn-hangzhou.aliyuncs.com/smallsoup/up9inc-basenine:v0.3.0 #?dockerhub?倉庫 smallsoup/up9inc-basenine:v0.3.0registry.cn-hangzhou.aliyuncs.com/smallsoup/mizu-develop:0.22.21 smallsoup/mizu-develop:0.22.21registry.cn-hangzhou.aliyuncs.com/smallsoup/mizu-main:0.22.0 smallsoup/mizu-main:0.22.0registry.cn-hangzhou.aliyuncs.com/smallsoup/mizu-kratos-stable:0.0.0 smallsoup/mizu-kratos-stable:0.0.0

由于有些鏡像名稱是 mizu 源碼中寫死的不可配置(除了 agent-name),所以拉下來后需要修改 tag 后使用:

docker?tag?registry.cn-hangzhou.aliyuncs.com/smallsoup/up9inc-basenine:v0.3.0?ghcr.io/up9inc/basenine:v0.3.0docker?tag?registry.cn-hangzhou.aliyuncs.com/smallsoup/mizu-develop:0.22.21?gcr.io/up9-docker-hub/mizu/develop:0.22.21docker?tag?registry.cn-hangzhou.aliyuncs.com/smallsoup/mizu-kratos-stable:0.0.0?gcr.io/up9-docker-hub/mizu-kratos/stable:0.0.0docker?tag?registry.cn-hangzhou.aliyuncs.com/smallsoup/mizu-main:0.22.0?gcr.io/up9-docker-hub/mizu/main:0.22.0

安裝可執行文件

Mizu[1]可以在GitHub 倉庫[2]下載。

下面示例在 MacOS 上安裝 mizu 二進制,k8s 版本為 1.18.14。

curl?-Lo?mizu?\ https://github.com/up9inc/mizu/releases/latest/download/mizu_darwin_amd64?\ &&?chmod?755?mizu mv?mizu?/usr/local/bin

生成配置

mizu CLI 使用--set config-path=<PATH>提供的配置文件。如果未提供,將使用${HOME}/.mizu/config.yaml。

可以使用 CLI 參數覆蓋默認值,獲取默認配置參數可以運行mizu config。

使用config -r生成默認值配置文件:

#?mizu?config?-r Template?File?written?to?/Users/smallsoup/.mizu/config.yaml

自定義配置

編輯~/.mizu/config.yaml

tap:upload-interval:?10regex:?.*gui-port:?8899proxy-host:?0.0.0.0namespaces:?[]analysis:?falseall-namespaces:?falseregex-masking:?[]ignored-user-agents:?[]no-redact:?falsemax-entries-db-size:?200MBdry-run:?falseworkspace:?""traffic-validation-file:?""contract:?""ask-upload-confirmation:?trueapi-server-resources:cpu-limit:?750mmemory-limit:?1Gicpu-requests:?50mmemory-requests:?50Mitapper-resources:cpu-limit:?750mmemory-limit:?1Gicpu-requests:?50mmemory-requests:?50Miservice-mesh:?false version:debug:?false view:gui-port:?8899 logs:file:?"" auth:env-name:?up9.apptoken:?"" image-pull-policy:?IfNotPresent mizu-resources-namespace:?mizu telemetry:?true dump-logs:?false kube-config-path:?"" headless:?false

修改的參數說明:

將配置文件中的image-pull-policy: Always改為 IfNotPresent 因為 mizu 運行時創建的 pod 使用的鏡像在國內網絡環境下無法正常拉取。

默認運行 mizu 需要通過本地主機訪問http://localhost:8899:

#?lsof?-nP?-iTCP?-sTCP:LISTEN?|?grep?mizu mizu??????59951?smallsoup???39u??IPv4?0xade0daed4de692db??????0t0??TCP?127.0.0.1:8899?(LISTEN)

可以將tap.proxy-host更改為0.0.0.0,通過主機 IP 地址訪問。

lsof?-nP?-iTCP?-sTCP:LISTEN?|?grep?mizu mizu??????60008?smallsoup???38u??IPv6?0xade0daed5a54616b??????0t0??TCP?*:8899?(LISTEN)

mizu 默認使用${HOME}/.kube/config中的配置。可以使用KUBECONFIG環境變量或--set kube-config-path=<PATH>修改。我在這里使用默認的配置。

臨時安裝

即使用mizu tap啟動,會在 kubernetes 集群創建資源,在命令終止時會自行清理資源,一般用于本地調試階段。

mizu?tap Mizu?will?store?up?to?200MB?of?traffic,?old?traffic?will?be?cleared?once?the?limit?is?reached. Tapping?pods?in?namespaces?"default" +chart-1642261340-waypoint-runner-d54b5bc5c-x7w5w +chart-1642261340-waypoint-server-0 +example-nodejs-v1-dbffc74f6-6prt4 +example-nodejs-waypoint-nodejs-8764766d8-5xfjf +netchecker-agent-8fs2m +netchecker-agent-hostnet-vknsm +netchecker-server-59fcd6bf86-5mtkn Waiting?for?Mizu?Agent?to?start... Mizu?is?available?at?http://localhost:8899

成功后,會自動打開瀏覽器,訪問http://localhost:8899/。

這種方式安裝的mizu apiserver為獨立的Pod,mizu-tapper-daemon-set為Daemonset Pod。

#?k?get?pod?-n?mizu NAME???????????????????????????READY???STATUS????RESTARTS???AGE mizu-api-server????????????????2/2?????Running???0??????????2m21s mizu-tapper-daemon-set-hb555???1/1?????Running???0??????????23s#?k?get?ds?-n?mizu NAME?????????????????????DESIRED???CURRENT???READY???UP-TO-DATE???AVAILABLE???NODE?SELECTOR???AGE mizu-tapper-daemon-set???1?????????1?????????1???????1????????????1???????????<none>??????????8m19s

Mizu 將存儲高達 200MB 的流量數據,一旦達到限制,舊的數據將被清除。這里沒有 pvc 的創建,所以保存的流量數據會隨著 Pod 被刪除。

永久安裝

可以使用命令mizu install將 mizu 實例永久的安裝在集群中:

#?mizu?install?--config-path?/root/.mizu/config.yaml namespace/mizu?created configmap/mizu-config?created serviceaccount/mizu-service-account?created clusterrole.rbac.authorization.k8s.io/mizu-cluster-role?created clusterrolebinding.rbac.authorization.k8s.io/mizu-cluster-role-binding?created role.rbac.authorization.k8s.io/mizu-role-daemon?created rolebinding.rbac.authorization.k8s.io/mizu-role-binding-daemon?created deployment.apps/mizu-api-server?created service/mizu-api-server?created Waiting?for?Mizu?server?to?start... mizu-api-server-59fbb5fc55-5krjb?pod?is?running Installation?completed,?run?`mizu?view`?to?connect?to?the?mizu?daemon?instance

這種方式安裝的 mizu apiserver 為 1 副本的Deployment以及mizu-tapper-daemon-set Pod。

#?kubectl??get?deploy?-n?mizu NAME??????????????READY???UP-TO-DATE???AVAILABLE???AGE mizu-api-server???1/1?????1????????????1???????????5m34s#?kubectl??get?ds?-n?mizu NAME?????????????????????DESIRED???CURRENT???READY???UP-TO-DATE???AVAILABLE???NODE?SELECTOR???AGE mizu-tapper-daemon-set???1?????????1?????????1???????1????????????1???????????<none>??????????3m10s#?kubectl??get?pvc?-n?mizu NAME????????????????STATUS???VOLUME?????????????????????????????????????CAPACITY???ACCESS?MODES???STORAGECLASS???AGE mizu-volume-claim???Bound????pvc-81b8ebb6-2a72-4bc3-915d-79c943e6dfbb???700M???????RWO????????????nfs-client?????10m

同時會創建 pvc 用于存儲流量數據,所以集群中需要提前有storageClass。

在 k8s 集群某一節點執行port-forward,將主機 8080 端口映射到 svc 的 80 端口:

#?kubectl??port-forward?--address?0.0.0.0?-n?mizu??service/mizu-api-server??8080:80 Forwarding?from?0.0.0.0:8080?->?8899

此時用主機IP:8080訪問即可:

體驗使用

Mizu 有豐富的過濾語法,可以靈活有效地查詢結果。語法可在界面上查看:

選擇指定命名空間,將顯示所選命名空間的流量:

過濾出 Kafka 協議:

過濾來源為ingress-nginx-controller的:

卸載

永久安裝后,可以通過以下方式卸載:

#?mizu??clean Removing?mizu?resources

遇到的坑

域名后綴問題

mizu-tapper Daemonset Pod一直重建,查看日志發現,報錯如下:

[2022-01-23T05:33:19.455+0000]?INFO????socket?connection?to?ws://mizu-api-server.mizu.svc.cluster.local/wsTapper?failed:?dial?tcp:?lookup?mizu-api-server.mizu.svc.cluster.local:?no?such?host,?retrying?5?out?of?30?in?2?seconds...???[1?main.go:422?dialSocketWithRetry]

daemonset Pod需要連接mizu apiserver,連接地址是在啟動參數中指定的。

--api-server-address?ws://mizu-api-server.mizu.svc.cluster.local/wsTapper

默認使用的域名后綴為cluster.local,如果你修改過 k8s 集群的clusterDomain,則需要修改這里的值。不幸的是,這個cluster.local是寫死在代碼中的,需要安裝之后手動edit daemonset修改。

鏡像問題

mizu 組件使用到的鏡像,只有mizu-api-server Pod 中一個容器的鏡像可以修改:

agent-image:?registry.cn-hangzhou.aliyuncs.com/smallsoup/mizu-develop:0.22.21

其他鏡像都是寫死在代碼中的。

以上兩點的不可配置,會給使用者帶來很大的不便。

參考資料

[1]

Mizu: https://github.com/up9inc/mizu

[2]

GitHub 倉庫: https://github.com/up9inc/mizu

[3]

k8s 流量查看器: https://up9.com/traffic-viewer-kubernetes

[4]

mizu 高級用法: https://github.com/up9inc/mizu#advanced-usage

[5]

K8s的API流量查看器安裝: https://www.lishuai.fun/2021/09/28/k8s-mizu/


后臺回復“加群”,帶你進入高手如云交流群

歡迎小伙伴們投稿原創文章~

投稿格式:markdown格式的md文件

投稿郵箱: pub@kubeinfo.cn

👇外賣、火車訂票券點擊下方領取👇

推薦閱讀

將k8s制作成3D射擊游戲,好玩到停不下來,附源碼

一款利器 | 持續分析 Kubernetes 中服務的性能

16個核心概念帶你入門 Kubernetes

10 分鐘理解微服務、容器和 Kubernetes

一個有趣的Go項目,3D界面管理k8s集群,真好玩!

一文詳解 Ansible 的自動化運維,別讓自己太忙!

提效 | 18個一線工作中常用Shell腳本(純干貨)

本公眾號主要分享Linux、Golang、網絡、云原生相關技術,實用工具,歡迎掃碼關注!

點個在看集群永保穩定👇

總結

以上是生活随笔為你收集整理的一款强大的Kubernetes API流量查看神器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。