3、租户隔离模型:基于NetworkPolicy的隔离、基于CiliumNetworkPolicy的增强隔离、基于ClusterMesh的跨集群隔离

在 Kubernetes 多租户环境中,网络隔离是保障租户安全的核心能力。Cilium 在原生 Kubernetes NetworkPolicy 基础上,提供了多层级的隔离模型,覆盖单集群内的基础隔离、增强隔离以及跨集群的全局隔离。本章将系统分析这三种隔离模型的实现原理、能力边界及升级影响。

3.1 基于NetworkPolicy的基础隔离

Kubernetes NetworkPolicy 是业界标准的网络隔离原语,通过标签选择器定义 Pod 之间的通信规则。Cilium 完全兼容该标准,并将其翻译为 eBPF 程序直接加载到网络栈中。

核心机制: NetworkPolicy 通过 podSelector、namespaceSelector 和 ipBlock 三种选择器组合,定义入站(ingress)和出站(egress)规则。Cilium 在升级过程中会保持这些规则的语义一致性,但底层实现从 iptables 切换为 eBPF,带来性能提升和延迟降低。
特性 Kubernetes NetworkPolicy Cilium 实现优势
规则匹配粒度 Pod 标签 + Namespace 标签 支持更丰富的标签组合,无性能衰减
默认行为 未定义策略时允许所有流量 同原生行为,但可配置为默认拒绝
性能开销 iptables 规则链遍历,随规则数线性增长 eBPF 哈希表查找,O(1) 时间复杂度
升级影响 规则定义不变,但底层实现切换 零停机迁移,连接跟踪状态保持
升级注意事项: 当从传统 CNI(如 Calico、Flannel)迁移至 Cilium 时,NetworkPolicy 资源定义无需修改。但需注意 Cilium 默认使用 eBPF 的 conntrack 替代 iptables conntrack,建议在升级前验证现有策略的流量匹配是否符合预期。
NetworkPolicy 基础隔离模型 租户A Pod app: frontend 租户B Pod app: backend NetworkPolicy podSelector: app=frontend ingress: from app=backend Cilium eBPF 实现 哈希表查找 O(1) 连接跟踪保持 零停机迁移 说明:NetworkPolicy 规则定义保持不变,Cilium 将其翻译为 eBPF 程序,实现高性能隔离。 升级过程中连接跟踪状态通过 conntrack 迁移机制保持,避免流量中断。

3.2 基于CiliumNetworkPolicy的增强隔离

CiliumNetworkPolicy(CNP)是 Cilium 提供的 CRD 扩展,在原生 NetworkPolicy 基础上增加了大量高级特性,适用于需要精细化控制的租户隔离场景。

关键增强点: CNP 支持 L3/L4/L7 多层策略、基于 HTTP/gRPC 方法的路由控制、DNS 策略、CIDR 规则以及集群内外流量的统一管理。这些能力在升级过程中需要特别注意 CRD 版本兼容性和策略迁移策略。
能力维度 原生 NetworkPolicy CiliumNetworkPolicy
协议层支持 L3/L4(IP+端口) L3/L4/L7(HTTP、gRPC、Kafka 等)
规则匹配条件 标签 + IP 段 标签 + IP 段 + 服务名 + 域名 + HTTP 方法/路径
租户隔离粒度 Pod 级别 Pod + 服务 + API 端点级别
集群外流量 仅 ipBlock 支持 toFQDN(域名)、toCIDR、fromCIDR
审计与日志 无原生支持 集成 Hubble 可观测性,支持策略命中审计
升级风险提示: CiliumNetworkPolicy 的 CRD 版本在升级过程中可能发生变化。例如从 Cilium 1.11 升级到 1.12 时,toFQDN 字段的匹配行为有所调整。建议在升级前使用 cilium policy validate 命令检查现有策略的兼容性,并准备回滚方案。
CiliumNetworkPolicy 增强隔离模型 租户A 前端服务 HTTP GET /api/v1/* app: frontend 租户B 后端服务 HTTP POST /api/v2/order app: backend CiliumNetworkPolicy L3: 允许 app=backend L4: TCP 8080 L7: HTTP GET /api/v1/* DNS: *.internal.svc CIDR: 10.0.0.0/8 Hubble 可观测性 策略命中审计日志 流量可视化 安全事件告警 说明:CNP 支持多层策略组合,租户A仅允许访问租户B的特定API端点(HTTP GET /api/v1/*), 拒绝其他方法(如POST、DELETE)。Hubble 提供策略命中审计,帮助运维人员验证隔离效果。 升级时需注意 CRD 版本兼容性,建议使用 cilium policy validate 预检。

3.3 基于ClusterMesh的跨集群隔离

ClusterMesh 是 Cilium 的跨集群网络方案,允许将多个 Kubernetes 集群组成一个逻辑网络平面,实现跨集群的服务发现和网络策略统一管理。对于多租户场景,ClusterMesh 提供了跨集群的租户隔离能力。

核心价值: ClusterMesh 通过隧道或直接路由模式连接集群,使用统一的身份标识(Security Identity)跨集群传递,确保租户 Pod 在不同集群间通信时仍受相同策略约束。升级过程中需要关注集群间证书轮换、隧道端点更新以及策略同步延迟。
隔离维度 单集群隔离 ClusterMesh 跨集群隔离
身份标识 集群内唯一 Security Identity 全局唯一 Security Identity(跨集群共享)
策略作用域 仅限本集群 Namespace 跨集群 Namespace 统一管理
服务发现 集群内 Service Global Service(跨集群负载均衡)
加密通信 可选(Node-to-Node) 默认 WireGuard/IPsec 跨集群加密
升级影响 重启 Agent 即可 需协调多个集群升级顺序,避免策略空洞
升级最佳实践: ClusterMesh 升级应遵循“先升级控制面,再升级数据面”的原则。建议先升级所有集群的 Cilium Operator,再逐个升级 Agent。升级期间跨集群策略会暂时失效,需提前规划维护窗口。使用 cilium clustermesh status 监控集群间连接状态。
ClusterMesh 跨集群隔离模型 集群A(生产) 租户A Pod identity: 1001 租户B Pod identity: 2001 Cilium Agent + ClusterMesh 组件 集群B(灾备) 租户A Pod identity: 1001 租户C Pod identity: 3001 Cilium Agent + ClusterMesh 组件 全局 CiliumClusterwideNetworkPolicy 允许 identity=1001 跨集群访问 identity=2001 说明:ClusterMesh 使用全局 Security Identity 确保租户A的Pod在集群A和集群B中具有相同身份标识。 全局策略统一管理跨集群访问,租户B的Pod在集群A中只能被租户A访问,租户C的Pod在集群B中不受影响。 升级时需协调集群顺序,使用 cilium clustermesh status 监控连接健康状态。

3.4 三种隔离模型的对比与升级影响总结

下表从多个维度对比三种隔离模型,帮助运维人员根据租户需求选择合适的方案,并评估升级过程中的影响。

对比维度 NetworkPolicy CiliumNetworkPolicy ClusterMesh
适用场景 基础租户隔离,合规要求 精细化安全管控,API 级隔离 多集群灾备、全球部署
策略复杂度 低(仅 L3/L4) 高(L3/L4/L7 + DNS + CIDR) 中(需考虑跨集群身份映射)
性能开销 低(eBPF 加速) 中(L7 解析额外开销) 中(隧道封装开销)
升级影响范围 单集群,Agent 重启 单集群,CRD 版本兼容 多集群,需协调升级顺序
回滚难度 低(策略定义不变) 中(CRD 版本回退需迁移) 高(跨集群状态同步复杂)
推荐升级策略 滚动升级,逐个节点 预检策略兼容性,分批升级 先升级控制面,再数据面,预留窗口
关键升级建议:
  • 对于仅使用 NetworkPolicy 的租户,升级风险最低,但仍需验证 eBPF conntrack 与现有连接跟踪的兼容性。
  • 对于使用 CiliumNetworkPolicy 的租户,务必在升级前执行 cilium policy validate --cluster-network-policy 检查所有 CRD 实例。
  • 对于 ClusterMesh 场景,建议在测试环境模拟跨集群升级流程,验证策略同步延迟不超过 30 秒。
  • 所有升级操作都应配合 Hubble 监控,实时观察策略命中率和流量变化。