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 框架,直接在网络数据路径的关键钩子点注入逻辑。
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 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"
3.5 核心概念关系总结
下表梳理了 eBPF、CNI、Identity 与网络策略之间的依赖与协作关系,帮助建立整体认知。
| 概念 | 核心作用 | 与租户隔离的关联 |
|---|---|---|
| eBPF | 提供内核可编程能力,实现高性能数据平面 | 确保策略执行无性能瓶颈,支持大规模租户 |
| CNI | 触发 Pod 网络创建与 eBPF 程序加载 | 作为 Kubernetes 与 Cilium 的集成入口 |
| Identity | 基于标签的全局唯一身份标识 | 实现租户级身份抽象,策略与 IP 解耦 |
| L3/L4 策略 | 基于 IP/端口的网络层访问控制 | 构建租户间网络隔离的基础屏障 |
| L7 策略 | 基于应用协议的精细化访问控制 | 实现租户内 API 级别权限隔离 |