一款强大的Kubernetes API流量查看神器
點(diǎn)擊上方藍(lán)字關(guān)注?👆👆
大家好,我是小碗湯,今天分享一個(gè)k8s流量查看器~mizu。
mizu 是為 Kubernetes 提供的一個(gè)簡(jiǎn)單而強(qiáng)大的 API 流量查看器,可以查看微服務(wù)之間的所有 API 通信,以幫助調(diào)試和排除故障。相當(dāng)于 Kubernetes 的 TCPDump 和 Wireshark。
簡(jiǎn)單而強(qiáng)大的 CLI
豐富的過濾規(guī)則
API 調(diào)用實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)流量視圖,支持的協(xié)議:
HTTP/1.1(REST 等)、HTTP/2(gRPC)
AMQP(RabbitMQ、Apache Qpid 等)
Kafka
Redis
安裝前準(zhǔn)備
mizu 組件會(huì)用到以下四個(gè)鏡像:
#?Linux上執(zhí)行mizu?tap安裝時(shí),mizu-apiserver用到 ghcr.io/up9inc/basenine:v0.3.0#?Linux上執(zhí)行mizu?tap安裝時(shí),mizu-apiserver用到 gcr.io/up9-docker-hub/mizu/develop:0.22.21#?mac上執(zhí)行mizu?tap安裝時(shí),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但在國(guó)內(nèi)會(huì)拉取失敗,我已經(jīng)將用到的鏡像上傳到阿里云倉(cāng)庫(kù)和 dockerhub 倉(cāng)庫(kù),需要可自行拉取:
#?阿里云倉(cāng)庫(kù) registry.cn-hangzhou.aliyuncs.com/smallsoup/up9inc-basenine:v0.3.0 #?dockerhub?倉(cāng)庫(kù) 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安裝可執(zhí)行文件
Mizu[1]可以在GitHub 倉(cāng)庫(kù)[2]下載。
下面示例在 MacOS 上安裝 mizu 二進(jìn)制,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 參數(shù)覆蓋默認(rèn)值,獲取默認(rèn)配置參數(shù)可以運(yùn)行mizu config。
使用config -r生成默認(rèn)值配置文件:
#?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修改的參數(shù)說明:
將配置文件中的image-pull-policy: Always改為 IfNotPresent 因?yàn)?mizu 運(yùn)行時(shí)創(chuàng)建的 pod 使用的鏡像在國(guó)內(nèi)網(wǎng)絡(luò)環(huán)境下無法正常拉取。
默認(rèn)運(yùn)行 mizu 需要通過本地主機(jī)訪問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,通過主機(jī) IP 地址訪問。
lsof?-nP?-iTCP?-sTCP:LISTEN?|?grep?mizu mizu??????60008?smallsoup???38u??IPv6?0xade0daed5a54616b??????0t0??TCP?*:8899?(LISTEN)mizu 默認(rèn)使用${HOME}/.kube/config中的配置。可以使用KUBECONFIG環(huán)境變量或--set kube-config-path=<PATH>修改。我在這里使用默認(rèn)的配置。
臨時(shí)安裝
即使用mizu tap啟動(dòng),會(huì)在 kubernetes 集群創(chuàng)建資源,在命令終止時(shí)會(huì)自行清理資源,一般用于本地調(diào)試階段。
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成功后,會(huì)自動(dòng)打開瀏覽器,訪問http://localhost:8899/。
這種方式安裝的mizu apiserver為獨(dú)立的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>??????????8m19sMizu 將存儲(chǔ)高達(dá) 200MB 的流量數(shù)據(jù),一旦達(dá)到限制,舊的數(shù)據(jù)將被清除。這里沒有 pvc 的創(chuàng)建,所以保存的流量數(shù)據(jù)會(huì)隨著 Pod 被刪除。
永久安裝
可以使用命令mizu install將 mizu 實(shí)例永久的安裝在集群中:
#?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同時(shí)會(huì)創(chuàng)建 pvc 用于存儲(chǔ)流量數(shù)據(jù),所以集群中需要提前有storageClass。
在 k8s 集群某一節(jié)點(diǎn)執(zhí)行port-forward,將主機(jī) 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此時(shí)用主機(jī)IP:8080訪問即可:
體驗(yàn)使用
Mizu 有豐富的過濾語(yǔ)法,可以靈活有效地查詢結(jié)果。語(yǔ)法可在界面上查看:
選擇指定命名空間,將顯示所選命名空間的流量:
過濾出 Kafka 協(xié)議:
過濾來源為ingress-nginx-controller的:
卸載
永久安裝后,可以通過以下方式卸載:
#?mizu??clean Removing?mizu?resources遇到的坑
域名后綴問題
mizu-tapper Daemonset Pod一直重建,查看日志發(fā)現(xiàn),報(bào)錯(cuò)如下:
[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,連接地址是在啟動(dòng)參數(shù)中指定的。
--api-server-address?ws://mizu-api-server.mizu.svc.cluster.local/wsTapper默認(rèn)使用的域名后綴為cluster.local,如果你修改過 k8s 集群的clusterDomain,則需要修改這里的值。不幸的是,這個(gè)cluster.local是寫死在代碼中的,需要安裝之后手動(dòng)edit daemonset修改。
鏡像問題
mizu 組件使用到的鏡像,只有mizu-api-server Pod 中一個(gè)容器的鏡像可以修改:
agent-image:?registry.cn-hangzhou.aliyuncs.com/smallsoup/mizu-develop:0.22.21其他鏡像都是寫死在代碼中的。
以上兩點(diǎn)的不可配置,會(huì)給使用者帶來很大的不便。
參考資料
[1]
Mizu: https://github.com/up9inc/mizu
[2]GitHub 倉(cāng)庫(kù): https://github.com/up9inc/mizu
[3]k8s 流量查看器: https://up9.com/traffic-viewer-kubernetes
[4]mizu 高級(jí)用法: https://github.com/up9inc/mizu#advanced-usage
[5]K8s的API流量查看器安裝: https://www.lishuai.fun/2021/09/28/k8s-mizu/
后臺(tái)回復(fù)“加群”,帶你進(jìn)入高手如云交流群
歡迎小伙伴們投稿原創(chuàng)文章~
投稿格式:markdown格式的md文件
投稿郵箱: pub@kubeinfo.cn
👇外賣、火車訂票券點(diǎn)擊下方領(lǐng)取👇
推薦閱讀
將k8s制作成3D射擊游戲,好玩到停不下來,附源碼
一款利器 | 持續(xù)分析 Kubernetes 中服務(wù)的性能
16個(gè)核心概念帶你入門 Kubernetes
10 分鐘理解微服務(wù)、容器和 Kubernetes
一個(gè)有趣的Go項(xiàng)目,3D界面管理k8s集群,真好玩!
一文詳解 Ansible 的自動(dòng)化運(yùn)維,別讓自己太忙!
提效 | 18個(gè)一線工作中常用Shell腳本(純干貨)
本公眾號(hào)主要分享Linux、Golang、網(wǎng)絡(luò)、云原生相關(guān)技術(shù),實(shí)用工具,歡迎掃碼關(guān)注!
點(diǎn)個(gè)在看集群永保穩(wěn)定👇
總結(jié)
以上是生活随笔為你收集整理的一款强大的Kubernetes API流量查看神器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Blog.Core高级进阶:共赴五年之约
- 下一篇: 我的技术回顾那些与ABP框架有关的故事-