4、Hubble组件解析:Hubble Relay、Hubble UI、Hubble CLI、Hubble Exporter

Hubble 是 Cilium 原生的分布式网络观测层,其架构由多个独立组件协同工作。在生产环境中,这些组件分别承担数据采集、聚合存储、可视化查询与指标暴露等职责。理解每个组件的角色与交互关系,是正确部署和排障 Hubble 的基础。

4.1 组件全景与交互流程

Hubble 采用“Agent 采集 → Relay 聚合 → 多接口消费”的架构模式。下图展示了核心组件及其数据流向:

Hubble 核心组件架构图 Hubble 核心组件架构图 Cilium Agent 节点(每个 Kubernetes 节点) Hubble Server(内嵌于 Cilium Agent) eBPF 程序捕获网络事件 → 按流聚合 → 暴露 gRPC 流 Hubble Relay(集群级聚合层) 连接所有 Hubble Server → 去重、排序、缓存 → 统一 gRPC 端点 gRPC 流 Hubble UI Web 可视化面板 Hubble CLI hubble observe / status Hubble Exporter Prometheus 指标暴露 说明: Hubble Relay 是可选组件。若仅使用 CLI 直连单节点 Agent,可跳过 Relay 部署。 Exporter 可直接从 Agent 或 Relay 拉取指标,图中以 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(默认)