一款强大的Kubernetes API流量查看神器mizu
文章目录
- 安装前准备
- 安装可执行文件
- 生成配置
- 自定义配置
- 临时安装
- 永久安装
- 体验使用
- 卸载
- 遇到的坑
- 域名后缀问题
- 镜像问题
- 参考
- 原文
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
为独立的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 将存储高达 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相关推荐
- 一款强大的 Kubernetes API 流量查看神器
作者 | 小碗汤 来源 | 我的小碗汤 mizu 是为 Kubernetes 提供的一个简单而强大的 API 流量查看器,可以查看微服务之间的所有 API 通信,以帮助调试和排除故障.相当于 Kube ...
- 一款强大的Kubernetes API流量查看神器
点击上方蓝字关注
- 一款强大而实用的图片去水印神器
喜欢这软软件,可以去百度一下,或者在本公众号后台回复 "inpaint" 获取下载链接. 今天推荐一款图片去水印神器,它就是 Inpaint,是一款可以从图片上去除不必要的物体,让 ...
- NetSet:一款功能强大的自动化网络流量安全增强工具
NetSet介绍 NetSet是一款自动化安全增强工具,该工具的主要目的就是将很多复杂的操作以自动化的方式实现,并帮助用户保证网络流量的安全性.除此之外,它还提供了一种简单的代理收集方法以及实用工具运 ...
- 如何访问kubernetes API?
什么是kube-apiserver k8s API Server提供了k8s各类资源对象(pod,RC,Service等)的增删改查及watch等HTTP Rest接口,是整个系统的数据总线和数据中 ...
- 四款强大的电脑软件,每一个都是黑科技,请低调收藏!
根据观察发现,很多人在使用电脑只会做两件事,一是打游戏,二是电脑办公.其实电脑上还有很多强大的软件,虽然我们不像使用微信那样频繁,但需要用到的时候,能感受到它们强大的黑科技. 一.冰点文库 这是一款免 ...
- 功能强大的国产Api管理工具
前言 如果你是一名Java后端开发工程师,像Swagger.Postman.RAP这些工具,应该再熟悉不过了吧!为我们的接口开发工作带来了很多的便捷,不过因为这些都是独立的框架,之间并不存在互通性,因 ...
- kubernetes API Server 权限管理实践
2019独角兽企业重金招聘Python工程师标准>>> kubernetes API Server 权限管理实践 API Server权限控制方式介绍 API Server权限控制分 ...
- php 开源 流量统计,5款开源的PHP网站流量统计应用程序
下面是5款开源的PHP网站流量统计应用程序. piwik Piwik 是一套基于Php+MySQL技术构建的开源网站访问统计系统,前身是phpMyVisites.Piwik可以给你详细的统计信息,比如 ...
最新文章
- nginx模块学习六 add_header 跨域访问
- Spring MVC源码 - 00开篇主题框架一览
- c++ pat 乙级 --1001 害死人不偿命的(3n+1)猜想
- mysql数据库连接不稳定_连接 MySQL 数据库失败频繁的原因探秘
- 在gluster中配置distributed 卷
- 解决xshell6评估过期,需采购问题
- C++ 类的静态成员变量为什么一定要初始化
- Silverlight 5的新功能预测
- bxp客户端手工PNP基本过程(转)
- linux批量修改文件后缀
- 接口测试一般怎么测?接口测试的流程和步骤~
- pt100热电阻计算公式C语言,pt100计算公式,PT100实际应用中的两种形式
- 影片avi转rmvb教程
- Payment相关逻辑
- google关键词匹配和扩展工具
- Apache Kylin Spark Cubing on Kubernetes 初探
- 一些实用的零零散散的知识
- 陕西万德软件有限公司
- 车联网的信息安全问题及安全威胁
- 芯通信EC616的NB-IOT模组SCP5资料