3. 多租户隔离模型总览:软隔离 vs 硬隔离、共享集群 vs 专用集群、隔离层级
多租户隔离是 Kubernetes 集群架构设计的核心挑战。不同的隔离模型决定了租户之间的信任边界、资源保障程度以及运维复杂度。本章从三个维度系统梳理隔离模型:隔离强度(软隔离 vs 硬隔离)、集群归属(共享集群 vs 专用集群)、隔离层级(网络/计算/存储/身份)。
3.1 软隔离(Namespace-based) vs 硬隔离(Cluster-based)
隔离强度是选择多租户方案的首要决策点。Kubernetes 原生提供基于 Namespace 的逻辑隔离(软隔离),而硬隔离则需要通过独立集群或虚拟化节点实现。
| 对比维度 | 软隔离(Namespace-based) | 硬隔离(Cluster-based) |
|---|---|---|
| 隔离边界 | API 对象级别(RBAC + NetworkPolicy) | 物理/虚拟集群边界 |
| 安全强度 | 共享同一控制平面,存在逃逸风险 | 独立控制平面,强安全边界 |
| 资源保障 | 依赖 ResourceQuota / LimitRange | 独立节点池或整机隔离 |
| 运维成本 | 低,单集群统一管理 | 高,多集群生命周期管理 |
| 适用场景 | 内部团队、开发/测试环境 | 金融级合规、外部客户、敏感数据 |
选型建议: 大多数企业从软隔离起步,当出现合规审计要求、租户间性能干扰严重或安全事件后,再逐步迁移至硬隔离方案。混合模式(软隔离 + 节点级硬隔离)是折中方案。
3.2 共享集群 vs 专用集群
集群归属模型决定了资源池的共享程度。共享集群强调资源利用率,专用集群强调隔离性和可预测性。
- 共享集群(Shared Cluster): 多个租户共用同一集群的控制平面和工作节点。通过 Namespace、RBAC、NetworkPolicy 实现逻辑隔离。资源利用率高,但存在“吵闹邻居”问题和控制平面爆炸半径风险。
- 专用集群(Dedicated Cluster): 每个租户拥有独立的 Kubernetes 集群。控制平面和数据平面完全隔离,安全性和性能可预测性最强。但集群数量随租户线性增长,运维复杂度急剧上升。
- 分区共享集群(Partitioned Shared Cluster): 共享控制平面,但租户绑定到专用节点池(Node Pool)。通过节点亲和性、Taint/Toleration 实现计算资源硬隔离,网络和存储仍可共享。这是软硬隔离的折中方案。
关键指标对比:
| 模型 | 资源利用率 | 隔离强度 | 运维复杂度 | 租户规模上限 |
|---|---|---|---|---|
| 共享集群 | 高(80-90%) | 低 | 低 | 100-200 Namespaces |
| 分区共享集群 | 中(60-75%) | 中 | 中 | 50-100 节点池 |
| 专用集群 | 低(30-50%) | 高 | 高 | 取决于集群管理能力 |
3.3 隔离层级:网络 / 计算 / 存储 / 身份
多租户隔离需要在四个核心层级分别实施策略。每个层级的隔离机制和强度不同,需要组合使用才能构建完整的隔离防线。
3.3.1 网络隔离
- NetworkPolicy: Kubernetes 原生网络隔离,基于标签选择器控制 Pod 间流量。支持入站(Ingress)和出站(Egress)规则。
- CNI 插件级隔离: Calico、Cilium 等 CNI 插件提供更细粒度的网络策略,支持基于身份(ServiceAccount)的隔离、DNS 策略、L7 策略。
- Service Mesh 隔离: Istio/Linkerd 通过 Sidecar 代理实现应用层流量管控,支持 mTLS 加密和细粒度鉴权。
- 节点级网络隔离: 通过 VPC 子网、安全组、节点网络策略实现跨租户网络硬隔离。
3.3.2 计算隔离
- ResourceQuota: 限制 Namespace 级别的 CPU/内存总量,防止单个租户耗尽集群资源。
- LimitRange: 设置 Pod 和容器的默认资源请求/限制,避免未设置资源限制的 Pod 影响其他租户。
- 节点亲和性与 Taint/Toleration: 将租户工作负载绑定到特定节点池,实现计算资源物理隔离。
- RuntimeClass: 通过 gVisor、Kata Containers 等沙箱运行时提供虚拟机级别的安全隔离。
3.3.3 存储隔离
- PVC 命名空间隔离: PersistentVolumeClaim 是命名空间级别的资源,默认只能被同 Namespace 的 Pod 访问。
- StorageClass 限制: 通过 StorageClass 的 allowedTopologies 和 mountOptions 控制存储访问范围。
- CSI 卷级加密: 使用 CSI 驱动提供的卷加密功能,确保不同租户的数据在存储后端不可互读。
- NFS/共享存储隔离: 通过子目录权限、导出策略(export policy)实现租户间存储路径隔离。
3.3.4 身份隔离
- RBAC: 基于 Role/ClusterRole 和 RoleBinding/ClusterRoleBinding 控制用户或 ServiceAccount 对 API 资源的访问权限。
- ServiceAccount 隔离: 每个租户使用独立的 ServiceAccount,配合 Pod 安全策略(PSA/PSS)限制 Pod 行为。
- OIDC 与联邦身份: 集成企业 IdP(如 LDAP、Okta),通过用户组映射到 Kubernetes RBAC 角色。
- 审计日志隔离: 确保审计日志按租户维度归档,满足合规审计要求。
常见误区: 仅依赖 NetworkPolicy 就认为实现了完整隔离。实际上,网络隔离只是第一道防线。如果计算资源配额未设置,一个租户的突发流量仍可能影响其他租户;如果身份隔离不完善,逃逸的 Pod 可能通过 RBAC 漏洞访问其他租户的数据。四层隔离必须协同配置,缺一不可。
3.4 隔离模型组合策略
实际生产环境中,通常根据租户信任等级和业务需求组合使用上述隔离模型。以下是一个典型的分级隔离策略示例:
| 租户等级 | 集群模型 | 隔离强度 | 网络 | 计算 | 存储 | 身份 |
|---|---|---|---|---|---|---|
| 内部开发团队 | 共享集群 | 软隔离 | NetworkPolicy | ResourceQuota | PVC 隔离 | RBAC |
| 内部业务线 | 分区共享集群 | 中隔离 | NetworkPolicy + 节点安全组 | 节点池绑定 + LimitRange | StorageClass 限制 | RBAC + ServiceAccount |
| 外部客户(SaaS) | 专用集群 | 硬隔离 | VPC 隔离 + mTLS | 独立节点池 + RuntimeClass | CSI 加密卷 | OIDC 联邦 + 审计 |
| 金融合规租户 | 专用集群 + 物理机 | 最强隔离 | 物理网络隔离 | 裸金属节点 | 硬件加密存储 | 多因子认证 + 审计 |
实践要点:
- 从共享集群 + 软隔离起步,随着租户数量增长和合规要求提升,逐步引入分区共享和专用集群。
- 网络隔离是基础,计算隔离是保障,存储隔离是底线,身份隔离是入口。四层缺一不可。
- 使用自动化策略引擎(如 OPA/Gatekeeper)确保隔离策略的强制实施和一致性。
- 定期进行隔离有效性测试,包括渗透测试和租户间访问验证。