Kubeshark Kubernetes 流量抓包与排查从0到1:5分钟实战指南
【免费下载链接】kubesharkeBPF-powered network observability for Kubernetes. Indexes L4/L7 traffic with full K8s context, decrypts TLS without keys. Queryable by AI agents via MCP and humans via dashboard.项目地址: https://gitcode.com/gh_mirrors/ku/kubeshark
集群里一次服务间调用超时,调用方和被调方的日志都正常,指标上看不出慢在哪一段。这时候需要回到网络层看实际发生了什么。Kubeshark 是一款基于 eBPF(在内核中注入程序以观测系统行为的机制)做 Kubernetes 流量分析的工具:它在内核层捕获全集群流量,按协议解析后,每条请求的内容、状态码和时序都能直接在浏览器里看到。
把它理解为搬进 Kubernetes 的 tcpdump 加 Wireshark:不用登到每个节点手工抓包再自己对上 Pod 名,流量自动带上 Pod、命名空间、Service 的标签。它还能在不提供任何密钥的情况下解密 TLS 流量,适合 SRE 和开发在开发、预发环境排查服务调用问题。
从0到1:三条命令开始抓包
最短路径是用 Helm 部署(自动拉起每节点抓包的 Worker 和 Web UI),再用 port-forward 把页面转发到本机:
helm repo add kubeshark https://helm.kubeshark.com helm install kubeshark kubeshark/kubeshark kubectl port-forward svc/kubeshark-front 8899:80浏览器打开 http://localhost:8899,即可看到实时流入的流量。如果不想手动执行这几条命令,通过安装脚本装好 CLI 后直接运行kubeshark tap,它会部署同一套资源并自动打开 UI。生产环境建议把 port-forward 换成 Ingress 对外暴露。
三个实战用例:按工作负载过滤、TLS 解密、导出 PCAP
用例一:只看问题服务的流量
目标:大集群全量流量太大,先收敛到具体命名空间和 Pod。
关键命令:清理既有部署后,按命名空间加 Pod 名正则捕获:
kubeshark clean kubeshark tap -n prod "checkout-.*"| 参数 | 作用 |
|---|---|
-n prod | 只捕获该命名空间,可传多个 |
checkout-.*(位置参数) | Pod 名正则,匹配 checkout 系列工作负载 |
-e | 排除指定命名空间 |
--dry-run | 只预览匹配的 Pod,不真正部署 |
你会看到:终端先列出命中的 Targeted pod,随后自动打开浏览器;UI 左侧可按 workload、协议等再过滤,点击某一条即可看到完整请求头、body 和响应。
用例二:看清 HTTPS 流量明文
目标:服务间流量加密,不解密就看不到内容。
Kubeshark 在 eBPF 层直接解密 TLS,不需要密钥管理,也不用注入 sidecar;对 Go crypto/tls、OpenSSL 或 service mesh mTLS 加密的流量,需显式打开捕获开关:
kubeshark tap -n prod --tls --service-mesh "checkout-.*"你会看到:列表里 https 流量与 http 一样以明文呈现,能直接看到 JSON 请求体和真实状态码——"超时但日志正常"的线索往往就藏在这一层。
用例三:留存现场,交给 Wireshark
目标:拿到可复现的抓包文件,转给同事继续分析。
kubeshark pcapdump --time 10m --dest ~/pcaps你会看到:最近 10 分钟的 PCAP 文件被复制到本地目录(--dest目录需预先存在),用 Wireshark 打开即是完整包详情。流量与 PCAP 的保留时长由jsonTTL(默认 5 分钟)和storageLimit(默认每节点 10Gi)控制,均可在 values.yaml 中调整。
调优与排障速查
| 现象 | 可能原因 | 处理方法 |
|---|---|---|
| UI 里看不到流量 | 目标节点没有 Worker,或正则没匹配到 Pod | kubectl get pods -n default检查状态;kubeshark tap --dry-run验证正则 |
| Pod 卡在 Pending | 节点不允许特权容器或资源不足 | 查看节点污点,在 values 中调整tap.tolerations、tap.resources |
| 终端关掉后 UI 打不开 | port-forward 连接断开 | 运行kubeshark proxy重新建立转发 |
| CPU、存储压力大 | 默认 100% 采样全量捕获 | 调低tap.misc.trafficSampleRate,缩小storageLimit |
| 需要提交 issue | — | kubeshark logs -g "error"打包导出相关日志 |
适用边界与延伸阅读
Kubeshark 最适合开发、预发环境定位服务间调用问题、验证网络行为与留存证据;大规模生产集群要谨慎——每节点的特权 Worker 加上全量捕获是持续开销,先评估资源与存储预算。如果希望 AI 助手参与排查,kubeshark mcp命令能把流量查询接入 MCP 客户端,让 agent 直接回答"哪个服务错误率高"这类问题,见 MCP 说明。
- 项目说明:README.md
- 安装脚本:install.sh
- Helm 配置项:helm-chart/values.yaml
- 网络根因分析技能:skills/network-rca/SKILL.md
- 本地克隆源码:
git clone https://gitcode.com/gh_mirrors/ku/kubeshark
【免费下载链接】kubesharkeBPF-powered network observability for Kubernetes. Indexes L4/L7 traffic with full K8s context, decrypts TLS without keys. Queryable by AI agents via MCP and humans via dashboard.项目地址: https://gitcode.com/gh_mirrors/ku/kubeshark
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考