文章目录

  • 安装前准备
  • 安装可执行文件
  • 生成配置
  • 自定义配置
  • 临时安装
  • 永久安装
  • 体验使用
  • 卸载
  • 遇到的坑
    • 域名后缀问题
    • 镜像问题
  • 参考
  • 原文

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可以在GitHub 仓库下载。

下面示例在 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

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

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

参考

k8s 流量查看器

mizu 高级用法

K8s的API流量查看器安装

原文

本文首发于微信公众号【我的小碗汤】,扫左侧码关注,了解更多咨询,更有免费资源供您学习

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

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

    作者 | 小碗汤 来源 | 我的小碗汤 mizu 是为 Kubernetes 提供的一个简单而强大的 API 流量查看器,可以查看微服务之间的所有 API 通信,以帮助调试和排除故障.相当于 Kube ...

  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. nginx模块学习六 add_header 跨域访问
  2. Spring MVC源码 - 00开篇主题框架一览
  3. c++ pat 乙级 --1001 害死人不偿命的(3n+1)猜想
  4. mysql数据库连接不稳定_连接 MySQL 数据库失败频繁的原因探秘
  5. 在gluster中配置distributed 卷
  6. 解决xshell6评估过期,需采购问题
  7. C++ 类的静态成员变量为什么一定要初始化
  8. Silverlight 5的新功能预测
  9. bxp客户端手工PNP基本过程(转)
  10. linux批量修改文件后缀
  11. 接口测试一般怎么测?接口测试的流程和步骤~
  12. pt100热电阻计算公式C语言,pt100计算公式,PT100实际应用中的两种形式
  13. 影片avi转rmvb教程
  14. Payment相关逻辑
  15. google关键词匹配和扩展工具
  16. Apache Kylin Spark Cubing on Kubernetes 初探
  17. 一些实用的零零散散的知识
  18. 陕西万德软件有限公司
  19. 车联网的信息安全问题及安全威胁
  20. 芯通信EC616的NB-IOT模组SCP5资料

热门文章

  1. 和融跃一起零基础学习FRM
  2. 致远软件更名致远互联 这里面有啥潜台词?
  3. Android图片预览框架PhotoViewer
  4. 送你100+NLP数据集!数据科学需要的数据都在这里
  5. Jquery IE8兼容性
  6. 从MT6816开始了解磁编码器
  7. php织梦导航被选中,PHP网站分类目录程序 网址导航程序 织梦二次开发
  8. 搭建hexo主题Butterfly部署github+个人服务器
  9. Android usb 传输模式灰色不可选问题
  10. 蔻驰和mk哪个更大牌_coach和mk包哪个更大牌?档次更高