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

网友投稿 289 2022-11-02

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

文章目录

​​安装前准备​​​​安装可执行文件​​​​生成配置​​​​自定义配置​​​​临时安装​​​​永久安装​​​​体验使用​​​​卸载​​​​遇到的坑​​

​​域名后缀问题​​​​镜像问题​​

​​参考​​​​原文​​

mizu 是为 Kubernetes 提供的一个简单而强大的 API 流量查看器,可以查看微服务之间的所有 API 通信,以帮助调试和排除故障。相当于 Kubernetes 的 TCPDump 和 Wireshark。

简单而强大的 CLI丰富的过滤规则API 调用实时监控网络流量视图,支持的协议:

HTTP/1.1(REST 等)、HTTP/2 (gRPC)AMQP(RabbitMQ、Apache Qpid 等)KafkaRedis

安装前准备

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.21smallsoup/mizu-develop:0.22.21registry.cn-hangzhou.aliyuncs.com/smallsoup/mizu-main:0.22.0smallsoup/mizu-main:0.22.0registry.cn-hangzhou.aliyuncs.com/smallsoup/mizu-kratos-stable:0.0.0smallsoup/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​​​可以在​​GitHub 仓库​​下载。

下面示例在 MacOS 上安装 ​​mizu​​ 二进制,k8s 版本为 1.18.14。

curl -Lo mizu \\&& chmod 755 mizumv mizu /usr/local/bin

生成配置

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

可以使用 CLI 参数覆盖默认值,获取默认配置参数可以运行​​mizu config​​。

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

# mizu config -rTemplate File written to /Users/smallsoup/.mizu/config.yaml

自定义配置

编辑​​~/.mizu/config.yaml​​

tap: upload-interval: 10 regex: .* gui-port: 8899 proxy-host: 0.0.0.0 namespaces: [] analysis: false all-namespaces: false regex-masking: [] ignored-user-agents: [] no-redact: false max-entries-db-size: 200MB dry-run: false workspace: "" traffic-validation-file: "" contract: "" ask-upload-confirmation: true api-server-resources: cpu-limit: 750m memory-limit: 1Gi cpu-requests: 50m memory-requests: 50Mi tapper-resources: cpu-limit: 750m memory-limit: 1Gi cpu-requests: 50m memory-requests: 50Mi service-mesh: falseversion: debug: falseview: gui-port: 8899logs: file: ""auth: env-name: up9.app token: ""image-pull-policy: IfNotPresentmizu-resources-namespace: mizutelemetry: truedump-logs: falsekube-config-path: ""headless: false

修改的参数说明:

将配置文件中的​​image-pull-policy: Always​​​改为 ​​IfNotPresent​​ 因为 mizu 运行时创建的 pod 使用的镜像在国内网络环境下无法正常拉取。

默认运行 ​​mizu​​​ 需要通过本地主机访问​​lsof -nP -iTCP -sTCP:LISTEN | grep mizumizu 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 mizumizu 60008 smallsoup 38u IPv6 0xade0daed5a54616b 0t0 TCP *:8899 (LISTEN)

mizu 默认使用​​${HOME}/.kube/config​​​中的配置。可以使用​​KUBECONFIG​​​环境变量或​​--set kube-config-path=​​修改。我在这里使用默认的配置。

临时安装

即使用​​mizu tap​​启动,会在 kubernetes 集群创建资源,在命令终止时会自行清理资源,一般用于本地调试阶段。

mizu tapMizu 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-5mtknWaiting for Mizu Agent to start...Mizu is available at apiserver​​​为独立的​​Pod​​​,​​mizu-tapper-daemon-set​​​为​​Daemonset Pod​​。

# k get pod -n mizuNAME READY STATUS RESTARTS AGEmizu-api-server 2/2 Running 0 2m21smizu-tapper-daemon-set-hb555 1/1 Running 0 23s# k get ds -n mizuNAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGEmizu-tapper-daemon-set 1 1 1 1 1 8m19s

Mizu 将存储高达 200MB 的流量数据,一旦达到限制,旧的数据将被清除。这里没有 pvc 的创建,所以保存的流量数据会随着 Pod 被删除。

永久安装

可以使用命令​​mizu install​​将 mizu 实例永久的安装在集群中:

# mizu install --config-path /root/.mizu/config.yamlnamespace/mizu createdconfigmap/mizu-config createdserviceaccount/mizu-service-account createdclusterrole.rbac.authorization.k8s.io/mizu-cluster-role createdclusterrolebinding.rbac.authorization.k8s.io/mizu-cluster-role-binding createdrole.rbac.authorization.k8s.io/mizu-role-daemon createdrolebinding.rbac.authorization.k8s.io/mizu-role-binding-daemon createddeployment.apps/mizu-api-server createdservice/mizu-api-server createdWaiting for Mizu server to start...mizu-api-server-59fbb5fc55-5krjb pod is runningInstallation completed, run `mizu view` to connect to the mizu daemon instance

这种方式安装的 ​​mizu apiserver​​​ 为 1 副本的​​Deployment​​​以及​​mizu-tapper-daemon-set Pod​​。

# kubectl get deploy -n mizuNAME READY UP-TO-DATE AVAILABLE AGEmizu-api-server 1/1 1 1 5m34s# kubectl get ds -n mizuNAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGEmizu-tapper-daemon-set 1 1 1 1 1 3m10s# kubectl get pvc -n mizuNAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGEmizu-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:80Forwarding from 0.0.0.0:8080 -> 8899

此时用​​主机IP:8080​​访问即可:

体验使用

Mizu 有丰富的过滤语法,可以灵活有效地查询结果。语法可在界面上查看:

选择指定命名空间,将显示所选命名空间的流量:

过滤出 Kafka 协议:

过滤来源为​​ingress-nginx-controller​​的:

卸载

永久安装后,可以通过以下方式卸载:

# mizu cleanRemoving 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

其他镜像都是写死在代码中的。

以上两点的不可配置,会给使用者带来很大的不便。

参考

​​k8s 流量查看器​​

​​mizu 高级用法​​

​​K8s的API流量查看器安装​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Logstash、Fluentd、Fluent Bit、Vector?如何选择合适的开源日志收集器
下一篇:关于Type-C接口的作用和用途介绍
相关文章

 发表评论

暂时没有评论,来抢沙发吧~