2. Kubernetes Namespace 与 RBAC:多租户隔离的基石

在多租户集群中,Namespace 提供逻辑上的资源隔离边界,而 RBAC(基于角色的访问控制) 则定义谁能在这些边界内执行哪些操作。两者结合,构成了 Kubernetes 多租户隔离的第一道防线。

2.1 Namespace:逻辑隔离单元

Namespace 将集群内的资源划分为互不干扰的虚拟分组。每个 Namespace 拥有独立的资源配额、网络策略和权限控制,但底层共享同一个物理集群。

2.1.1 核心隔离能力

隔离维度 实现机制 典型场景
资源配额 ResourceQuota + LimitRange 限制租户 CPU/内存/存储上限
网络隔离 NetworkPolicy(需 CNI 支持) 禁止跨 Namespace 非授权访问
权限隔离 RBAC + RoleBinding 租户管理员只能管理本 Namespace
对象命名 Namespace 作用域 不同租户可创建同名 Service

2.1.2 创建与使用

# 创建 Namespace
kubectl create namespace tenant-alpha

# 在 Namespace 中部署资源
kubectl run nginx --image=nginx -n tenant-alpha

# 查看 Namespace 资源配额
kubectl get resourcequota -n tenant-alpha
最佳实践: 使用 kubens 工具快速切换 Namespace 上下文,避免频繁使用 -n 参数。

2.2 RBAC 权限模型:谁能在 Namespace 内做什么

RBAC 通过四个核心对象定义权限:Subject(谁)、Resource(什么资源)、Verb(什么操作)、Role/ClusterRole(权限集合)。

2.2.1 核心概念对比

对象 作用域 绑定对象 典型用途
Role 单个 Namespace RoleBinding 租户只读、开发者编辑
ClusterRole 整个集群 ClusterRoleBinding / RoleBinding 集群管理员、PV 管理、节点查看
RoleBinding 单个 Namespace 绑定 Role 到 User/Group/SA 授予租户本 Namespace 权限
ClusterRoleBinding 整个集群 绑定 ClusterRole 到 User/Group/SA 授予集群管理员权限

2.2.2 权限绑定流程

  1. 定义 Role:声明对哪些资源拥有哪些操作权限。
  2. 创建 Subject:确定用户、用户组或 ServiceAccount。
  3. 建立绑定:通过 RoleBinding 或 ClusterRoleBinding 将 Role 赋予 Subject。
  4. 验证权限:使用 kubectl auth can-i 检查。
# 1. 创建 Namespace 只读 Role
kubectl create role namespace-reader --verb=get,list,watch --resource=pods,services -n tenant-alpha

# 2. 创建 ServiceAccount
kubectl create serviceaccount tenant-user -n tenant-alpha

# 3. 绑定 Role 到 ServiceAccount
kubectl create rolebinding tenant-reader-binding --role=namespace-reader --serviceaccount=tenant-alpha:tenant-user -n tenant-alpha

# 4. 验证权限
kubectl auth can-i list pods --as=system:serviceaccount:tenant-alpha:tenant-user -n tenant-alpha

2.3 多租户 RBAC 架构设计

生产级多租户集群通常采用 分层 RBAC 模型:集群级 ClusterRole 管理基础设施,Namespace 级 Role 管理租户资源。

多租户 RBAC 分层架构图 多租户 RBAC 分层架构 集群层 ClusterRole / ClusterRoleBinding 集群管理员 · 节点管理 · PV/PVC 全局操作 · 集群监控 Namespace 层 Role / RoleBinding 租户管理员 · 应用开发者 · 只读审计 · 本 Namespace 资源管理 租户 Alpha Role: alpha-admin SA: alpha-sa 租户 Beta Role: beta-developer SA: beta-sa 租户 Gamma Role: gamma-reader SA: gamma-sa 每个租户拥有独立 Namespace,通过 RoleBinding 绑定不同权限级别的 Role

2.4 实战:为租户配置最小权限

遵循 最小权限原则,每个租户只获得完成工作所需的最小权限集。

2.4.1 租户管理员权限模板

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: tenant-alpha
  name: tenant-admin
rules:
- apiGroups: [""]
  resources: ["pods", "services", "configmaps", "secrets", "persistentvolumeclaims"]
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- apiGroups: ["apps"]
  resources: ["deployments", "statefulsets", "daemonsets"]
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- apiGroups: ["autoscaling"]
  resources: ["horizontalpodautoscalers"]
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  namespace: tenant-alpha
  name: tenant-admin-binding
subjects:
- kind: ServiceAccount
  name: alpha-admin-sa
  namespace: tenant-alpha
roleRef:
  kind: Role
  name: tenant-admin
  apiGroup: rbac.authorization.k8s.io

2.4.2 权限粒度对照表

角色 可操作资源 允许的动词 禁止的操作
只读审计 pods, services, events get, list, watch create, update, delete
应用开发者 pods, deployments, configmaps get, list, watch, create, update delete, 修改 ResourceQuota
租户管理员 本 Namespace 全部资源 全部动词 跨 Namespace 操作、集群级资源
集群管理员 集群级资源(nodes, PV, CRD) 全部动词 无(需审计)

2.5 常见陷阱与避坑指南

⚠️ 权限扩散风险: 避免将 ClusterRole 通过 RoleBinding 绑定到非管理员用户。例如,将 cluster-admin ClusterRole 绑定到租户 ServiceAccount,会导致该租户拥有整个集群的管理权限。
  • 陷阱 1: 忘记在 Role 中定义 apiGroups,导致资源匹配失败。例如,Deployment 属于 apps 组,而非核心组。
  • 陷阱 2: 多个 RoleBinding 叠加时,权限取 并集。若一个绑定授予 delete 权限,另一个绑定限制只读,最终用户仍可 delete。
  • 陷阱 3: ServiceAccount 的 泄露。生产环境应使用 短期 或集成 OIDC,避免将长期 硬编码在配置文件中。

2.6 验证与审计

使用以下命令定期审计租户权限配置:

# 查看指定 Namespace 的所有 RoleBinding
kubectl get rolebinding -n tenant-alpha -o wide

# 查看指定用户的有效权限
kubectl auth can-i --list --as=system:serviceaccount:tenant-alpha:alpha-admin-sa -n tenant-alpha

# 使用 kubectl-who-can 插件查看谁有权操作特定资源
kubectl who-can delete pods -n tenant-alpha
RBAC 权限验证流程 RBAC 权限验证流程 用户请求 API Server RBAC 评估器 允许/拒绝 RBAC 评估步骤 1. 提取请求中的 User、Group、Namespace、Resource、Verb 2. 查找匹配的 RoleBinding / ClusterRoleBinding 3. 遍历绑定的 Role / ClusterRole 规则 4. 若任一规则匹配 → 允许;否则 → 拒绝
核心要点: Namespace 提供资源隔离边界,RBAC 提供权限控制边界。两者结合,配合 ResourceQuota 和 NetworkPolicy,可构建生产级多租户隔离方案。始终遵循最小权限原则,定期审计权限配置,避免权限扩散风险。