3、多租户模型:SaaS vs PaaS vs 内部平台,租户隔离的三种粒度(集群、命名空间、账户)
多租户(Multi-Tenancy)是平台工程中隔离策略的核心。不同平台形态(SaaS、PaaS、内部平台)对租户的定义和隔离要求截然不同。本章从平台类型出发,剖析三种主流隔离粒度:集群级、命名空间级和账户级,并给出选型建议。
3.1 三种平台形态的租户模型对比
在开始讨论隔离粒度之前,需要先明确平台形态决定了“谁是租户”。下表总结了 SaaS、PaaS 和内部平台在租户定义、控制面和数据面归属上的关键差异:
| 维度 | SaaS 平台 | PaaS 平台 | 内部平台(IDP) |
|---|---|---|---|
| 典型租户 | 外部客户(企业/个人) | 外部开发者/应用团队 | 内部业务线/产品团队 |
| 控制面归属 | 平台提供商完全管控 | 平台提供商管控,租户有部分自服务 | 平台工程团队管控,租户高度自治 |
| 数据面隔离要求 | 严格隔离(合规/数据安全) | 中等隔离(性能干扰控制) | 灵活隔离(成本与效率平衡) |
| 网络策略复杂度 | 高(跨 VPC/专线) | 中(CNI 网络策略) | 中低(扁平化或服务网格) |
| 典型隔离粒度 | 集群级 / 账户级 | 命名空间级 / 集群级 | 命名空间级 / 账户级 |
关键认知: 内部平台(IDP)的租户通常是“内部团队”,隔离策略更注重资源配额和网络策略的灵活性,而非物理级安全边界。SaaS 平台则必须考虑数据合规和租户间零信任。
3.2 三种隔离粒度详解
无论平台形态如何,Kubernetes 生态下的租户隔离最终落地到三种粒度:集群(Cluster)、命名空间(Namespace)和账户(Account/Project)。下面逐一分析其适用场景、优缺点和网络拓扑特征。
3.2.1 集群级隔离
每个租户独占一个 Kubernetes 集群。这是最彻底的隔离方式,租户之间没有共享控制面或数据面。
- 适用场景:SaaS 平台的高合规客户、金融级数据隔离、需要独立 Kubernetes 版本或节点配置的租户。
- 网络拓扑:每个集群拥有独立的 VPC/子网、独立 CNI 插件、独立 API Server。租户间网络完全不通,通过外部网关或专线互联。
- 优点:故障域完全隔离;租户可自定义集群级组件(如 Ingress Controller、监控栈)。
- 缺点:资源碎片化严重;管理成本高(升级、监控、备份成倍增加);跨集群服务调用延迟增加。
3.2.2 命名空间级隔离
多个租户共享同一个集群,通过 Kubernetes Namespace 进行逻辑隔离。这是 PaaS 和内部平台最常用的模式。
- 适用场景:内部开发环境、PaaS 平台的多租户应用托管、IDP 中不同产品线的资源划分。
- 网络拓扑:所有 Pod 在同一集群内,通过 NetworkPolicy 控制东西向流量。通常配合服务网格(如 Istio)实现租户间 mTLS 和细粒度鉴权。
- 优点:资源利用率高;管理成本低;服务间调用延迟低(同集群通信)。
- 缺点:控制面共享(API Server 成为潜在瓶颈);租户间“吵闹邻居”问题(CPU/内存争抢);NetworkPolicy 规则数量随租户增长呈指数级上升。
3.2.3 账户级隔离
账户级隔离通常指云厂商的 Project/Account 概念(如 AWS Account、GCP Project、阿里云主账号),每个账户下可以包含一个或多个集群。在 IDP 场景中,账户级隔离也指“租户工作空间(Workspace)”。
- 适用场景:大型 SaaS 平台的多区域部署、IDP 中需要独立计费和审计的部门、跨云或多集群联邦场景。
- 网络拓扑:每个账户拥有独立的网络边界(如 VPC 对等、Transit Gateway)。账户间通过云厂商 IAM 和网络 ACL 实现隔离。账户内部可以再使用命名空间做二次划分。
- 优点:天然支持资源配额和账单拆分;IAM 权限模型成熟;适合多集群联邦管理。
- 缺点:跨账户服务调用需要额外的网络配置(如 PrivateLink 或 VPN);账户创建和回收流程较重;不适合小团队快速迭代。
3.3 隔离粒度选型矩阵
下表从 6 个关键维度对比三种粒度,帮助你在设计 IDP 网络拓扑时做出决策:
| 评估维度 | 集群级 | 命名空间级 | 账户级 |
|---|---|---|---|
| 隔离强度 | ★★★★★(物理级) | ★★★☆☆(逻辑级) | ★★★★☆(网络级) |
| 资源利用率 | 低(碎片化) | 高(共享调度) | 中(账户间碎片) |
| 运维复杂度 | 高(多集群管理) | 低(单集群运维) | 中(账户生命周期) |
| 网络延迟 | 中(跨集群调用) | 低(同集群通信) | 中(跨账户转发) |
| 安全合规 | 满足最高合规 | 依赖 NetworkPolicy | 满足中等合规 |
| 成本(管理+资源) | 高 | 低 | 中 |
实践建议: 内部平台(IDP)优先选择“命名空间级 + 账户级”混合模式。默认使用命名空间隔离开发/测试环境,对核心生产租户或合规敏感租户单独分配账户。避免一开始就采用全集群级隔离,除非有明确的合规或性能隔离硬性要求。
3.4 三种粒度的网络拓扑对比图
下图从网络视角展示三种隔离粒度的核心差异,包括控制面、数据面和东西向流量的路径:
3.5 混合隔离策略:IDP 推荐模式
在实际的 IDP 建设中,很少只使用单一隔离粒度。推荐采用分层混合策略:
- 第一层:账户级(租户工作空间)——每个业务线或产品组分配一个独立的云账户或 IDP 工作空间。实现资源配额、账单拆分和 IAM 权限的天然隔离。
- 第二层:集群级(环境划分)——在每个账户内,按环境(dev/staging/prod)创建独立集群。生产环境集群使用更强的网络隔离(如独立 VPC 和节点组)。
- 第三层:命名空间级(应用隔离)——在每个集群内,按应用或微服务划分命名空间。通过 NetworkPolicy 和 Istio AuthorizationPolicy 实现细粒度访问控制。
常见陷阱: 不要试图用命名空间级隔离来满足合规审计要求。如果租户需要独立的审计日志、独立的密钥管理或独立的合规认证,必须使用集群级或账户级隔离。命名空间级隔离无法阻止“集群管理员”级别的越权操作。
3.6 网络策略与隔离粒度的映射
不同的隔离粒度决定了网络策略的实现方式。下表总结了每种粒度下推荐的网络策略工具和配置模式:
| 隔离粒度 | 网络策略工具 | 策略作用范围 | 典型配置示例 |
|---|---|---|---|
| 集群级 | VPC ACL / 安全组 / 云防火墙 | 集群边界(南北向) | 仅允许特定源 IP 访问 API Server;禁止集群间 Pod CIDR 互通 |
| 命名空间级 | Kubernetes NetworkPolicy + 服务网格(Istio) | 命名空间边界(东西向) | 默认拒绝所有入站流量;仅允许同命名空间内 Pod 通信;通过 Istio PeerAuthentication 启用 mTLS |
| 账户级 | 云 IAM + Transit Gateway 路由表 + PrivateLink | 账户边界(跨账户) | 仅允许特定账户的 VPC 通过 Transit Gateway 路由;使用 PrivateLink 暴露服务 |
3.7 模板版本隔离与租户粒度的关系
在 IDP 中,模板版本隔离策略必须与租户粒度对齐。例如:
- 集群级租户:每个租户使用独立的模板版本(如 Terraform 模块版本、Helm Chart 版本)。模板升级需要逐个集群灰度,回滚也独立。
- 命名空间级租户:所有租户共享同一套模板版本,但通过参数化配置(如 values.yaml 覆盖)实现差异化。模板升级影响所有租户,需要更严格的 CI/CD 门禁。
- 账户级租户:每个账户可以锁定模板版本(通过 GitOps 的 branch/tag 策略)。账户管理员可以自主选择升级时机。
核心结论: 租户隔离粒度越粗(集群级),模板版本管理越独立,但运维成本越高;隔离粒度越细(命名空间级),模板版本管理越集中,但风险也越集中。IDP 平台工程师需要根据组织规模和合规要求,在“独立”与“共享”之间找到平衡点。