3. 多租户隔离模型:基于Cluster的硬隔离、基于Namespace的软隔离、基于CiliumNetworkPolicy的微隔离

在多租户 Kubernetes 集群中,隔离模型的选择直接决定了租户之间的安全边界、资源管控粒度以及运维复杂度。Cilium 基于 eBPF 的数据路径为这三种隔离模型提供了统一的实现底座。本章将系统阐述三种隔离模型的设计原理、适用场景与 Cilium 的落地方式。

3.1 三种隔离模型总览

下表从隔离强度、资源边界、网络策略作用域、典型场景四个维度对比三种模型:

隔离模型 隔离强度 资源边界 网络策略作用域 典型场景
Cluster 硬隔离 物理/虚拟集群级 独立集群 集群边界天然阻断 金融核心、合规敏感、完全独立租户
Namespace 软隔离 逻辑命名空间级 共享集群 默认全通,需 NetworkPolicy 加固 开发/测试环境、部门级隔离
CiliumNetworkPolicy 微隔离 Pod/Service 级 共享集群 基于标签的细粒度 L3-L7 策略 零信任、东西向流量管控、多租户混合部署
关键认知:三种模型并非互斥关系。在实际生产环境中,通常以 Cluster 硬隔离作为第一道防线,Namespace 软隔离作为逻辑分区,CiliumNetworkPolicy 微隔离作为精细化访问控制手段,形成纵深防御体系。

3.2 基于 Cluster 的硬隔离

硬隔离是最彻底的隔离方式,每个租户拥有独立的 Kubernetes 集群。集群之间不存在任何网络、存储或 API 层面的共享。

3.2.1 架构特征

  • 完全独立控制面:每个租户拥有独立的 API Server、etcd、Controller Manager。
  • 数据面隔离:节点、CNI、Service Mesh 均为独立部署,无跨集群流量。
  • 管理边界清晰:租户管理员拥有集群 root 权限,可自定义任何资源。

3.2.2 Cilium 在硬隔离中的角色

在 Cluster 硬隔离模式下,Cilium 在每个集群内独立运行。Cilium Agent 仅管理本集群的 eBPF 程序与端点。跨集群通信需通过 Gateway API 或 Service Mesh 的隧道网关实现,Cilium Cluster Mesh 可用于跨集群服务发现,但默认不打通租户边界。

适用建议:当租户需要运行自定义 kubelet 参数、使用 HostNetwork、或存在强合规审计要求时,优先选择 Cluster 硬隔离。代价是资源利用率较低,管理成本随租户数量线性增长。

3.3 基于 Namespace 的软隔离

软隔离在共享集群内通过 Kubernetes Namespace 实现逻辑分区。每个租户拥有独立的 Namespace 集合,但共享同一个控制面和数据面。

3.3.1 隔离边界

  • 资源配额:通过 ResourceQuota 限制每个 Namespace 的 CPU、内存、PVC 数量。
  • RBAC:通过 RoleBinding 限定租户仅能操作本 Namespace 内的资源。
  • 网络策略:默认所有 Pod 互通,需显式创建 NetworkPolicy 进行隔离。

3.3.2 软隔离的局限性

Namespace 软隔离无法阻止以下风险:

  • 恶意 Pod 通过 NodePort 或 HostNetwork 绕过网络策略。
  • 共享节点上的资源争抢(CPU 缓存、网络带宽)。
  • 集群级资源的误操作(如删除 CRD、修改 Webhook)。
注意:仅依赖 Namespace 软隔离无法满足生产级多租户安全要求。必须配合 NetworkPolicy 和 Pod Security Admission 进行加固。

3.4 基于 CiliumNetworkPolicy 的微隔离

微隔离是 Cilium 的核心能力,通过 eBPF 在数据面实现 Pod 级别的 L3-L7 网络策略,无需修改应用代码或引入 Sidecar。

3.4.1 策略模型

CiliumNetworkPolicy 使用 Kubernetes 标签选择器定义流量规则,支持以下维度:

策略维度 描述 示例
身份(Identity) 基于 Pod 标签自动分配安全身份 app=frontend
L3/L4 IP + 端口 / CIDR toPorts: 8080
L7 HTTP 方法、路径、gRPC 方法 http.path: "/api/v1"
DNS 基于域名解析的访问控制 toFQDNs: *.internal

3.4.2 微隔离实现多租户

在共享集群中,通过 CiliumNetworkPolicy 可以实现租户间的零信任隔离:

  • 租户内全通:允许同一租户 Namespace 内的所有 Pod 互通。
  • 租户间默认拒绝:禁止跨 Namespace 的任意流量,除非显式授权。
  • 共享服务授权:允许所有租户访问 DNS、监控、日志等基础设施 Pod。
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
  name: tenant-isolation
  namespace: tenant-a
spec:
  endpointSelector:
    matchLabels:
      tenant: a
  ingress:
    - fromEndpoints:
        - matchLabels:
            tenant: a
  egress:
    - toEndpoints:
        - matchLabels:
            tenant: a
    - toEndpoints:
        - matchLabels:
            io.kubernetes.pod.namespace: kube-system
      toPorts:
        - ports:
            - port: "53"
              protocol: UDP
最佳实践:使用 CiliumClusterwideNetworkPolicy 定义全局默认拒绝策略,再通过 Namespace 级别的 CiliumNetworkPolicy 开放租户内通信。这种分层策略设计可避免策略遗漏。

3.5 三种隔离模型的协同架构

下图展示了三种隔离模型在 Cilium 驱动下的协同工作方式:

三种隔离模型协同架构图 Cilium 多租户隔离模型协同架构 Cluster 硬隔离层 独立集群 A(金融租户) 独立集群 B(合规租户) Namespace 软隔离层(共享集群) ns: tenant-a ResourceQuota + RBAC ns: tenant-b ResourceQuota + RBAC ns: tenant-c ResourceQuota + RBAC CiliumNetworkPolicy 微隔离层 租户内全通 fromEndpoints: tenant=a toEndpoints: tenant=a 租户间默认拒绝 默认 deny 所有 ingress 显式 allow 特定标签 共享服务授权 toFQDNs: *.monitoring toPorts: 53/UDP

3.6 隔离模型选择决策树

在实际项目中,可根据以下条件快速选择隔离模型:

  1. 租户是否需要独立控制面? → 是 → Cluster 硬隔离
  2. 租户数量是否超过 50? → 是 → 考虑 Cluster 硬隔离 + 自动化集群管理
  3. 租户间是否存在互信? → 否 → 必须启用 CiliumNetworkPolicy 微隔离
  4. 是否需要 L7 协议管控? → 是 → 使用 CiliumNetworkPolicy L7 规则
  5. 仅需资源配额和 RBAC? → 是 → Namespace 软隔离 即可满足
生产建议:推荐采用“Cluster 硬隔离 + Namespace 软隔离 + CiliumNetworkPolicy 微隔离”三层叠加模式。例如:金融租户使用独立集群(硬隔离),内部开发团队使用 Namespace 分区(软隔离),关键服务间通过 CiliumNetworkPolicy 实施零信任策略(微隔离)。这种组合既能满足合规要求,又能最大化资源利用率。

3.7 本章小结

  • Cluster 硬隔离提供最强安全边界,适用于高合规、高敏感场景,但资源利用率低。
  • Namespace 软隔离实现逻辑分区,管理成本低,但需配合网络策略弥补安全短板。
  • CiliumNetworkPolicy 微隔离在共享集群中实现 Pod 级零信任,支持 L3-L7 精细化管控。
  • 三种模型可组合使用,形成纵深防御体系,Cilium 的 eBPF 技术为所有模型提供高性能数据面支持。