作者 | 小碗汤

来源 | 我的小碗汤

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为独立的Podmizu-tapper-daemon-setDaemonset 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/

往期推荐

Spring 完美导入 IDEA

k8s集群居然可以图形化安装了?

使用这个库,让你的服务操作 Redis 速度飞起

将 k8s 制作成 3D 射击游戏,好玩到停不下来

点分享

点收藏

点点赞

点在看

一款强大的 Kubernetes API 流量查看神器相关推荐

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

    文章目录 安装前准备 安装可执行文件 生成配置 自定义配置 临时安装 永久安装 体验使用 卸载 遇到的坑 域名后缀问题 镜像问题 参考 原文 mizu 是为 Kubernetes 提供的一个简单而强大 ...

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

    点击上方蓝字关注 

  3. 一款强大而实用的图片去水印神器

    喜欢这软软件,可以去百度一下,或者在本公众号后台回复 "inpaint" 获取下载链接. 今天推荐一款图片去水印神器,它就是 Inpaint,是一款可以从图片上去除不必要的物体,让 ...

  4. NetSet:一款功能强大的自动化网络流量安全增强工具

    NetSet介绍 NetSet是一款自动化安全增强工具,该工具的主要目的就是将很多复杂的操作以自动化的方式实现,并帮助用户保证网络流量的安全性.除此之外,它还提供了一种简单的代理收集方法以及实用工具运 ...

  5. 如何访问kubernetes API?

    ​什么是kube-apiserver k8s API Server提供了k8s各类资源对象(pod,RC,Service等)的增删改查及watch等HTTP Rest接口,是整个系统的数据总线和数据中 ...

  6. 四款强大的电脑软件,每一个都是黑科技,请低调收藏!

    根据观察发现,很多人在使用电脑只会做两件事,一是打游戏,二是电脑办公.其实电脑上还有很多强大的软件,虽然我们不像使用微信那样频繁,但需要用到的时候,能感受到它们强大的黑科技. 一.冰点文库 这是一款免 ...

  7. 功能强大的国产Api管理工具

    前言 如果你是一名Java后端开发工程师,像Swagger.Postman.RAP这些工具,应该再熟悉不过了吧!为我们的接口开发工作带来了很多的便捷,不过因为这些都是独立的框架,之间并不存在互通性,因 ...

  8. kubernetes API Server 权限管理实践

    2019独角兽企业重金招聘Python工程师标准>>> kubernetes API Server 权限管理实践 API Server权限控制方式介绍 API Server权限控制分 ...

  9. php 开源 流量统计,5款开源的PHP网站流量统计应用程序

    下面是5款开源的PHP网站流量统计应用程序. piwik Piwik 是一套基于Php+MySQL技术构建的开源网站访问统计系统,前身是phpMyVisites.Piwik可以给你详细的统计信息,比如 ...

最新文章

  1. Django 视图和模板1.4
  2. 国产首款脑机编解码集成芯片发布
  3. 成都2018年GDP超1.5万亿元 比上年增长8.0%
  4. 皮一皮:大型海王翻车现场...
  5. Tsung MQTT协议简介及MQTT xml文档配置介绍
  6. 以太坊DAPP[2]-×××-react框架与web3实例
  7. Java中 读-写 文件 BufferedReader BufferedWriter
  8. ssd windows未能启动服务器,ssd安装win10无法启动你安装方法对吗?来看一下
  9. 卸载驱动出现:rmmod: can't change directory to '/lib/modules': No such file or directory
  10. 计算机打出音乐小樱,《火影忍者》插曲——小樱主题曲
  11. ngix反向代理配置
  12. FFmpeg —— 录制windows系统声音(附源码)
  13. java启动报错Port already in use: 1099
  14. 非相参积累 matlab,非相参积累增益,比相参积累增益更难计算?
  15. R语言-混合型数据聚类
  16. 2017ACM ICPC Asia Regional-Daejeon H-Rock Paper Scissors[ FFT]
  17. Shader实现高光反射
  18. 关于51CTO被脱裤,几点关于密码的建议
  19. plsql developer 怎么卸掉中文语言包
  20. java将大写数字转换成小写并输出

热门文章

  1. 【学习笔记】单例模式(枚举、校验锁、volatile、反射破坏)
  2. conda安装tensorflow-gpu简洁版_win10 tensorflow2.2 安装注意事项
  3. session传递参数_JWT与Session的比较
  4. python中的画布控制_使按钮在画布上工作(tkinter)
  5. python自动化办公实例展示_python自动化办公?学这些就够用了
  6. 列表排序应用FLIP动画(vue)
  7. 才26岁!94年小姐姐,已任985名校副教授!
  8. 继北大“鸿hao之志”后,清华出现“热列欢迎”…
  9. 大学数学不好是一种什么体验?
  10. 你知道生气有多可怕吗?“气死人”是有科学依据的