基于 eBPF 的网络 Cilium

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

Cilium 架构示意图
Cilium 架构示意图

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 组件架构图
Cilium 组件架构图

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 技术提供了高性能、可观测和安全的网络解决方案。它不仅解决了传统网络方案在动态环境中的挑战,还为微服务架构提供了细粒度的安全控制和深度的网络可视性。

参考资料

文章导航

章节完成

恭喜完成本章节!下一章节即将开始。下一章节:存储

章节概览

评论区