K8s 流量抓包告别黑盒:Kubeshark eBPF 实战指南

发布时间:2026/11/4 1:29:46
K8s 流量抓包告别黑盒:Kubeshark eBPF 实战指南 K8s 流量抓包告别黑盒Kubeshark eBPF 实战指南【免费下载链接】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微服务之间黑盒通信、P99 突然飙高却说不清是哪个 Pod 到哪个 Pod 慢是每个 K8s 运维都踩过的坑。Kubeshark 用 eBPF 在内核层做全集群流量捕获与 L4/L7 索引TLS 流量无需密钥即可解密为明文读完本文你会拿到它的架构拆解、三种部署方式对比和一套从捕获到 PCAP 导出的完整排查工作流。一个真实的排障现场P99 飙高谁在拖后腿假设某天告警响了checkout 服务 P99 从 80ms 跳到 1.2s。日志里只有零星的read timeout链路追踪平台那天恰好挂了。传统做法是登节点跑tcpdump但问题在于集群 200 个节点你上哪个微服务流量走的是 Pod 网络抓到包也只是一堆五元组还得手工对齐 Service、Namespace、工作负载——而 eBPF 的无侵入监控方式正是补这一块的。用 Kubeshark 的思路是先起一个全集群实时捕获然后在 UI 里直接查checkout 命名空间里所有 P99 500ms 的 HTTP 调用秒级定位到是 inventory 服务的某个 Pod 响应变慢再顺手把出问题的时间窗拉一个 PCAP 快照存下来后续可以用 Wireshark 复核。整个过程不用登录任何节点也不用改一行业务代码。架构速览内核层捕获 三层组件一句话概括eBPF 探针负责在内核层抓包并关联 K8s 身份元数据Worker 逐节点上报Hub 聚合索引Front 提供可视化查询。CLI入口kubeshark tap/clean/proxy/pcapdump等全部命令在此定义见 cmd/tap.go常量见 misc/consts.goWorker DaemonSet每个节点的抓包代理eBPF 探针挂载SYS_ADMIN/SYS_PTRACE等能力YAML 定义在 manifests/complete.yamlHub流量聚合、L7 解析与存储CLI 侧通过带重试的 HTTP 连接器与其通信见 internal/connect/hub.goFrontWeb 控制台部署定义见 manifests/complete.yamlMCP Server把 L7 查询能力开放给 AI AgentClaude、Copilot 等工具清单见 cmd/mcp.go三种部署方式对比CLI tap、Helm、原生 Manifest方式适用场景核心命令自定义程度一句话评价CLIkubeshark tap开发/测试环境快速抓包kubeshark tap中靠--set覆盖一条命令全托管最快Helm Chart生产环境标准姿势helm install kubeshark kubeshark/kubeshark高全量 values生产首选升级卸载都顺手原生 ManifestGitOps / 需要逐行审计kubectl apply -f manifests/complete.yaml极高改任意行慢但完全可控# 方式一CLI先安装 kubeshark 二进制脚本见 install.sh ./install.sh # 检测架构并下载 kubeshark 二进制可选 ks 别名 kubeshark tap -n sock-shop (catalog|front-end) # 按命名空间 Pod 正则抓包 kubeshark clean # 结束时清理全部资源 # 方式二Helm生产推荐 helm repo add kubeshark https://helm.kubeshark.com helm install kubeshark kubeshark/kubeshark -n kubeshark --create-namespace kubectl port-forward svc/kubeshark-front 8899:80 # 本地访问 Web UI # 方式三原生 Manifest内容在仓库内可先 review 再 apply kubectl apply -f manifests/complete.yaml实战工作流捕获 → 过滤 → 分析 → 导出第一步捕获。前面已给出kubeshark tap命令。命令执行后会先打印目标 Pod 预览列表确认无误后自动 Helm 安装并等待 Hub/Front Ready最终输出Kubeshark is available at: http://127.0.0.1:8899并自动打开浏览器。几个高频 flag-n指定命名空间可重复、-e排除命名空间建议排除 kube-system、--tlstrue默认开启 TLS 解密、--dryRun只预览目标 Pod 不实际抓包。第二步过滤。Web UI 的查询框使用 KFL 过滤语言能同时组合三层语义Kubernetes 身份、API 上下文、网络属性。例如# KFL 查询示例在 UI 查询框输入非 shell 命令 api.request.latency 500ms and kubernetes.namespace.name checkout第三步分析。UI 四个核心区域流量流水表支持按延迟/状态码/协议排序、详情面板请求头、body、逐跳时序TLS 已是解密后的明文、拓扑视图工作负载依赖关系与流量方向、快照列表按时间/节点/工作负载/IP 圈选的历史流量。第四步导出。两个出口# 在 Web UI 圈选时间窗后下载 PCAP 快照含解密后的 TLS可直接喂给 Wireshark # 或用 CLI 周期性把捕获流量含解密 TLS落盘为 PCAP 文件 kubeshark pcapdump --time 30m --dest /tmp/captures --maxSize 500MB排障结束kubeshark clean卸载 Helm release集群恢复原状。生产环境避坑清单性能、安全、监控# - [ ] 流量大时先降采样率别上来就顶资源 # tap.misc.trafficSampleRate: 100 → 50 # - [ ] 给 Hub 设内存上限默认 limits 5Gi大集群按节点数上调 # tap.resources.hub.limits.memory # - [ ] 公网暴露前开启鉴权支持 SAML/OIDC 与内置角色 # tap.auth.enabled: true # - [ ] 生产不要用 port-forward配 Ingress 并挂 TLS # tap.ingress.enabled: true # - [ ] 收敛组件间网络策略manifest 内置 4 条 NetworkPolicy # - [ ] 按需收紧容器 capabilities别留最大权限集 # tap.securityContext.capabilities # - [ ] 集群装了 Prometheus 就开 ServiceMonitormetrics 端口 49100 # tap.metrics.serviceMonitor.enabled: true # - [ ] 内网/合规环境关掉遥测 # tap.telemetry.enabled: false上述参数默认值集中在 helm-chart/values.yaml资源、helm-chart/values.yamlauth、helm-chart/values.yamlmetrics、helm-chart/values.yamlsecurityContext网络策略在 manifests/complete.yaml。RBAC 相关Worker 需要较高权限做内核抓包Hub/Front 的权限应单独 review manifests/complete.yaml 中的 ClusterRole。高频问题三连1. Worker Pod 起不来 / 抓不到流量现象kubeshark-worker-*长期 PendingUI 无数据。 排查kubectl get pods -n kubeshark -o widekubectl describe nodes | grep Taint。 根因节点污点导致 DaemonSet 未调度values 默认对NoExecute污点已有 toleration自定义污点需补tap.tolerations.workers或节点 cgroup/内核版本不支持 eBPF。2. Web UI 打不开现象8899 端口无响应或转圈。 排查kubectl get pods -n kubeshark -l app.kubeshark.com/appkubeshark-front再看kubectl logs -n kubeshark deploy/kubeshark-hub。 根因port-forward 断开重跑kubeshark proxy即可重建隧道或 Hub Pod 未 Ready 导致前端拉不到数据。3. CPU/内存占用过高现象大流量集群下 Worker CPU 打满Hub 内存逼近 5Gi 上限。 排查kubectl top pods -n kubeshark定位是哪个组件。 根因全量采样 全量 L7 解析叠加高流量对策是下调tap.misc.trafficSampleRate或收窄regex/namespaces只抓目标业务。延伸与参与文档入口README.md快速开始、MCP 接入、KFL 概览贡献指南CONTRIBUTING.md仓库需要 clone 时地址为https://gitcode.com/gh_mirrors/ku/kubeshark如果它帮你抓到了下一个凌晨三点的神秘超时顺手给仓库点个 Star作者们会很高兴的。【免费下载链接】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),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询