Kubeshark 安装与使用实战

admin 2026年8月11日00:56:17评论112 views字数 5893阅读19分38秒阅读模式

本文介绍了Kubernetes网络可观测性工具Kubeshark的安装与实战,重点讲解通过Helm快速部署、API Stream和KFL查询语言的使用,以及在生产环境中收窄采集范围的建议,帮助运维人员直接查看服务调用与流量细节,提升排障效率。

QUOTE

Kubeshark 最好的地方,不是让排障变得自动化,而是先把证据摊开。

—— python运维技术

最近看了一个 Kubernetes 网络可观测性工具,叫 Kubeshark。

如果你平时排过 Kubernetes 里的服务调用问题,应该能理解这种感觉:日志里看起来没什么,指标里只看到延迟变高,链路追踪又不一定每个服务都接好了。

最后只能一边 kubectl logs,一边猜请求到底走到了哪里。

Kubeshark 解决的就是这一段问题。

它不是替代 Prometheus,也不是替代日志系统。我的理解更简单:它像是 Kubernetes 里的“网络请求放大镜”,把集群里的服务调用、协议请求、状态码、延迟、Headers、Payload、DNS、gRPC、Redis、Kafka 这些东西直接抓出来给你看。

这篇不讲太多概念,主要看三件事:

怎么安装

装完以后先看哪里

哪些地方适合放到真实排障流程里。

本文看点

01

先用 Helm 跑通安装

02

重点看 API Stream 和 KFL

03

生产环境先收窄采集范围

01

INTRO

Kubeshark 是什么

Kubeshark 官方把它叫做 Kubernetes 网络可观测性工具。

它通过 eBPF 在内核层面捕获和索引集群网络流量,然后把这些流量按 Kubernetes、API 和网络语义组织起来。

简单说,它不只是让你看到 IP 和端口,还能看到来源 Pod、目标 Service、协议、请求路径、状态码、延迟这些更贴近排障的信息。

从官方仓库介绍看,它目前比较核心的能力有几类:

实时查看集群里的 API 调用

看服务之间的调用关系

通过 KFL 查询语言过滤流量

抓取和导出 PCAP,后续可以用 Wireshark 分析

支持 HTTP、gRPC、GraphQL、Redis、Kafka、DNS 等协议

支持和 AI Agent 通过 MCP 集成,让 AI 查询网络流量辅助分析。

我比较关心的不是“AI 能不能自动排障”这个说法。

我更关心它能不能先把证据拿出来。

很多生产问题不是没人会分析,而是信息散在太多地方:日志一份、指标一份、链路一份,网络抓包又是另一套工具。

Kubeshark 的价值在于,它能把服务调用这一层直接展开。

02

CHECKLIST

安装前准备

先说环境。

你至少需要:

一个可用的 Kubernetes 集群

本机已经配置好 kubectl,并且能访问目标集群

已安装 Helm

当前账号有安装 Helm Chart 所需的权限。

如果只是学习,建议先用测试集群、Kind、Minikube,或者临时命名空间。

不要一上来就放到生产全量集群里跑。

原因很简单:这类工具会处理集群流量。流量越大,CPU、内存和存储压力越明显。更关键的是,它可能看到请求内容,里面可能包含敏感信息。

能跑,不代表可以直接上生产。

03

INSTALL

使用 Helm 安装 Kubeshark

官方文档里推荐的方式是 Helm。

命令很短:

...bash

helm repo add kubeshark https://helm.kubeshark.com

helm install kubeshark kubeshark/kubeshark

安装完成后,先看一下 Pod 是否正常:

...bash

kubectl get pods

再看 Service:

...bash

kubectl get svc

如果你看到 kubeshark-front 这类服务,就可以先用本地端口转发打开 Dashboard:

...bash

kubectl port-forward service/kubeshark-front 8899:80

然后浏览器访问:

...text

http://localhost:8899

如果页面能打开,说明 Kubeshark 已经开始工作了。

官方也提到,生产环境更建议用 Ingress Controller 暴露 Dashboard,而不是长期依赖 port-forward。

这个判断我也认同。port-forward 更适合本地试用和临时排障。

04

CLI

另一种方式:安装 CLI 后直接 tap

如果你是在 macOS 上,也可以用 Homebrew:

...bash

brew install kubeshark

kubeshark tap

这种方式对本地体验比较友好,适合快速看一下效果。

如果你是 Linux 或 Windows,也可以去 GitHub Releases 下载对应二进制。官方 release 页面里提供了 Linux AMD64、Linux ARM64、macOS、Windows 等版本。

不过如果是团队环境,我还是更建议先用 Helm。

Helm 更容易纳入变更流程,也方便后续通过 values 控制资源、采集范围、Ingress、认证和清理。

05

DASHBOARD

装完以后先看哪里

打开 Dashboard 后,不要急着点一堆页面。

我建议先看三个地方。

1. API Stream

API Stream 是最直观的地方。

它会展示集群里的 API 调用,包括协议、方法、状态码、源工作负载、目标工作负载、时间戳和延迟。

如果你正在排查某个服务 500、某个接口变慢、某个调用没有返回,先看这里。

点开一条请求以后,可以进一步看到:

Headers

Request / Response payload

TCP stream

Timing 信息

来源和目标工作负载。

这比单纯看日志多了一层视角。

日志通常是应用自己说了什么,而 Kubeshark 更接近“请求实际发生了什么”。

2. Workload Map

第二个值得看的地方是 Workload Map。

它会把工作负载之间的调用关系画出来。

排 Kubernetes 故障时,有些问题不是某一个 Pod 挂了,而是调用关系和我们想的不一样。比如:

前端没有打到预期的后端

某个服务突然多了一条外部调用

流量绕到了旧版本服务

一个不该访问数据库的服务,实际访问了数据库。

这种问题用日志也能查,但很慢。

图一出来,至少能先知道该往哪条链路上看。

3. KFL 查询

Kubeshark 有自己的查询语言,叫 KFL。

刚开始不需要学复杂语法,先记几个常用的就够了。

看 HTTP 流量:

...text

http

看 DNS:

...text

dns

看 Redis:

...text

redis

看 4xx 和 5xx:

...text

http && status_code >= 400

只看 5xx:

...text

http && status_code >= 500

看某个命名空间:

...text

dst.pod.namespace == "production"

看某个服务:

...text

dst.service.name == "payment-service"

看 GET 请求里的 /api:

...text

http && method == "GET" && url.contains("/api")

如果你怀疑某些请求带了敏感 Header,也可以查:

...text

http && "authorization" in request.headers

这个查询有点敏感,但很实用。

它提醒我们:Kubeshark 不只是排障工具,也可能看到不该随便扩散的信息。

06

FILTERS

Display Filters 和 Capture Filters 不要混

这里有一个地方要特别注意。

Kubeshark 里有 Display Filters,也有 Capture Filters。

类型
影响范围
适合场景
Display Filters
只影响当前页面展示
临时查 5xx、某个服务、某个接口
Capture Filters
影响实际采集范围
控制采集命名空间、Pod、流量范围

比如你在 Dashboard 里输入:

...text

http && status_code >= 500

这只是过滤展示结果,底层该采集的流量还是在采集。

Capture Filters 不一样。

它会影响 Kubeshark 实际采集哪些工作负载、哪些命名空间、哪些流量。官方文档也强调,Capture Filters 会影响 Raw Capture 和 L7 traffic indexing。

如果你在生产环境使用,一定要优先考虑 Capture Filters。

比如只采集某个命名空间:

...yaml

tap:

  regex: .*

  namespaces:

    - sock-shop

  excludedNamespaces:

    - kube-system

  bpfOverride: ""

或者只匹配某类 Pod:

...yaml

tap:

  regex: catal.*

  namespaces:

    - sock-shop

  excludedNamespaces:

    - kube-system

  bpfOverride: ""

我的建议是:测试环境可以放开一点,生产环境一定要收窄。

不要一上来就对整个集群全量采集。工具再好,也不能忽略资源消耗和数据边界。

07

TEST

如何模拟一点流量

如果你的集群里本来就有业务,可以直接打开 Dashboard 看实时流量。

如果只是测试,可以部署一个简单应用,然后用 curl 打几次请求。

比如你已有一个 Service:

...bash

kubectl get svc

找一个可以访问的服务后,在集群里临时起一个 curl Pod:

...bash

kubectl run curl --image=curlimages/curl -it --rm -- sh

进入容器后访问目标服务:

...bash

curl http://目标服务名:端口/

回到 Kubeshark Dashboard,就可以在 API Stream 里观察是否出现对应请求。

如果你看到请求、状态码、延迟、源 Pod 和目标 Service,说明这条链路已经能被观察到了。

08

FAQ

常见问题

1. 页面打不开

先看端口转发是否还在:

...bash

kubectl port-forward service/kubeshark-front 8899:80

如果 8899 被占用,可以换一个本地端口:

...bash

kubectl port-forward service/kubeshark-front 8898:80

然后访问:

...text

http://localhost:8898

2. Dashboard 没有流量

先确认集群里真的有请求发生。

再检查:

...bash

kubectl get pods

看 Kubeshark 相关 Pod 是否正常。

如果你设置了 Capture Filters,要确认过滤条件没有把目标业务排除掉。

3. 集群资源压力变大

这类问题不要硬扛。

先缩小采集范围,再看 Kubeshark 自身 Pod 的 CPU、内存和重启情况。

...bash

kubectl top pods

kubectl get pods

如果出现 OOMKilled,说明资源配置或采集范围需要调整。

官方 Best Practices 也建议,新版本先在开发或测试集群验证,不要直接推进生产。

09

CLEANUP

如何卸载

如果你是用 Helm 安装的,清理很简单:

...bash

helm uninstall kubeshark

然后确认资源是否清理干净:

...bash

kubectl get pods

kubectl get svc

如果你是用 CLI 方式启动的,可以执行:

...bash

kubeshark clean

具体以你当时的安装方式为准。

10

THOUGHTS

我会怎么用它

如果放到我的排障习惯里,Kubeshark 不会是第一个打开的工具。

我一般还是先看告警、指标、日志和最近变更。

但当问题进入这些阶段时,Kubeshark 就有价值了:

服务之间到底怎么调用

状态码到底在哪里变了

请求是不是打到了错误服务

DNS 有没有异常

某条链路是不是慢在网络或协议层。

它适合补上日志和指标之间的那块空白。

尤其是微服务一多,调用关系不再靠脑子能记住的时候,Workload Map 和 API Stream 会很有用。

不过生产环境使用要克制。

我会按这个顺序来:

1

先在测试环境跑通

2

再只对一个命名空间或一组 Pod 开启采集

3

确认资源消耗和敏感数据边界

4

再考虑放入正式排障流程

5

如果要给更多人用,Dashboard 访问要接入认证和权限控制。

这不是保守,是生产环境的基本常识。

∞

THE END

最后

Kubeshark 这类工具最好的地方,不是让排障变得“自动化”,而是把证据摊开。

Kubernetes 里的很多问题,最怕的是靠猜。

请求有没有出去,打到了哪个服务,返回了什么状态码,慢在哪里,Header 和 Payload 里有没有异常,这些东西如果能直接看到,排障就会少走很多弯路。

但它也不是银弹。

日志、指标、链路追踪、事件、变更记录,这些还是要看。Kubeshark 更适合放在网络和 API 调用这一层,作为排障证据链的一部分。

如果你正在学 Kubernetes 排障,我建议可以在测试集群里装一次。

不用急着上生产,先把 Dashboard 打开,看几条真实请求,再试几个 KFL 查询。

能看懂请求怎么在集群里跑,比背很多概念更有用。

12

REFERENCES

参考资料

Kubeshark GitHub:https://github.com/kubeshark/kubeshark

Kubeshark Installation:https://docs.kubeshark.com/en/install

Kubeshark Introduction:https://docs.kubeshark.com/en/introduction

Kubeshark Dashboard:https://docs.kubeshark.com/en/ui

Kubeshark Display Filters / KFL:https://docs.kubeshark.com/en/display_filters

Kubeshark Capture Filters:https://docs.kubeshark.com/en/pod_targeting

Kubeshark Best Practices:https://docs.kubeshark.com/en/best_practice

END

我是 python运维技术,长期关注 Python、Linux、Kubernetes 和自动化运维里的真实问题。

如果你觉得今天这篇有收获,欢迎点赞、在看、转发三连,我们下篇见。

原文始发于微信公众号(python运维技术):Kubeshark 安装与使用实战

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2026年8月11日00:56:17
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Kubeshark 安装与使用实战http://cn-sec.com/archives/5367342.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息