介绍
一个简单但功能强大的 Kubernetes中的 API 流量查看器,可以用来查看pod之间的所有 API 通信,以帮助调试和排除故障。可以理解为TCPDump 和 Chrome Dev Tools 的结合
安装
mac
1 | curl -Lo mizu \ |
linux
1 | curl -Lo mizu \ |
使用
前提
mizu使用KUBECONFIG
环境变量来寻找使用的kubeconfig文件位置,如果未设置,则默认使用${HOME}/.kube/config
mizu运行时候会在kubernetes集群创建资源(pod,service,namespace), 在命令终止时会自行清理资源。
配置
在运行前我们先创建使用mizu config -r
创建一下配置文件
1 | [root@master-01 local]# ./mizu config -r |
将配置文件中的image-pull-policy: Always
改为image-pull-policy: IfNotPresent
这是因为mizu运行时创建的pod使用的镜像是gar.io上的,无法正常拉取。
1 | root@i-tsfhx8p6:~# cat .mizu/config.yaml |
运行
运行mizu 有下面几步
- 在 Kubernetes 集群中查找您想要点击的 Pod
- 运行
mizu tap
或mizu tap PODNAME
- 在 CLI上
http://localhost:8899/mizu
或按照 CLI 中的说明打开浏览器 - 观察 API 流量
- 键入 ^C 停止
这里我把要使用的镜像上传到了dockerhub,运行之前我们需要在每个节点先下载镜像,然后修改镜像名称
1 | docker pull misterli/mizu-main:0.14.0 |
我们运行mizu tap命令后会在mizu空间临时创建pod
1 | ➜ ~ kubectl get pod -n mizu |
查看所有pod
我们查看一下monitoring空间的pod的流量
1 | ➜ ~ ./mizu tap -n monitoring |
这里我们可以打开http://localhost:8899/mizu 进行访问
查看特定pod
我们查看一下monitoring空间prometheus-k8s-0 这个pod的流量
1 | ➜ ~ ./mizu tap -n monitoring prometheus-k8s-0 |
使用正则过滤pod
我们查看一下monitoring空间名称中包含node 的pod的流量
1 | ➜ ~ ./mizu tap -n monitoring "^node.*"Mizu will store up to 200MB of traffic, old traffic will be cleared once the limit is reached.Tapping pods in namespaces "monitoring"+node-exporter-9hvtd+node-exporter-hwf24+node-exporter-nhrnkMizu is available at http://localhost:8899/mizu |
过滤user-agent
我们可以过滤某些user-agent的请求,例如
1 | mizu tap " ^ca.* " --set tap.ignored-user-agents=kube-probe --set tap.ignored-user-agents=prometheus |
任何包含User-Agent
具有指定值 (kube-probe
或prometheus
)之一的标头的请求都不会被捕获
流量验证规则
此功能允许您定义一组简单的规则,并针对这些规则测试流量。此类验证可能会测试特定 JSON 字段、标头等的响应。
要使用此功能 - 创建简单的规则文件,并将此文件作为参数传递给mizu tap
命令
流量验证文件的结构是:
name
: 字符串,规则名称type
: 字符串,规则类型,必须是json
orheader
或latency
key
: string, jsonpath只能在json
orheader
类型中使用value
: 字符串,正则表达式仅用于json
或header
类型service
: 字符串,要过滤的正则表达式服务名称path
: 字符串,要过滤的正则表达式URL 路径latency
:整数,以毫秒为单位的预期延迟时
我们这里创建一个规则文件如下
1 | rules:- name: test type: json key: "$.database" value: "down" path: "/api/health" |
这里定义了我们对路径/api/health的response中的json中的字段database做校验,如果值为down才成功。
- 未通过验证的 HTTP 请求(REST API 调用)以红色突出显示
- 详细信息窗格显示验证规则详细信息以及它是通过还是失败