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 平台中的典型实现技术:
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 绑定,实现“模板即隔离策略”的自动化交付。