基于 eBPF 的网络 Cilium
Cilium 是一个开源的云原生网络、可观测性和安全解决方案,目前已成为 CNCF 的毕业项目。它利用 Linux 内核的 eBPF 技术,为基于 Kubernetes 的容器环境提供透明的网络连接、负载均衡、网络安全和可观测性功能。

Cilium 核心概念
什么是 Cilium
Cilium 是一个为云原生环境设计的网络、可观测性和安全平台。它基于 Linux 内核的 eBPF 技术,能够透明地在应用程序和容器之间提供网络连接、负载均衡和安全防护,而无需修改应用程序代码或容器配置。
Cilium 的核心优势在于:
- 无侵入性:基于内核级别的 eBPF 技术,无需修改应用程序
- 高性能:利用内核数据路径,避免用户空间和内核空间的频繁切换
- API 感知:支持 HTTP、gRPC、Kafka 等应用层协议的可视性和安全策略
- 云原生集成:与 Kubernetes、Docker 等容器平台深度集成
eBPF 技术基础
扩展的伯克利包过滤器(Extended Berkeley Packet Filter,简称 eBPF)是 Linux 内核中的一项技术,它允许在内核空间中运行沙盒程序,而无需修改内核源代码或加载内核模块。eBPF 最初用于网络包过滤,现在已扩展到系统调用过滤、性能分析和安全等多个领域。
eBPF 的主要特点:
- 安全性:程序在虚拟机中运行,具有严格的安全检查
- 高性能:直接在内核空间执行,避免上下文切换开销
- 可编程性:支持复杂的逻辑处理和状态维护
- 实时性:能够实时处理网络包和系统事件
Hubble:网络可观测性平台
Hubble 是 Cilium 的网络可观测性组件,于 2019 年开源发布。它提供了对 Kubernetes 集群中网络流量的深度可视性和监控能力。
Hubble 的核心功能
- 实时流量监控:提供服务间通信的实时可视化
- 安全事件跟踪:监控和记录网络安全策略的执行情况
- 性能分析:分析网络延迟、吞吐量和错误率
- 故障诊断:快速定位网络连接问题和策略配置错误
监控工具集成
Hubble 支持多种监控和可视化工具:
- Hubble CLI:命令行工具,用于实时查询和分析网络流量
- Hubble UI:Web 界面,提供直观的网络拓扑和流量可视化
- Prometheus:导出网络指标,支持告警和长期存储
- Grafana:创建网络性能和安全监控仪表板
主要特性与优势
身份驱动的安全模型
Cilium 采用基于身份(Identity)的安全模型,而不是传统的基于 IP 地址的方法:
- 标签驱动:使用 Kubernetes 标签定义服务身份
- 动态适配:自动适应容器的创建和销毁
- 策略简化:无需管理复杂的 IP 地址和端口规则
- 多集群支持:支持跨集群的身份识别和策略执行
应用层协议感知
与传统防火墙仅支持 L3/L4 层过滤不同,Cilium 能够理解和处理应用层协议:
HTTP/HTTPS 支持:
- 基于 HTTP 方法、路径、头部的精细化访问控制
- 支持 REST API 的细粒度授权
- TLS 终止和加密策略
gRPC 支持:
- 基于服务名称和方法的访问控制
- 支持 gRPC 元数据过滤
- 双向 TLS 认证
Kafka 支持:
- Topic 级别的访问控制
- 基于用户身份的授权
- 消息内容过滤
高性能网络处理
Cilium 通过 eBPF 技术实现了高性能的网络处理:
- 内核级处理:直接在内核中处理网络包,减少上下文切换
- XDP 支持:在网卡驱动层面进行包处理,实现最低延迟
- 负载均衡优化:支持直接服务返回(DSR)和一致性哈希
- 连接跟踪:高效的连接状态管理
网络模型与部署模式
Overlay 网络模式
使用封装技术创建虚拟网络:
- VXLAN:最常用的封装协议,支持多租户隔离
- Geneve:更灵活的封装选项,支持扩展元数据
- WireGuard:提供加密的 overlay 网络
适用场景:
- 底层网络基础设施限制较多
- 需要快速部署,对性能要求不是极致
- 跨云或混合云环境
Native Routing 模式
直接使用主机路由表进行包转发:
- BGP 集成:与数据中心 BGP 路由器集成
- 云网络集成:利用云平台的原生路由能力
- 性能优化:避免封装开销,实现最佳性能
适用场景:
- 对网络性能要求极高
- 底层网络基础设施可控
- 需要与现有网络设备集成
组件架构

Cilium Agent
Cilium Agent 是运行在每个节点上的核心组件:
主要职责:
- 网络配置:为 Pod 分配 IP 地址和配置网络接口
- 策略执行:将高级安全策略编译为 eBPF 程序
- 状态同步:与 Kubernetes API 服务器同步集群状态
- 指标收集:收集网络和安全相关的指标数据
API 接口:
- REST API:提供配置和查询接口
- gRPC API:高性能的内部通信
- CNI 接口:与容器运行时集成
Cilium Operator
Cilium Operator 负责集群级别的操作:
- IP 地址管理:协调整个集群的 IP 地址分配
- CRD 管理:处理 Cilium 相关的自定义资源
- 证书管理:管理 TLS 证书的生成和轮换
- 垃圾回收:清理无效的网络策略和身份信息
数据存储
Cilium 使用 Kubernetes 的 etcd 存储以下信息:
- 身份映射:标签到安全身份的映射关系
- 网络策略:集群中定义的所有网络安全策略
- 服务信息:Service 和 Endpoint 的映射关系
- 节点信息:集群中各节点的网络配置
命令行工具使用
Cilium 提供了功能丰富的命令行工具:
# 查看集群状态
cilium status
# 管理网络端点
cilium endpoint list
cilium endpoint get <endpoint-id>
# 网络策略管理
cilium policy get
cilium policy import <policy-file>
cilium policy delete <policy-name>
# 网络连通性测试
cilium connectivity test
# 监控网络流量
cilium monitor
cilium monitor --type=drop
# 服务和负载均衡
cilium service list
cilium bpf lb list
# 调试和故障排除
cilium debuginfo
cilium bpf tunnel list
网络策略示例
以下是一个典型的 Cilium 网络策略配置:
apiVersion: "cilium.io/v2"
kind: CiliumNetworkPolicy
metadata:
name: "l7-rule"
spec:
endpointSelector:
matchLabels:
app: web-server
ingress:
- fromEndpoints:
- matchLabels:
app: api-gateway
toPorts:
- ports:
- port: "80"
protocol: TCP
rules:
http:
- method: "GET"
path: "/api/v1/.*"
- method: "POST"
path: "/api/v1/data"
headers:
- "Content-Type: application/json"
这个策略允许具有 app: api-gateway
标签的 Pod 通过 HTTP GET 和 POST 方法访问 app: web-server
标签的 Pod 的特定路径。
性能优化与最佳实践
部署建议
内核要求:
- 推荐 Linux 内核版本 4.19 或更高
- 启用必要的内核配置选项(eBPF、XDP 等)
- 考虑使用优化过的内核发行版
资源配置:
- 根据集群规模调整 Cilium Agent 的资源限制
- 配置适当的 eBPF map 大小
- 监控内存使用情况,避免 OOM
网络配置:
- 选择合适的数据路径模式(Overlay vs Native Routing)
- 优化 MTU 设置以减少包分片
- 考虑启用 XDP 加速(如果硬件支持)
监控与故障排除
关键指标监控:
- 网络延迟和吞吐量
- 策略执行统计
- eBPF 程序的性能指标
- 内存和 CPU 使用率
常见故障排除:
- 使用
cilium monitor
监控包丢弃事件 - 检查 eBPF 程序的加载状态
- 验证网络策略的配置正确性
- 分析 Hubble 提供的流量信息
与云原生生态集成
Kubernetes 集成
- NetworkPolicy:完全兼容 Kubernetes 标准网络策略
- Service:提供高性能的 Service 负载均衡实现
- Ingress:支持 Ingress 控制器的南北向流量管理
- ServiceMesh:可作为 Istio 等服务网格的数据平面
安全平台集成
- Falco:结合运行时安全检测
- OPA/Gatekeeper:策略即代码的安全治理
- Prometheus/Grafana:监控和告警集成
- Jaeger/Zipkin:分布式链路追踪
Cilium 作为云原生网络的重要基础设施,通过 eBPF 技术提供了高性能、可观测和安全的网络解决方案。它不仅解决了传统网络方案在动态环境中的挑战,还为微服务架构提供了细粒度的安全控制和深度的网络可视性。