3. Cilium 核心概念速览:eBPF 原理、CNI 角色、Identity 与网络策略基础

在深入租户隔离蓝图之前,必须建立对 Cilium 核心概念的共识。Cilium 并非传统 CNI 插件的简单替代,它通过 eBPF 技术将数据平面与控制平面深度耦合,重新定义了 Kubernetes 网络、安全与可观测性的边界。本节将拆解其最关键的四个支柱:eBPF 原理、CNI 角色、Identity 概念以及L3/L4/L7 网络策略。

3.1 eBPF 原理:内核可编程的基石

eBPF(extended Berkeley Packet Filter)是一种允许用户在 Linux 内核中安全、高效地运行沙箱化程序的技术。Cilium 利用 eBPF 绕过了传统的 iptables 和 netfilter 框架,直接在网络数据路径的关键钩子点注入逻辑。

核心优势: eBPF 程序在内核态执行,避免了频繁的用户态与内核态上下文切换,延迟降低 2-5 倍,吞吐量提升 30% 以上,且无需修改内核代码或加载内核模块。
关键钩子点: Cilium 主要使用 XDP(eXpress Data Path,网卡驱动层)、TC(Traffic Control,协议栈入口/出口)以及 cgroup/socket 等钩子,实现对数据包的拦截、转发与策略执行。
eBPF 数据路径 vs 传统 iptables 路径 传统 iptables 路径 1. 网卡接收数据包 2. 内核协议栈处理 3. iptables 规则遍历 (O(n)) 4. 用户态 conntrack 查询 5. 套接字投递到应用 Cilium eBPF 路径 1. XDP 钩子 (网卡驱动层) 2. eBPF 策略查找 (O(1) Map) 3. 内核态 conntrack & NAT 4. 直接转发/丢弃 (无上下文切换) 5. 套接字投递到应用

3.2 CNI 角色:从网络插件的身份转变

Cilium 在 Kubernetes 中承担 CNI(Container Network Interface)插件的角色,负责为 Pod 分配 IP 地址并配置网络连通性。但与传统 CNI(如 Flannel、Calico)不同,Cilium 的 CNI 插件只是一个“触发器”。

维度 传统 CNI(Flannel/Calico) Cilium CNI
核心职责 IP 分配 + 路由规则下发 IP 分配 + eBPF 程序加载
数据平面 iptables / 路由表 / VXLAN eBPF Maps & Programs
策略执行点 宿主机 iptables 链 Pod 网卡 eBPF 钩子
Pod 启动流程 kubelet → CNI → 网络命名空间配置 kubelet → CNI → Cilium Agent → eBPF 注入
关键认知: Cilium 的 CNI 二进制文件(cilium-cni)本身非常轻量,它只负责与 Cilium Agent 通信,真正的网络与策略配置由 Agent 通过 eBPF 系统调用完成。这意味着 Cilium 的网络能力不局限于 CNI 规范,而是扩展到了服务网格、可观测性等更广泛的领域。

3.3 Identity 概念:基于身份的安全模型

Cilium 摒弃了传统的基于 IP 地址的安全策略模型,引入了 Identity(身份) 概念。每个 Kubernetes Pod 或外部端点都会被分配一个 24 位的数字身份标识,该标识基于 Pod 的标签(Labels)计算得出。

  • 身份分配: 当 Pod 启动时,Cilium Agent 根据其标签(如 app=frontend, tier=web)计算 SHA256 哈希,取低 24 位作为 Numeric Identity。
  • 身份与 IP 解耦: 策略规则引用的是 Identity 而非 IP。即使 Pod 被调度到不同节点、IP 发生变化,只要标签不变,Identity 就保持不变,策略无需更新。
  • 全局可见性: 集群中所有 Cilium Agent 通过 Key-Value 存储(etcd 或 Kubernetes CRD)同步 Identity 与标签的映射关系,确保策略一致性。
租户隔离价值: 在租户隔离场景中,可以为每个租户的命名空间或资源池打上唯一的租户标签(如 tenant=alpha)。Cilium 自动为这些 Pod 生成租户级别的 Identity,策略只需针对该 Identity 进行配置,即可实现跨节点、跨集群的租户隔离。

3.4 L3/L4/L7 网络策略基础

Cilium 的网络策略能力远超 Kubernetes 原生 NetworkPolicy。它覆盖了从网络层到应用层的完整策略模型,且全部通过 eBPF 在内核态执行。

3.4.1 L3/L4 层策略(基础网络策略)

L3 层基于 IP 地址或 CIDR 进行访问控制;L4 层基于传输层协议(TCP/UDP/SCTP)和端口。Cilium 的 L3/L4 策略兼容 Kubernetes NetworkPolicy 语义,但性能更高。

apiVersion: "cilium.io/v2"
kind: CiliumNetworkPolicy
metadata:
  name: "l3-l4-policy"
spec:
  endpointSelector:
    matchLabels:
      app: backend
  ingress:
  - fromEndpoints:
    - matchLabels:
        app: frontend
    toPorts:
    - ports:
      - port: "8080"
        protocol: TCP

3.4.2 L7 层策略(应用层策略)

L7 策略允许基于 HTTP 方法、路径、头部、gRPC 服务名、Kafka Topic 等应用层字段进行精细化控制。Cilium 通过代理(Envoy)或原生 eBPF 解析实现 L7 策略。

apiVersion: "cilium.io/v2"
kind: CiliumNetworkPolicy
metadata:
  name: "l7-http-policy"
spec:
  endpointSelector:
    matchLabels:
      app: backend
  ingress:
  - fromEndpoints:
    - matchLabels:
        app: frontend
    toPorts:
    - ports:
      - port: "8080"
        protocol: TCP
      rules:
        http:
        - method: "GET"
          path: "/api/v1/orders"
        - method: "POST"
          path: "/api/v1/orders"
          headers:
          - "X-Tenant-Id: alpha"
性能对比: L3/L4 策略完全在 eBPF 内核态执行,延迟增加 < 1µs。L7 策略需要将流量重定向到代理(Envoy),延迟增加约 50-200µs,但提供了应用层可见性和控制力。
Cilium 网络策略分层模型 L7 应用层策略 HTTP 方法/路径/头部 · gRPC 服务 · Kafka Topic · TLS SNI L4 传输层策略 TCP/UDP/SCTP 端口 · 协议类型 · 端口范围 L3 网络层策略 IP/CIDR · 远程节点 · 集群外部端点 执行引擎:eBPF (L3/L4) + Envoy 代理 (L7)

3.5 核心概念关系总结

下表梳理了 eBPF、CNI、Identity 与网络策略之间的依赖与协作关系,帮助建立整体认知。

概念 核心作用 与租户隔离的关联
eBPF 提供内核可编程能力,实现高性能数据平面 确保策略执行无性能瓶颈,支持大规模租户
CNI 触发 Pod 网络创建与 eBPF 程序加载 作为 Kubernetes 与 Cilium 的集成入口
Identity 基于标签的全局唯一身份标识 实现租户级身份抽象,策略与 IP 解耦
L3/L4 策略 基于 IP/端口的网络层访问控制 构建租户间网络隔离的基础屏障
L7 策略 基于应用协议的精细化访问控制 实现租户内 API 级别权限隔离
架构师视角: 在租户隔离蓝图中,Identity 是策略的“主语”,eBPF 是策略的“执行引擎”,CNI 是“集成桥梁”,而 L3/L4/L7 策略则是“隔离规则”。四者缺一不可,共同构成 Cilium 安全模型的完整闭环。