Cilium 与 Hubble 架构:数据平面与观测平面
在深入排查镜像拉取网络流量故障之前,必须理解 Cilium 与 Hubble 的架构分层。Cilium 本身是一个基于 eBPF 的数据平面,负责网络策略、负载均衡和安全;而 Hubble 则是构建在 Cilium 之上的可观测性平面,专门用于捕获、记录和展示流量。两者共享 eBPF 内核技术栈,但职责分离清晰。
2.1 核心组件总览
Cilium 与 Hubble 的部署通常以 DaemonSet 形式运行在 Kubernetes 集群的每个节点上。下表列出了核心组件及其职责:
| 组件 | 所属平面 | 运行模式 | 核心职责 |
|---|---|---|---|
| Cilium Agent | 数据平面 | DaemonSet (cilium-agent) | 管理 eBPF 程序、实现网络策略、Service 负载均衡、IPAM |
| Cilium Operator | 控制平面 | Deployment | 处理集群级任务(如 IP 分配、身份管理) |
| Hubble Relay | 观测平面 | Deployment | 聚合各节点 Hubble 观测数据,提供集群级 API |
| Hubble UI | 观测平面 | Deployment | 可视化服务依赖图与流量流转 |
| Hubble CLI | 观测平面 | 二进制工具 | 命令行查询流量、过滤事件、导出流日志 |
cilium-agent Pod 是否健康运行,因为它是 eBPF 数据路径的守护进程。若 Agent 异常,所有节点网络都将中断。
2.2 数据平面:Cilium 与 eBPF 内核技术
Cilium 的数据平面完全构建在 eBPF(extended Berkeley Packet Filter)之上。eBPF 允许用户在 Linux 内核中安全地运行沙箱程序,而无需修改内核源码或加载内核模块。Cilium 利用 eBPF 在数据路径的关键钩子点(Hook Points)注入程序,实现网络转发、策略执行和观测数据采集。
下图展示了 Cilium 数据平面在内核中的主要 eBPF 钩子位置及数据流路径:
2.3 观测平面:Hubble 的架构与数据流
Hubble 作为 Cilium 的可观测性层,本身不参与数据转发。它通过 eBPF 程序在内核中被动监听事件,并将这些事件通过 perf ring buffer 或 BPF map 传递给用户空间的 Hubble Agent。Hubble Agent 再通过 gRPC 暴露流日志和服务映射关系。
下图展示了 Hubble 观测平面的组件协作关系:
hubble-relay 的 Service 与 Endpoint 是否正常。
2.4 eBPF 技术基础:Cilium 的基石
eBPF 是 Cilium 和 Hubble 能够高效工作的核心技术。理解以下 eBPF 基础概念,有助于诊断流量观测中的异常:
- BPF 程序类型: Cilium 主要使用
BPF_PROG_TYPE_XDP、BPF_PROG_TYPE_SCHED_CLS(TC)、BPF_PROG_TYPE_CGROUP_SOCK等,分别对应不同的网络钩子点。 - BPF Map: 用于在内核与用户空间之间共享数据。Cilium 使用 Map 存储策略规则、端点信息、连接跟踪表。
- perf ring buffer: Hubble 通过 perf ring buffer 将内核事件(如网络包丢弃、连接建立)高效地传递给用户空间的 Hubble Agent。
- BPF CO-RE (Compile Once – Run Everywhere): Cilium 利用 BTF(BPF Type Format)实现一次编译,多内核版本运行,避免了对特定内核头文件的依赖。
POLICY_DENIED)。Hubble 通过读取这些 eBPF 事件,能够精确告知你哪个策略、哪个标签导致了流量阻断。
2.5 数据平面与观测平面的协作关系
下表总结了 Cilium 数据平面与 Hubble 观测平面在镜像拉取流量排查中的不同角色:
| 维度 | Cilium 数据平面 | Hubble 观测平面 |
|---|---|---|
| 核心任务 | 转发、策略执行、负载均衡 | 事件采集、流日志存储、可视化 |
| 数据来源 | eBPF 程序直接处理网络包 | 从 eBPF 事件中被动监听 |
| 对性能影响 | 极低(内联在内核路径) | 极低(仅复制元数据) |
| 排查价值 | 确认策略是否生效、流量是否到达 | 提供丢弃原因、延迟、流路径 |
| 常用工具 | cilium endpoint list、cilium policy trace |
hubble observe、hubble status |
在实际排查中,你通常先使用 Hubble 观测流量是否被丢弃或延迟,再通过 Cilium 数据平面工具定位具体的策略或转发问题。两者结合,才能完整还原镜像拉取流量的全链路状态。