K8s服务流量可视化终极方案:Radar Traffic视图对接Hubble、Istio与Beyla实操教程
【免费下载链接】radarThe missing open-source Kubernetes UI with a built-in MCP server for AI agents. See what's broken, why, and what changed. Issues, Topology, event timeline, Helm, GitOps, live service traffic, and cluster audits - all in one Go binary.项目地址: https://gitcode.com/gh_mirrors/radar32/radar
Radar 是一款开源的 Kubernetes 集群管理 UI(单一 Go 二进制、无需账号、完全免费),它的Traffic 视图能自动对接Hubble(Cilium)、Istio服务网格和Grafana Beyla,以动态流量图的形式展示集群里各服务之间的实时通信——每秒请求数、字节量、HTTP 状态码、延迟和错误率一目了然。本文是一份面向初学者的实操教程:3 步启动 Radar,再按你的 CNI 或网格类型选择对应数据源,几分钟内就能看到你的 K8s 服务流量可视化全景,并学会用命名空间、协议和状态码过滤器快速定位异常流量。
Traffic 视图是什么?K8s 流量可视化的工作原理
Radar 的 Traffic 视图把抽象的网络流变成了一张带箭头的动态流向图:节点是工作负载(Deployment、Service、Ingress 等),边是流量,粗细和颜色代表吞吐、请求速率与错误情况。它的核心能力包括:
- 🔍自动探测数据源——启动即检测集群中已安装的 Hubble、Istio、Caretta 或 Beyla,按探测优先级(Hubble → Istio → Caretta → Beyla)自动选择最优来源,探测逻辑见 internal/traffic/manager.go;
- 📡实时刷新——流量数据以流式方式推送,无需手动刷新;
- 🎯多种过滤维度——命名空间、协议(TCP/UDP/HTTP)、HTTP 方法、状态码、转发结果(forwarded/dropped/error)、连接数阈值;
- 🧭零配置引导——没有检测到任何数据源时,会弹出一个安装向导,根据你的 CNI 类型推荐最合适的观测组件并给出一键安装方案。
💡 小技巧:在任何视图下按键盘
g再按f,即可秒切到 Traffic 视图。
快速上手:3 步看到第一张服务流量图
第 1 步:安装 kubectl radar 插件
kubectl krew install radar第 2 步:连接集群并启动
kubectl radarRadar 会读取当前 kubeconfig 上下文,直接和 K8s API 对话,集群侧零安装、零 Agent、零 CRD。
第 3 步:打开 Traffic 视图
浏览器打开后按g f(或在导航栏点击 Traffic)。Radar 会自动探测数据源:如果你的集群用的是 Cilium CNI 且已开启 Hubble,会直接连上 Hubble Relay;如果装了 Istio 并能找到网格指标,则走 Istio 通道。时间窗口默认 5 分钟,可在 1 分钟到 1 小时之间调节。
Hubble(Cilium)对接:最深的 K8s 网络流量洞察
如果你的 CNI 是 Cilium,Hubble 是首选数据源——它提供 L3-L7 全层级的包级可见性。Radar 的连接逻辑很省心:
- 优先直连Hubble Relay Service(集群内运行时);
- 从笔记本运行时自动回退到port-forward通道,全程无需手动操作,实现见 internal/traffic/hubble.go;
- 只有 Hubble 数据源支持L7 细粒度过滤:转发判定(forwarded/dropped/error)、HTTP 方法、状态码分桶。
尚未开启 Hubble 的 Cilium 集群,Radar 会直接给你一条可复制的推荐命令:
cilium hubble enable --ui想本地快速体验 Hubble + Radar 的组合效果,可以直接跑仓库里的演示脚本,它会搭建一个带 Hubble 的演示集群:scripts/cilium-demo.sh、scripts/cilium-demo/README.md。
Istio 服务网格流量可视化:复用现有 Prometheus
如果你的集群跑着 Istio,Radar 从网格导出的Prometheus 指标中读取请求速率、字节量与 5xx 错误率,不需要在数据面做任何改动。检测时发现 Istio 存在但 Prometheus 不可达,Radar 会在界面上明确提示你通过--prometheus-url参数把 Radar 指向你的 Prometheus 实例,而不是显示一张空图。对应实现在 internal/traffic/istio.go。
Beyla 对接:没有服务网格也能做 K8s 流量可视化 🐚
没有 Cilium、没有 Istio?Grafana Beyla 基于eBPF采集 L4 流量 + HTTP 指标,完全不需要服务网格,数据同样写入 Prometheus,由 Radar 直接读取(internal/traffic/beyla.go)。对接时有两个新手最常踩的坑,Radar 会主动替你排掉:
network特性默认关闭:必须把network加进 Beyla 的OTEL_EBPF_METRICS_FEATURES环境变量,否则 Prometheus 里只有beyla_build_info,没有流量指标。Radar 会区分"装了但没开 network 特性"和"根本没装"两种情况并给出对应提示;- 端口和协议字段是可选导出的:
dst.port和transport需要在 Beyla 的attributes.select中显式声明(两者默认关闭)。未导出时,边会显示为端口 0、UDP 显示为 TCP——Radar 不会悄悄展示残缺数据,而是直接在 Traffic 视图旁给出可操作的警告文案,告诉你缺了什么、如何补上。
仓库提供了一个非常值得参考的端到端演示:kind集群 + eBPF 版 Beyla + 最小化 Prometheus + HTTP/TCP/DNS 三种真实会话,并覆盖了三套典型 Beyla 配置(默认属性、开启端口/协议导出、关闭 network 特性):
- 演示脚本:scripts/beyla-demo.sh
- 配置矩阵与实测结论:scripts/beyla-demo/README.md
过滤器实操:按命名空间、协议、状态码快速锁定异常流量
流量图右侧的过滤侧边栏(web/src/components/traffic/TrafficFilterSidebar.tsx)是排障的核心工具,典型排查动线:
- 按命名空间收敛范围——先只看出问题的业务命名空间;
- 按状态码定位错误——勾选
5xx,错误边会在图上以醒目颜色标出; - 按协议切换视角——只看 HTTP 流量排查网关问题,或只看 UDP 检查 DNS 通信;
- 按连接数阈值降噪——过滤掉偶发的极低流量边,聚焦主干链路;
- 隐藏系统流量——kube-system 等基础设施流量可以一键收起。
图形与列表双模式:图上看全貌,列表模式看每一条流的延迟、方法、路径等明细;在图上选中某个节点,列表会自动联动只显示与该节点相关的流。
没有检测到数据源?用安装向导一键补齐 🔧
如果 Traffic 视图提示未检测到任何流量来源,会进入安装向导(web/src/components/traffic/TrafficWizard.tsx)。向导会先识别你的集群环境(CNI 类型 + 云平台),再给出针对性建议:
| 你的环境 | 向导推荐 |
|---|---|
| Cilium CNI | 开启 Hubble(cilium hubble enable --ui) |
| GKE 原生网络 | 升级 Dataplane V2 获得 Hubble,或安装轻量 eBPF 组件 Caretta |
| Calico / Canal / Flannel / VPC CNI / AKS | 安装 eBPF 方案 Caretta(向导直接给出 Helm Chart 配置) |
| Istio 已装但指标缺失 | 提示配置 Prometheus 连接地址 |
📌 Traffic 视图不是孤立的:发现异常流量边后,可以直接跳转到 Topology 视图查看服务依赖链,或到 Timeline 视图核对最近的事件时间线,配合排障效率翻倍。
常见问题(FAQ)
Q1:图是空的,但我确认集群里有流量?大概率是数据源配置不完整。Beyla 场景请检查OTEL_EBPF_METRICS_FEATURES是否包含network;Istio 场景请确认 Radar 能访问网格 Prometheus。Radar 的警告文案会直接指出具体原因。
Q2:所有边都显示端口 0?这是 Beyla 默认不导出dst.port所致,属于可选项而非故障。把dst.port加入对应网络流指标的attributes.select即可——注意这会带来"接收字节数统计不完整"的权衡,Radar 的提示里会说明。
Q3:UDP 流量为什么显示成 TCP?同理,transport字段未导出。将其加入attributes.select后 UDP 会如实显示(添加 transport 是零成本的)。
Q4:切换了 kubeconfig 上下文,流量图没变?切换上下文后 Radar 会重置并重新探测数据源,Traffic 视图需要重新点击连接;旧上下文的端口转发会被自动清理(逻辑在 internal/traffic/manager.go 的Reset流程中)。
总结
Radar Traffic 视图的价值在于把"集群里服务之间到底在传什么"变成了一个零学习成本的问题:Hubble 给你包级深度,Istio 给你网格级 L7 指标,Beyla 让你在没有网格的集群里也能拿到 eBPF 流量数据——三者互斥自动探测、开箱即用,再加上命名空间/协议/状态码多维过滤和一键安装向导,基本覆盖了 K8s 服务流量可视化的全部主流场景。前端交互代码集中在 web/src/components/traffic/,后端数据源适配集中在 internal/traffic/,想深入源码的同学可以从这两个目录入手。
【免费下载链接】radarThe missing open-source Kubernetes UI with a built-in MCP server for AI agents. See what's broken, why, and what changed. Issues, Topology, event timeline, Helm, GitOps, live service traffic, and cluster audits - all in one Go binary.项目地址: https://gitcode.com/gh_mirrors/radar32/radar
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考