1. 课程导论与背景

1.1 eBPF 技术简介

eBPF(extended Berkeley Packet Filter)是一项革命性的 Linux 内核技术,允许用户在无需修改内核源码或加载内核模块的情况下,安全、高效地在内核中运行沙箱化程序。它最初源于网络数据包过滤,现已演变为一个通用的内核可编程框架。

核心能力:eBPF 通过在内核事件(系统调用、网络事件、函数入口/出口)上挂载钩子,执行用户定义的字节码,实现观测、安全、网络三大领域的动态控制。
特性 传统内核模块 eBPF 程序
安全性 可能引发内核崩溃 验证器严格检查,拒绝危险操作
可移植性 需针对内核版本编译 一次编译,到处运行(CO-RE)
性能开销 较高 JIT 编译,接近原生性能
编程接口 复杂,需深入内核 API 通过 libbpf / bcc 简化开发

eBPF 的典型应用场景包括:

  • 网络观测:捕获、过滤、聚合网络数据包,提供细粒度流量视图。
  • 性能分析:追踪 CPU、内存、I/O 等资源使用情况。
  • 安全监控:检测异常系统调用、文件访问和网络连接。
eBPF 内核可编程架构 用户空间 eBPF 程序加载器(bpftool / bcc / libbpf) 内核空间 验证器(Verifier) JIT 编译 内核钩子(Hook) 硬件 / 网络设备

1.2 Cilium 与 Hubble 的关系

Cilium 是一个基于 eBPF 的云原生网络、安全与观测平台,专为 Kubernetes 设计。它利用 eBPF 在内核层面直接处理网络数据,替代了传统的 kube-proxy 和 CNI 插件。

Hubble 是 Cilium 的分布式网络观测层,专门用于可视化 Kubernetes 集群中的网络流量。它通过 Cilium 的 eBPF 数据路径,实时捕获、记录和聚合网络流信息。

组件 核心功能 与 eBPF 的关系
Cilium 网络策略、负载均衡、加密通信 直接使用 eBPF 程序处理数据包
Hubble 流量可视化、服务依赖图、指标监控 从 Cilium 的 eBPF 数据路径提取流信息
关键理解:Cilium 是执行者,Hubble 是观察者。Cilium 通过 eBPF 处理网络流量,Hubble 则将这些处理过程转化为可读的流量视图和指标。
Cilium 与 Hubble 协作架构 Kubernetes 集群 Cilium Agent eBPF 网络策略 / 负载均衡 Hubble Server 流数据聚合 / 服务依赖图 Hubble Relay(集群级聚合)

1.3 为什么需要网络观测与资源配额校准

在 Kubernetes 环境中,网络流量是动态且复杂的。微服务之间的通信、外部请求的流入流出、以及服务间的依赖关系,都可能成为性能瓶颈或安全漏洞的来源。网络观测的核心价值在于:

  • 故障定位:快速识别网络延迟、丢包、连接失败等问题。
  • 安全审计:检测异常流量模式,识别潜在攻击。
  • 容量规划:了解流量趋势,合理分配网络资源。

资源配额校准 则是网络观测的高级应用。在 Kubernetes 中,Pod 的网络资源(如带宽、连接数)通常由 CNI 插件管理,但默认配额可能不准确。通过 Hubble 的流量可视化,我们可以:

  1. 观测实际流量:获取每个 Pod 的真实网络吞吐量、连接数、协议分布。
  2. 对比配额设置:将观测数据与当前资源配额(如 NetworkPolicy、带宽限制)进行对比。
  3. 动态调整:基于观测结果,校准配额,避免资源浪费或瓶颈。
常见误区:很多团队仅依赖 Prometheus 的 CPU/内存指标进行资源规划,却忽略了网络资源的瓶颈。网络流量波动大、突发性强,缺乏观测会导致配额设置严重偏离实际需求。
场景 无网络观测 有 Hubble 观测
Pod 带宽限制 凭经验设置,可能过大或过小 基于实际流量曲线精准设置
服务依赖分析 手动排查,耗时且易遗漏 自动生成服务依赖图,一目了然
安全策略审计 依赖日志,延迟高 实时流监控,即时告警