1. 课程导论与背景
1.1 eBPF 技术简介
eBPF(extended Berkeley Packet Filter)是一项革命性的 Linux 内核技术,允许用户在无需修改内核源码或加载内核模块的情况下,安全、高效地在内核中运行沙箱化程序。它最初源于网络数据包过滤,现已演变为一个通用的内核可编程框架。
核心能力:eBPF 通过在内核事件(系统调用、网络事件、函数入口/出口)上挂载钩子,执行用户定义的字节码,实现观测、安全、网络三大领域的动态控制。
| 特性 | 传统内核模块 | eBPF 程序 |
|---|---|---|
| 安全性 | 可能引发内核崩溃 | 验证器严格检查,拒绝危险操作 |
| 可移植性 | 需针对内核版本编译 | 一次编译,到处运行(CO-RE) |
| 性能开销 | 较高 | JIT 编译,接近原生性能 |
| 编程接口 | 复杂,需深入内核 API | 通过 libbpf / bcc 简化开发 |
eBPF 的典型应用场景包括:
- 网络观测:捕获、过滤、聚合网络数据包,提供细粒度流量视图。
- 性能分析:追踪 CPU、内存、I/O 等资源使用情况。
- 安全监控:检测异常系统调用、文件访问和网络连接。
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 则将这些处理过程转化为可读的流量视图和指标。
1.3 为什么需要网络观测与资源配额校准
在 Kubernetes 环境中,网络流量是动态且复杂的。微服务之间的通信、外部请求的流入流出、以及服务间的依赖关系,都可能成为性能瓶颈或安全漏洞的来源。网络观测的核心价值在于:
- 故障定位:快速识别网络延迟、丢包、连接失败等问题。
- 安全审计:检测异常流量模式,识别潜在攻击。
- 容量规划:了解流量趋势,合理分配网络资源。
资源配额校准 则是网络观测的高级应用。在 Kubernetes 中,Pod 的网络资源(如带宽、连接数)通常由 CNI 插件管理,但默认配额可能不准确。通过 Hubble 的流量可视化,我们可以:
- 观测实际流量:获取每个 Pod 的真实网络吞吐量、连接数、协议分布。
- 对比配额设置:将观测数据与当前资源配额(如 NetworkPolicy、带宽限制)进行对比。
- 动态调整:基于观测结果,校准配额,避免资源浪费或瓶颈。
常见误区:很多团队仅依赖 Prometheus 的 CPU/内存指标进行资源规划,却忽略了网络资源的瓶颈。网络流量波动大、突发性强,缺乏观测会导致配额设置严重偏离实际需求。
| 场景 | 无网络观测 | 有 Hubble 观测 |
|---|---|---|
| Pod 带宽限制 | 凭经验设置,可能过大或过小 | 基于实际流量曲线精准设置 |
| 服务依赖分析 | 手动排查,耗时且易遗漏 | 自动生成服务依赖图,一目了然 |
| 安全策略审计 | 依赖日志,延迟高 | 实时流监控,即时告警 |