1. 多租户隔离概述

1.1 多租户概念

多租户(Multi-Tenancy)是一种软件架构模式,指单个软件实例能够同时服务多个独立用户群体(即“租户”),并为每个租户提供逻辑或物理上的隔离环境。在 Kubernetes 语境下,租户通常对应一个团队、一个项目、一个业务线或一个客户。

核心目标:在共享集群资源的前提下,确保租户之间互不感知、互不干扰,同时满足安全性、资源公平性和运维可管理性。

多租户隔离的三大维度:

隔离维度 说明 Kubernetes 实现手段
身份与访问隔离 租户只能访问自己的资源,不能越权操作其他租户的资源 RBAC、ServiceAccount、Namespace 级别的 RoleBinding
网络隔离 租户之间的 Pod 默认不能互相通信,或仅允许特定策略下的通信 NetworkPolicy、CNI 插件(Calico/Cilium)
资源配额隔离 每个租户的资源使用上限受控,防止“吵闹邻居”耗尽集群资源 ResourceQuota、LimitRange、PriorityClass

1.2 Kubernetes 多租户模型

Kubernetes 社区将多租户模型分为三种成熟度级别,实际生产环境通常混合使用:

  1. 软多租户(Soft Multi-Tenancy):租户共享同一个控制平面,通过 Namespace 和 RBAC 实现逻辑隔离。适用于内部团队、Dev/Test 环境。
  2. 硬多租户(Hard Multi-Tenancy):租户之间使用独立的控制平面或虚拟集群(如 vCluster、Kiosk),甚至使用独立的 Kubernetes 集群。适用于外部客户、生产环境。
  3. 混合多租户:在共享集群基础上,对高安全需求的租户使用节点级隔离(NodeSelector、Taint/Toleration)或 Pod 安全策略(Pod Security Admission)。
实践建议:大多数企业从“软多租户”起步,以 Namespace 作为租户边界,配合 ResourceQuota 和 NetworkPolicy 实现基础隔离。当租户数量超过 50 个或安全合规要求升级时,再考虑引入硬多租户方案。
Kubernetes 多租户模型对比 软多租户 共享控制平面 Namespace 隔离 RBAC + ResourceQuota NetworkPolicy 适用:内部团队 Dev/Test 环境 硬多租户 独立控制平面 虚拟集群 (vCluster) 物理集群隔离 节点级隔离 适用:外部客户 生产环境 混合多租户 共享 + 独立混合 Pod Security Admission Taint/Toleration 自定义准入控制器 适用:高安全需求 合规场景

1.3 命名空间隔离原理

Namespace 是 Kubernetes 实现多租户隔离的基石。每个 Namespace 在逻辑上是一个独立的虚拟集群,资源名称在同一个 Namespace 内唯一,跨 Namespace 可以重名。

Namespace 提供的隔离能力:

  • 资源对象隔离:Pod、Service、Deployment、ConfigMap、Secret 等资源默认只属于一个 Namespace,无法跨 Namespace 直接访问。
  • 资源配额隔离:通过 ResourceQuota 对象为每个 Namespace 设置 CPU、内存、存储、对象数量等上限。
  • 权限隔离:RBAC 的 Role 和 RoleBinding 作用域限定在单个 Namespace 内,ClusterRole 和 ClusterRoleBinding 才作用于全局。
  • 网络隔离:配合 NetworkPolicy 可以控制 Namespace 内或跨 Namespace 的 Pod 通信规则。
注意:Namespace 不是完全的安全边界。某些集群范围资源(如 Node、PersistentVolume、ClusterRole)不受 Namespace 限制;Pod 默认可以通过 DNS 跨 Namespace 访问 Service(格式:<service>.<namespace>.svc.cluster.local),需要 NetworkPolicy 显式阻断。
命名空间隔离原理 Kubernetes 集群 Namespace: team-alpha Pod: web-app 10.1.1.1 Pod: api-srv 10.1.1.2 Service: web-svc Service: api-svc ResourceQuota: CPU 4核 / 内存 8Gi NetworkPolicy: 允许内部通信 Namespace: team-beta Pod: frontend 10.2.1.1 Pod: backend 10.2.1.2 Service: front-svc Service: back-svc ResourceQuota: CPU 2核 / 内存 4Gi NetworkPolicy: 拒绝跨 Namespace 入站 逻辑隔离边界

1.4 多租户隔离的常见挑战

在实际生产环境中,多租户隔离并非“创建 Namespace + 设置 ResourceQuota”就能一劳永逸。以下是常见挑战:

挑战 表现 影响
配额冲突 多个租户的 ResourceQuota 总和超过集群容量,或租户间争抢未预留资源 Pod 调度失败、服务质量下降
资源碎片化 每个 Namespace 设置了固定配额,但实际使用率不均,导致集群整体利用率低 资源浪费、扩容成本增加
配额覆盖遗漏 部分 Namespace 未设置 ResourceQuota,导致“无限制”租户占用大量资源 影响其他租户的正常运行
动态扩缩容冲突 HPA 自动扩容时,Pod 数量超过 Namespace 的 ResourceQuota 上限 扩容失败、业务受损