3. 多租户架构基础:租户隔离模型、Namespace隔离、RBAC策略、资源配额管理

多租户(Multi-Tenancy)是云原生基础设施的核心能力,尤其在基于 CAPI 的集群快速创建与发布场景中,租户隔离直接决定了平台的安全性、可审计性与资源公平性。本章从隔离模型出发,逐层深入 Kubernetes 原生的 Namespace 隔离、RBAC 策略与资源配额管理,为后续多租户集群的自动化创建奠定理论基础。

3.1 租户隔离模型:从共享到硬隔离

在多租户架构中,租户可以是团队、项目、客户或业务线。根据隔离强度与资源开销,常见的隔离模型分为以下三种:

隔离模型 隔离粒度 资源开销 适用场景
软隔离(Soft Multi-Tenancy) Kubernetes Namespace + RBAC + ResourceQuota 低(共享集群) 开发/测试环境、内部团队协作
硬隔离(Hard Multi-Tenancy) 独立集群 + 虚拟集群(vCluster) 中(每个租户一个控制面) 生产环境、合规敏感业务
混合隔离(Hybrid Multi-Tenancy) CAPI 管理集群 + 租户集群 + Namespace 子隔离 高(管理集群 + 多个工作集群) 大规模 SaaS 平台、多客户托管
实践建议:在 CAPI 多租户场景中,推荐采用混合隔离模型——管理集群负责全局调度与策略下发,每个租户拥有独立的工作集群(CAPI Cluster),工作集群内部再通过 Namespace 做二级隔离。这样既保证了租户间的强隔离,又保留了集群内的资源细分能力。
多租户隔离模型架构图 多租户隔离模型架构图 CAPI 管理集群 租户 A 集群 租户 B 集群 租户 C 集群 Namespace 隔离 ns-dev ns-prod ns-staging ns-ops Namespace 隔离 ns-team1 ns-team2 ns-shared ns-system Namespace 隔离 ns-app1 ns-app2 ns-ci ns-monitor 隔离策略组合 管理集群 → 租户集群(硬隔离) + 租户集群内 Namespace(软隔离) 每个租户集群独立部署 CAPI Cluster,互不感知

3.2 Namespace 隔离:租户的虚拟边界

Namespace 是 Kubernetes 实现软隔离的基础单元。在 CAPI 多租户架构中,每个租户集群内部通过 Namespace 划分不同的工作负载域。Namespace 隔离的核心能力包括:

  • 资源可见性隔离:Pod、Service、ConfigMap、Secret 等资源默认仅在同一 Namespace 内可见。
  • 网络策略隔离:结合 NetworkPolicy,可以控制 Namespace 之间的流量进出。
  • 资源配额隔离:通过 ResourceQuota 限制每个 Namespace 的 CPU、内存、存储等总量。
  • 权限隔离:RBAC 绑定可以精确到 Namespace 级别,实现最小权限原则。
关键设计原则:在 CAPI 多租户平台中,建议为每个租户集群创建以下标准 Namespace 集合:ns-{tenant}-dev、ns-{tenant}-staging、ns-{tenant}-prod、ns-{tenant}-system。命名规范统一,便于自动化工具批量管理。

3.3 RBAC 策略:精细化权限控制

RBAC(Role-Based Access Control)是 Kubernetes 原生的授权机制。在多租户场景中,RBAC 策略需要覆盖三个维度:

维度 对象 典型绑定
集群级别 ClusterRole / ClusterRoleBinding 集群管理员、监控组件、CAPI 控制器
Namespace 级别 Role / RoleBinding 租户开发者(只读/读写)、CI/CD 服务账号
跨 Namespace 级别 ClusterRole + RoleBinding(引用) 日志采集器、服务网格控制面

以下是一个典型的租户开发者 RBAC 配置示例:

# 创建 Namespace 级别的 Role
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: ns-tenant-a-dev
  name: tenant-developer-role
rules:
- apiGroups: [""]
  resources: ["pods", "services", "configmaps", "secrets"]
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- apiGroups: ["apps"]
  resources: ["deployments", "statefulsets", "daemonsets"]
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
---
# 绑定到用户或服务账号
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  namespace: ns-tenant-a-dev
  name: tenant-developer-binding
subjects:
- kind: User
  name: "alice@tenant-a.com"
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: tenant-developer-role
  apiGroup: rbac.authorization.k8s.io
常见陷阱:不要将 ClusterRoleBinding 直接授予租户用户,否则该用户将拥有整个集群的权限,破坏多租户隔离。始终使用 RoleBinding 将权限限定在特定 Namespace 内。对于需要跨 Namespace 访问的场景(如日志查看),应创建专用的 ClusterRole,然后通过 RoleBinding 引用。

3.4 资源配额管理:保障公平与稳定性

ResourceQuota 和 LimitRange 是 Kubernetes 控制资源消耗的两大工具。在多租户集群中,资源配额管理直接关系到租户间的公平性和集群稳定性。

3.4.1 ResourceQuota:总量控制

ResourceQuota 限制一个 Namespace 内所有 Pod 的资源总和上限:

apiVersion: v1
kind: ResourceQuota
metadata:
  name: tenant-quota
  namespace: ns-tenant-a-prod
spec:
  hard:
    requests.cpu: "10"
    requests.memory: "20Gi"
    limits.cpu: "20"
    limits.memory: "40Gi"
    persistentvolumeclaims: "5"
    pods: "50"
    services: "10"
    configmaps: "20"

3.4.2 LimitRange:单个 Pod 约束

LimitRange 确保单个 Pod 或容器不会过度申请资源:

apiVersion: v1
kind: LimitRange
metadata:
  name: tenant-limit-range
  namespace: ns-tenant-a-prod
spec:
  limits:
  - max:
      cpu: "2"
      memory: "4Gi"
    min:
      cpu: "100m"
      memory: "128Mi"
    default:
      cpu: "500m"
      memory: "1Gi"
    defaultRequest:
      cpu: "200m"
      memory: "512Mi"
    type: Container
资源配额管理流程 资源配额管理流程 租户申请资源 ResourceQuota 检查 LimitRange 检查 准入 拒绝并返回错误 配额管理最佳实践 1. 每个 Namespace 必须配置 ResourceQuota 和 LimitRange 2. 为不同环境(dev/staging/prod)设置不同的配额阈值 3. 定期审计配额使用率,动态调整上限

3.5 多租户隔离策略总结

将 Namespace 隔离、RBAC 策略与资源配额管理三者结合,可以构建一个完整的多租户隔离体系。下表总结了各维度的关键配置项:

隔离维度 Kubernetes 对象 配置要点 检查命令
Namespace 隔离 Namespace 命名规范、标签标注、NetworkPolicy kubectl get ns
权限隔离 Role / RoleBinding 最小权限、按角色分组、定期轮换 kubectl describe rolebinding
资源隔离 ResourceQuota / LimitRange 设置硬限制、默认值、突发上限 kubectl describe quota
网络隔离 NetworkPolicy 默认拒绝、白名单模式、标签选择器 kubectl describe netpol
自动化集成:在 CAPI 多租户平台中,建议将上述隔离策略封装为 Helm Chart 或 OPA/Gatekeeper 策略模板。当 CAPI 创建新租户集群时,自动执行策略部署脚本,确保每个新集群从创建之初就具备完整的隔离能力,避免人工配置遗漏。