2、多租户基础:多租户概念、租户(Tenant)与用户(User)的区别、租户隔离的三大维度(网络、计算、数据)

2.1 多租户概念

多租户(Multi-Tenancy)是一种软件架构模式,允许单个软件实例为多个独立的租户提供服务。在平台工程(IDP)语境下,多租户意味着同一套基础设施(Kubernetes 集群、网络平面、存储系统)能够同时承载来自不同业务部门、不同项目甚至不同客户的负载,且彼此在逻辑上完全隔离。

核心目标:在共享资源池(Shared Pool)中实现“逻辑隔离”,达到“租户 A 无法感知租户 B 的存在,更无法访问租户 B 的资源”的效果。

多租户并非简单的“多用户”或“多账号”,它要求平台在控制面(Control Plane)和数据面(Data Plane)同时实施隔离策略。控制面隔离确保租户只能管理自己的资源(如 Namespace、RBAC、配额);数据面隔离确保租户的流量、计算进程、存储数据不会交叉泄露。

2.2 租户(Tenant)与用户(User)的区别

这是平台工程中最容易被混淆的概念。下表从身份、权限、生命周期、隔离粒度四个维度进行对比:

对比维度 租户(Tenant) 用户(User)
身份本质 逻辑组织单元(部门、项目、客户) 自然人身份(IAM 主体)
权限范围 拥有资源池(Namespace、VPC、存储类) 在租户内被授予角色(Admin、Dev、Viewer)
生命周期 长期稳定,随业务创建/销毁 可频繁变动(入职、转岗、离职)
隔离粒度 网络、计算、数据全维度隔离 仅做访问控制(RBAC),不涉及资源隔离
典型示例 电商事业部、AI 实验室、外部客户 A 张三(电商部 Admin)、李四(AI 实验室 Dev)
平台工程最佳实践:租户是资源隔离的边界,用户是权限管理的边界。一个租户可以包含多个用户,一个用户也可以跨多个租户(通过角色映射)。在 IDP 中,模板版本隔离策略通常绑定在租户级别,而非用户级别。

2.3 租户隔离的三大维度

在云原生平台中,租户隔离必须覆盖三个核心维度:网络(Network)、计算(Compute)、数据(Data)。任何一个维度出现隔离漏洞,都可能导致租户间的安全事件。

2.3.1 网络隔离

网络隔离是防止租户间流量串扰的第一道防线。在 Kubernetes 环境中,通常通过以下技术实现:

  • NetworkPolicy:基于标签的 L3/L4 防火墙规则,限制 Pod 之间的入站/出站流量。
  • CNI 插件隔离:Calico、Cilium 等支持租户级 VPC 或子网映射。
  • Service Mesh 隔离:Istio 的 AuthorizationPolicy 实现 L7 流量细粒度控制。
  • 网关隔离:每个租户独立 Ingress Gateway 或 API Gateway 实例。

2.3.2 计算隔离

计算隔离确保租户的工作负载不会抢占或影响其他租户的计算资源。关键手段包括:

  • Namespace 隔离:每个租户独占一个或多个 Namespace,通过 ResourceQuota 限制 CPU/内存总量。
  • RuntimeClass 与节点亲和性:敏感租户可绑定专用节点池(Node Pool),实现物理级隔离。
  • Pod Security Standards (PSS):限制租户 Pod 的安全上下文(privileged、hostNetwork 等)。
  • Sidecar 资源限制:防止 Envoy 等代理组件过度消耗宿主机资源。

2.3.3 数据隔离

数据隔离保护租户的持久化数据不被其他租户读取或篡改。在 IDP 中,数据隔离覆盖以下层面:

  • 存储类(StorageClass)隔离:每个租户使用独立的 StorageClass,后端对应不同的卷(Volume)或文件系统。
  • 数据库实例隔离:高安全场景下,每个租户独占数据库实例或 Schema。
  • 密钥(Secret)隔离:通过 Kubernetes RBAC + 加密存储(如 Sealed Secrets、External Secrets Operator)确保租户密钥不可跨 Namespace 访问。
  • 备份与恢复隔离:租户级备份策略,防止恢复操作影响其他租户数据。
常见误区:仅做 Namespace 隔离不等于完成了计算隔离。如果未设置 ResourceQuota 和 LimitRange,一个租户的异常 Pod 可能耗尽集群所有可用 CPU,导致其他租户的服务降级。同样,仅做 NetworkPolicy 不等于网络隔离完成——如果 CNI 插件不支持租户级子网,Pod IP 仍可能被其他租户扫描。

2.4 三大维度隔离关系图

下图展示了多租户隔离的三大维度及其在 Kubernetes 平台中的典型实现技术:

多租户隔离三大维度 租户(Tenant) 网络隔离 计算隔离 数据隔离 NetworkPolicy / CNI 子网 Service Mesh L7 策略 独立 Ingress / API Gateway Namespace + ResourceQuota 专用节点池 / RuntimeClass Pod Security Standards 独立 StorageClass / 卷 数据库实例 / Schema 隔离 Secret 加密 + RBAC 隔离 隔离策略关键原则 1. 三个维度必须同时实施,缺一不可 2. 控制面隔离 + 数据面隔离需协同配置 3. 模板版本隔离策略应绑定到租户级别

2.5 隔离策略的落地检查清单

在 IDP 中实施多租户隔离时,建议使用以下清单进行逐项验证:

维度 检查项 验证方法
网络 租户间 Pod 是否可互访? 使用 kubectl exec 跨 Namespace curl 测试
网络 租户 Service 是否暴露给其他租户? 检查 Service 类型是否为 ClusterIP 且无跨 Namespace 访问
计算 租户是否设置了 ResourceQuota? kubectl describe quota -n <tenant-ns>
计算 租户 Pod 能否使用 hostNetwork? 检查 PSS 策略是否禁止 privileged 容器
数据 租户 Secret 是否可被其他 Namespace 读取? 使用 kubectl get secret -n <other-ns> 验证 RBAC
数据 租户 PVC 是否可被其他租户挂载? 检查 StorageClass 的 allowVolumeExpansion 和访问模式
平台工程提示:在 IDP 的模板版本隔离策略中,每个模板版本应明确声明其所属租户的隔离需求(例如:是否需要独立节点池、是否需要加密存储)。平台引擎在实例化模板时,根据租户的隔离配置自动生成对应的 NetworkPolicy、ResourceQuota 和 StorageClass 绑定,实现“模板即隔离策略”的自动化交付。