4. 租户隔离模型设计:基于 VLAN/VXLAN/Geneve 的 Overlay 网络隔离,以及基于 Cilium 的 CNI 实现

在多租户云原生环境中,网络隔离是保障安全与性能的基石。本章深入剖析从传统 VLAN 到现代 VXLAN/Geneve Overlay 网络的演进,并重点阐述如何通过 Cilium 这一高性能 CNI 插件实现细粒度的租户隔离策略。

4.1 Overlay 网络隔离技术演进

租户隔离的核心在于将不同租户的流量在逻辑上或物理上完全分开。下表对比了三种主流 Overlay 封装技术的核心差异:

特性 VLAN (802.1Q) VXLAN Geneve
标准 IEEE 802.1Q RFC 7348 RFC 8926
隔离标识 12-bit VLAN ID (VID) 24-bit VNI (VXLAN Network Identifier) 24-bit VNI (Virtual Network Identifier)
最大租户数 4094 约 1600 万 约 1600 万
封装协议 以太网帧内嵌 Tag MAC-in-UDP (外层 UDP 端口 4789) MAC-in-UDP (外层 UDP 端口 6081)
扩展性 受限于 STP 和 VLAN 数量 通过 IP 网络扩展,支持多播/单播 支持可变长度 TLV 选项,扩展性最强
适用场景 小型数据中心,物理网络隔离 大规模虚拟化/云平台 需要元数据传递的复杂 Overlay 场景
选型建议: 在 Kubernetes 环境中,VXLAN 因其成熟度和广泛的硬件卸载支持成为默认选择。Geneve 则在需要携带额外元数据(如安全策略、租户身份)的场景下更具优势,Cilium 对 Geneve 提供了原生支持。

4.2 基于 Cilium 的 CNI 租户隔离实现

Cilium 利用 eBPF 技术,在 Overlay 网络之上实现了比传统 CNI 更高效、更灵活的租户隔离。其核心机制包括:

  • 基于 Identity 的安全策略: 不再依赖 IP 地址,而是为每个 Pod/租户分配一个 Security Identity,策略基于 Identity 进行匹配,极大简化了大规模集群中的策略管理。
  • Overlay 封装与路由: Cilium 支持 VXLAN 和 Geneve 作为数据平面封装模式,同时支持原生路由(Direct Routing)模式以追求极致性能。
  • 网络策略 (NetworkPolicy) 增强: 在 Kubernetes 原生 NetworkPolicy 基础上,Cilium 提供了 CiliumNetworkPolicy (CNP) 和 CiliumClusterwideNetworkPolicy (CCNP),支持 L7 协议过滤、DNS 策略、以及基于租户标签的隔离。
关键设计原则: 租户隔离模型采用“身份优先,网络为辅”的策略。每个租户被映射为一个或多个 Kubernetes Namespace,并通过标签(如 tenant=alpha)进行标识。Cilium 自动为这些标签生成 Identity,并下发 eBPF 程序到节点,实现无 iptables 性能损耗的包过滤。

以下 SVG 图展示了 Cilium 在 Overlay 网络中实现租户隔离的架构:

Cilium 租户隔离 Overlay 架构图 Cilium 基于 Overlay 的租户隔离架构 租户 A (tenant=alpha) Pod A1 Pod A2 Identity: 1001 VNI: 100 租户 B (tenant=beta) Pod B1 Pod B2 Identity: 2001 VNI: 200 Cilium Agent eBPF 策略引擎 Underlay 物理网络 (VXLAN/Geneve 封装) 封装: VNI 100 (租户A) | VNI 200 (租户B) 源/目的 IP: 节点 IP | UDP 端口: 4789/6081 隔离机制:Cilium 通过 eBPF 在节点上强制执行基于 Identity 的策略,确保跨租户流量被丢弃,除非显式允许。

4.3 租户隔离策略配置示例

以下是一个典型的 CiliumNetworkPolicy 配置,用于实现租户 A 与租户 B 之间的严格隔离:

apiVersion: "cilium.io/v2"
kind: CiliumNetworkPolicy
metadata:
  name: "tenant-alpha-isolation"
  namespace: tenant-alpha
spec:
  endpointSelector:
    matchLabels:
      tenant: alpha
  ingress:
    - fromEndpoints:
        - matchLabels:
            tenant: alpha
  egress:
    - toEndpoints:
        - matchLabels:
            tenant: alpha
    - toEntities:
        - world
注意: 上述策略仅允许同租户(tenant=alpha)内的 Pod 互相通信,并允许访问外部世界(world)。所有来自租户 B 的流量将被 eBPF 程序在节点层面直接丢弃,无需经过任何用户态代理,性能损耗极低。

4.4 流量隔离与可视化集成

在 eBPF 网络观测的背景下,租户隔离不仅仅是策略的强制执行,更是可观测性的基础。Cilium 通过 Hubble 组件,能够实时展示每个租户的流量矩阵:

  • 租户级流量拓扑: Hubble 自动识别 Identity 和 Namespace 标签,生成按租户分组的服务拓扑图。
  • 隔离策略命中统计: 实时显示每条策略的命中次数、允许/拒绝的包数量,帮助运维人员验证隔离效果。
  • 异常流量告警: 当检测到跨租户的未授权连接尝试时,Hubble 可以触发告警,并关联到具体的源/目标 Identity。

以下 SVG 图展示了 Hubble 视角下的租户流量隔离可视化:

Hubble 租户流量隔离可视化 Hubble 租户流量隔离可视化 租户 A 服务 Identity: 1001 允许: 同租户流量 租户 B 服务 Identity: 2001 允许: 同租户流量 策略允许 (同租户) 策略拒绝 (跨租户) Hubble 观测层 实时流量矩阵 | 策略命中统计 | 异常告警 可视化价值:运维人员可以直观地看到哪些流量被允许(绿色虚线),哪些被拒绝(红色虚线), 从而快速验证租户隔离策略是否生效,并定位潜在的配置错误或攻击行为。

4.5 性能考量与最佳实践

在 Overlay 网络与 eBPF 结合的场景下,性能优化至关重要:

  • 封装开销: VXLAN/Geneve 封装会增加 50-70 字节的包头,需确保物理网络 MTU 配置正确(通常设置为 1500,Overlay 网络内 MTU 设置为 1450)。
  • 硬件卸载: 选择支持 VXLAN 或 Geneve 硬件卸载的网卡(如 Mellanox ConnectX-5 及以上),可将封装/解封装操作卸载到网卡,显著降低 CPU 负载。
  • eBPF 直通: Cilium 的 eBPF 数据路径在 XDP 层即可完成策略决策和转发,避免进入内核协议栈的复杂路径,延迟可低至微秒级。
  • Identity 缓存: 大规模集群中,Cilium 使用高效的 BPF Map 缓存 Identity 与策略映射关系,确保策略查找性能不随租户数量增加而下降。
生产环境建议: 对于超大规模多租户集群(>1000 节点),推荐使用 Cilium 的“原生路由 + Geneve”组合模式。原生路由提供最优性能,Geneve 用于携带租户元数据,配合 eBPF 实现无锁策略执行。