1. 多租户隔离概述

1.1 多租户概念

多租户(Multi-Tenancy)是一种软件架构模式,指单个软件实例或基础设施集群同时服务于多个独立用户群体(即“租户”)。在云原生语境下,每个租户通常对应一个团队、一个项目、一个业务线或一个外部客户,租户之间在逻辑上完全隔离,但在物理上共享同一套 Kubernetes 集群资源。

多租户的核心目标是在共享资源的同时,确保每个租户的数据安全、资源公平性和操作独立性。租户不应感知到其他租户的存在,也不应能越权访问或影响其他租户的工作负载。

关键特征: 隔离性(Isolation) > 可管理性(Manageability) > 成本效率(Cost Efficiency)
维度 单租户集群 多租户集群
资源利用率 低(每个集群预留峰值资源) 高(共享池化,超分复用)
运维成本 高(N个集群独立运维) 低(1个集群统一运维)
隔离强度 物理/虚拟机级强隔离 逻辑/策略级软隔离
适用场景 金融核心、强合规要求 Dev/Test、SaaS、内部平台

1.2 Kubernetes 多租户挑战

Kubernetes 原生设计并未内置“租户”概念,其 RBAC、NetworkPolicy、ResourceQuota 等机制虽然提供了隔离基础,但在真实多租户场景中仍面临以下核心挑战:

  1. 命名空间隔离的局限性:命名空间(Namespace)是 Kubernetes 最常用的逻辑隔离边界,但 ClusterRole、ClusterRoleBinding、CustomResourceDefinition(CRD)等集群级资源天然跨命名空间,一个租户的误操作可能影响全局。
  2. 网络策略管理复杂:NetworkPolicy 只能控制 Pod 间流量,无法限制节点端口、HostNetwork 或 Service 外部访问;大规模租户下策略数量激增,维护成本高。
  3. 资源配额与公平调度:ResourceQuota 和 LimitRange 只能按命名空间设置,无法实现跨命名空间的租户级资源池;多个命名空间属于同一租户时,资源分配难以统一管控。
  4. 审计与合规追溯:Kubernetes 审计日志默认记录 API 请求,但缺乏租户维度的聚合视图;当多个租户共享同一集群时,定位“谁在什么时间对哪个资源做了什么操作”变得困难。
  5. Helm 部署的权限扩散:Helm 在安装/升级 Chart 时,Tiller(v2)或 Helm Controller(v3)需要较高的 RBAC 权限;若权限边界不清晰,租户可能通过 Helm 操作越权访问集群级资源。
常见误区: 仅靠命名空间 + RBAC 就认为实现了多租户隔离。实际上,CRD、ValidatingWebhookConfiguration、PriorityClass 等集群级资源仍可能成为租户间的“后门”。
Kubernetes 多租户隔离挑战全景 K8s 集群 租户 A Namespace: team-a RBAC: dev-role Quota: 8C/16G 租户 B Namespace: team-b RBAC: dev-role Quota: 4C/8G 租户 C Namespace: team-c RBAC: dev-role Quota: 2C/4G 命名空间隔离局限 CRD/ClusterRole 越界 网络策略管理复杂 HostNetwork 绕过 资源配额公平调度 跨 NS 资源池缺失 审计合规追溯难 租户维度聚合缺失 ⚠ Helm 权限扩散:Chart 安装可能越权操作集群级资源 Tiller/Helm Controller 高权限 → 租户隔离失效风险

1.3 Helm 在多租户中的角色

Helm 作为 Kubernetes 的包管理器,在多租户环境中扮演着双刃剑的角色:

  • 正面角色:Helm Chart 将一组相关的 Kubernetes 资源(Deployment、Service、ConfigMap、RBAC 等)打包为可重复部署的单元,配合模板引擎和 Values 注入,可以快速为每个租户生成隔离的命名空间和资源配置,极大提升多租户环境下的部署效率。
  • 负面风险:Helm 的安装/升级操作需要较高的 RBAC 权限(尤其是涉及 CRD、ClusterRole、ValidatingWebhookConfiguration 等集群级资源时)。若权限边界未严格约束,租户可能通过 Helm 越权创建或修改集群级对象,导致隔离失效。
最佳实践: 在多租户集群中,Helm 应配合 权限边界模板 使用:每个租户的 Helm 操作仅允许在其所属命名空间内创建资源,禁止操作集群级资源。通过 OPA/Gatekeeper 或 Kyverno 策略引擎,可以在 Admission 阶段拦截越权的 Helm 部署。
Helm 在多租户中的角色与权限边界 Helm ✅ 正面角色 Chart 打包标准化 Values 注入租户配置 快速部署隔离命名空间 ❌ 负面风险 高 RBAC 权限要求 CRD/ClusterRole 越权 隔离边界被突破 解决方案:权限边界模板 + 策略引擎(OPA/Kyverno) 限制 Helm 仅操作租户命名空间内资源,拦截集群级越权

1.4 多租户隔离的层次模型

在实际落地中,多租户隔离通常分为以下四个层次,Helm 在每个层次中都有对应的介入点:

隔离层次 实现手段 Helm 介入点
身份与认证 OIDC、ServiceAccount、kubeconfig 绑定租户标识 Chart 中预置 ServiceAccount 模板,绑定租户 Role
授权与 RBAC Role、RoleBinding、ClusterRole(受限) Helm 模板生成租户级 Role,禁止 ClusterRole 绑定
资源与配额 ResourceQuota、LimitRange、PriorityClass Values 传入租户配额参数,Chart 自动生成 Quota 对象
网络与安全 NetworkPolicy、PodSecurityPolicy(PSP)/ Pod Security Admission Chart 模板生成租户隔离的 NetworkPolicy,限制入站/出站
核心原则: Helm Chart 模板蓝图必须将“租户标识”作为第一类输入参数,所有生成的资源都应携带租户标签(如 tenant: <tenant-id>),以便审计链路进行租户维度的聚合与追溯。