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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2024/8/23 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一款强大的 Kubernetes API 流量查看神器 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作者 | 小碗湯

來(lái)源 |?我的小碗湯

mizu 是為 Kubernetes 提供的一個(gè)簡(jiǎn)單而強(qiáng)大的 API 流量查看器,可以查看微服務(wù)之間的所有 API 通信,以幫助調(diào)試和排除故障。相當(dāng)于 Kubernetes 的 TCPDump 和 Wireshark。

  • 簡(jiǎn)單而強(qiáng)大的 CLI

  • 豐富的過(guò)濾規(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 源碼中寫(xiě)死的不可配置(除了 agent-name),所以拉下來(lái)后需要修改 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ù)說(shuō)明:

將配置文件中的image-pull-policy: Always改為 IfNotPresent 因?yàn)?mizu 運(yùn)行時(shí)創(chuàng)建的 pod 使用的鏡像在國(guó)內(nèi)網(wǎng)絡(luò)環(huán)境下無(wú)法正常拉取。

默認(rèn)運(yùn)行 mizu 需要通過(guò)本地主機(jī)訪問(wèn)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,通過(guò)主機(jī) IP 地址訪問(wèn)。

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)打開(kāi)瀏覽器,訪問(wèn)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>??????????8m19s

Mizu 將存儲(chǔ)高達(dá) 200MB 的流量數(shù)據(jù),一旦達(dá)到限制,舊的數(shù)據(jù)將被清除。這里沒(méi)有 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訪問(wèn)即可。

體驗(yàn)使用

Mizu 有豐富的過(guò)濾語(yǔ)法,可以靈活有效地查詢結(jié)果。語(yǔ)法可在界面上查看:

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

過(guò)濾出 Kafka 協(xié)議:

過(guò)濾來(lái)源為ingress-nginx-controller的:

卸載

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

#?mizu??clean Removing?mizu?resources

遇到的坑

域名后綴問(wèn)題

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,如果你修改過(guò) k8s 集群的clusterDomain,則需要修改這里的值。不幸的是,這個(gè)cluster.local是寫(xiě)死在代碼中的,需要安裝之后手動(dòng)edit daemonset修改。

鏡像問(wèn)題

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

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

其他鏡像都是寫(xiě)死在代碼中的。

以上兩點(diǎn)的不可配置,會(huì)給使用者帶來(lái)很大的不便。

參考資料

[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/

往期推薦

Spring 完美導(dǎo)入 IDEA

k8s集群居然可以圖形化安裝了?

使用這個(gè)庫(kù),讓你的服務(wù)操作 Redis 速度飛起

將 k8s 制作成 3D 射擊游戲,好玩到停不下來(lái)

點(diǎn)分享

點(diǎn)收藏

點(diǎn)點(diǎn)贊

點(diǎn)在看

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。