4、Hubble组件解析:Hubble Relay、Hubble UI、Hubble CLI、Hubble Exporter
Hubble 是 Cilium 原生的分布式网络观测层,其架构由多个独立组件协同工作。在生产环境中,这些组件分别承担数据采集、聚合存储、可视化查询与指标暴露等职责。理解每个组件的角色与交互关系,是正确部署和排障 Hubble 的基础。
4.1 组件全景与交互流程
Hubble 采用“Agent 采集 → Relay 聚合 → 多接口消费”的架构模式。下图展示了核心组件及其数据流向:
4.2 Hubble Relay:集群级聚合与缓存
Hubble Relay 是 Hubble 架构中的“中枢神经”。它从所有 Cilium Agent 内嵌的 Hubble Server 拉取流数据,执行去重、排序、缓存后,对外提供统一的 gRPC 查询接口。
| 特性 | 说明 |
|---|---|
| 数据源 | 每个 Kubernetes 节点上的 Hubble Server(gRPC 流) |
| 核心功能 | 跨节点流去重、时间排序、内存缓存(默认 5 分钟) |
| 查询能力 | 支持按 namespace、pod、label、IP、port、verdict 等过滤 |
| 部署方式 | Kubernetes Deployment + Service,默认 1 副本,可水平扩展 |
| 端口 | gRPC 4245(对外查询)、Peer 监听 4244(Agent 注册) |
生产建议:Relay 的内存消耗与集群规模、流速率正相关。对于 100 节点集群,建议分配 2-4 GiB 内存,并开启
--flow-cache-size 限制缓存上限。
4.3 Hubble UI:可视化流量拓扑
Hubble UI 是一个基于 React 的 Web 应用,通过 Relay 的 gRPC 接口获取数据,以服务拓扑图、表格和时序图的形式展示网络流量。它不直接连接 Agent,因此部署时依赖 Relay 就绪。
- 拓扑视图:以圆形或力导向图展示服务间连接,连线颜色标识 TCP 状态(绿=正常,红=拒绝,黄=超时)。
- 流表视图:实时滚动显示原始流记录,支持按 namespace、pod、verdict 等字段排序和搜索。
- 时间控制:支持暂停、回放和自定义时间窗口查询(依赖 Relay 缓存)。
- 部署方式:Kubernetes Deployment + Service,默认端口 12000(HTTP)。
注意:Hubble UI 不提供持久化存储。刷新页面或切换时间窗口超出 Relay 缓存范围时,历史流数据将不可见。如需长期存储,需集成 Hubble Exporter + Prometheus + Grafana。
4.4 Hubble CLI:命令行流量观测
Hubble CLI 是运维人员最常用的交互工具。它通过 gRPC 连接 Relay(或直连单节点 Agent),执行实时观测和状态检查。常用命令如下:
# 连接 Relay(默认 localhost:4245)
hubble observe --namespace default --verdict DROPPED
# 直连指定节点 Agent
hubble observe --server 10.0.1.5:4244 --since 5m
# 查看集群 Hubble 状态
hubble status
# 导出 JSON 格式流数据
hubble observe --output json --last 100
| 命令 | 用途 | 常用参数 |
|---|---|---|
hubble observe |
实时观测网络流 | --namespace, --verdict, --since, --last |
hubble status |
检查集群 Hubble 健康度 | --server |
hubble list nodes |
列出所有注册的 Hubble 节点 | 无 |
hubble version |
查看 CLI 版本 | 无 |
4.5 Hubble Exporter:Prometheus 指标暴露
Hubble Exporter 将 Hubble 流数据转换为 Prometheus 指标,供长期存储和告警使用。它支持从 Agent 或 Relay 拉取数据,并暴露标准的 /metrics 端点。
核心暴露指标包括:
- hubble_flows_total:按 verdict(DROPPED / FORWARDED / ERROR)和类型(L3/L4/L7)计数的流总量。
- hubble_tcp_flags_total:TCP 标志位计数(SYN、FIN、RST 等)。
- hubble_drop_reasons_total:按丢弃原因(Policy denied、No route 等)计数的丢包量。
- hubble_http_requests_total / hubble_http_duration_seconds:L7 HTTP 请求计数与延迟分布(需启用 L7 策略)。
校准场景:在资源配额校准任务中,Exporter 的
hubble_flows_total{verdict="DROPPED"} 指标可直接用于计算“因策略拒绝导致的丢包率”,并与 CiliumEndpoint 的配额限制进行交叉验证。
4.6 组件对比速查
| 组件 | 数据来源 | 输出接口 | 是否必需 | 典型端口 |
|---|---|---|---|---|
| Hubble Server(Agent 内嵌) | eBPF 程序 | gRPC 流 | 是 | 4244 |
| Hubble Relay | 多个 Hubble Server | gRPC 统一端点 | 推荐 | 4245 |
| Hubble UI | Hubble Relay | Web HTTP | 可选 | 12000 |
| Hubble CLI | Relay 或 Agent | 终端 stdout | 可选 | — |
| Hubble Exporter | Agent 或 Relay | Prometheus /metrics | 可选 | 9091(默认) |