1. K8s 多租户概述

1.1 多租户概念

多租户(Multi-Tenancy)是一种软件架构模式,指单个软件实例能够为多个独立的用户群体(租户)提供服务,同时确保每个租户的数据、配置、资源与操作彼此隔离。在 Kubernetes 语境下,租户通常对应一个团队、一个项目、一个业务线或一个客户,每个租户拥有独立的命名空间、资源配额、网络策略与访问权限。

核心目标:在共享集群资源的前提下,实现租户之间的安全隔离、资源公平调度与运维自治,避免“吵闹邻居”效应与越权访问。

1.2 K8s 原生多租户模型

Kubernetes 本身并未提供“租户”这一原生 API 对象,而是通过以下原语组合构建多租户能力:

原语 隔离维度 说明
Namespace 资源命名空间 逻辑隔离,资源名称在命名空间内唯一
RBAC 访问控制 基于 Role/ClusterRole + Binding 控制用户对资源的操作权限
NetworkPolicy 网络隔离 基于标签选择器控制 Pod 间、命名空间间的流量
ResourceQuota 资源配额 限制命名空间内 CPU、内存、存储、对象数量的上限
LimitRange 资源默认/限制 为命名空间内 Pod/Container 设置默认资源请求与限制
PodSecurityPolicy / PSA 安全上下文 控制 Pod 的安全敏感属性(特权、Capabilities、SELinux 等)

这些原语共同构成了 K8s 的软多租户模型——租户之间通过命名空间隔离,但共享同一个控制平面与节点池。对于需要更强隔离的场景(如金融、医疗),通常需要引入硬多租户方案,例如虚拟节点(Virtual Kubelet)、多集群联邦或安全容器(Kata Containers)。

K8s 原生多租户模型架构 Kubernetes 集群(共享控制平面 + 节点池) 租户 A(Namespace: team-a) RBAC Role NetworkPolicy ResourceQuota LimitRange Pod A1 Pod A2 ConfigMap Secret 租户 B(Namespace: team-b) RBAC Role NetworkPolicy ResourceQuota LimitRange Pod B1 Pod B2 ConfigMap Secret 共享控制平面(API Server / Scheduler / Controller Manager)

1.3 多租户隔离的挑战与目标

核心挑战

  1. 安全隔离不足:共享内核的容器(如 runc)存在逃逸风险;RBAC 配置不当可能导致跨命名空间越权。
  2. 资源竞争与吵闹邻居:未设置 ResourceQuota 或 LimitRange 时,一个租户的突发流量可能耗尽节点资源,影响其他租户。
  3. 网络与数据泄露:默认情况下 Pod 间网络互通,未配置 NetworkPolicy 时租户间可互相访问。
  4. 运维复杂度:租户数量增长后,RBAC 规则、网络策略、配额管理的维护成本呈指数级上升。
  5. 审计与合规:多租户场景下需要记录每个租户的操作行为,但原生 K8s 审计日志缺乏租户维度的聚合视图。

隔离目标

隔离维度 目标描述 K8s 实现手段
身份与访问 租户只能操作自己的资源 RBAC + ServiceAccount + OIDC 集成
网络 租户间默认不可达,仅允许显式开放 NetworkPolicy + CNI 插件(Calico/Cilium)
计算与存储 租户资源配额独立,互不抢占 ResourceQuota + LimitRange + PriorityClass
数据 租户数据(ConfigMap/Secret/PVC)不可跨命名空间访问 命名空间隔离 + RBAC + 加密存储
安全上下文 限制特权容器、主机路径挂载等危险操作 Pod Security Admission (PSA) / OPA Gatekeeper
审计与可观测 每个租户的操作可追溯、可计量 审计日志 + 标签聚合 + 租户级监控
关键原则:多租户隔离不是“全有或全无”的二元选择,而是一个分层决策。团队应根据合规要求、威胁模型与运维成本,在软隔离(命名空间 + RBAC + NetworkPolicy)与硬隔离(多集群 / 安全容器 / 虚拟节点)之间选择适当的隔离级别。
多租户隔离挑战与目标映射 隔离挑战 1. 容器逃逸风险 2. 吵闹邻居效应 3. 网络互通默认 4. 运维复杂度高 5. 审计聚合困难 隔离目标 A. 身份与访问隔离 B. 计算与存储隔离 C. 网络隔离 D. 自动化与策略即代码 E. 审计与可观测性 K8s 实现手段 RBAC + OIDC ResourceQuota + PSA NetworkPolicy + Cilium OPA / Kyverno 审计日志 + 标签
常见误区:不要认为创建了多个 Namespace 就等于实现了多租户隔离。缺少 RBAC 约束、NetworkPolicy 默认放行、未设置 ResourceQuota 的 Namespace 本质上只是“逻辑分组”,无法阻止租户间的越权访问与资源抢占。真正的多租户隔离需要组合使用上述所有原语,并配合持续的策略审计。