4. 租户隔离策略:命名空间隔离、RBAC权限隔离、资源配额(ResourceQuota)、网络策略(NetworkPolicy)

在控制平面升级过程中,租户隔离是保障多团队或多业务线互不干扰的核心机制。Kubernetes 原生提供了四层隔离策略:命名空间(Namespace)作为逻辑边界,RBAC 控制操作权限,ResourceQuota 限制资源消耗,NetworkPolicy 管控网络流量。四者协同构成“逻辑边界 → 操作权限 → 资源上限 → 网络隔离”的纵深防御体系。

4.1 四层隔离策略概述

下表对比了四种隔离策略的作用域、核心对象与性能影响点:

策略类型 作用域 核心 API 对象 控制平面性能影响
命名空间隔离 集群级逻辑分区 Namespace 低(仅元数据存储)
RBAC 权限隔离 命名空间 / 集群 Role, ClusterRole, RoleBinding, ClusterRoleBinding 中(鉴权缓存命中率关键)
资源配额 命名空间 ResourceQuota, LimitRange 中(准入控制器拦截)
网络策略 命名空间 / Pod NetworkPolicy 高(CNI 插件规则同步)
性能调优提示: 在控制平面升级期间,RBAC 鉴权与 NetworkPolicy 规则同步是两大性能瓶颈点。建议在升级前预热 RBAC 缓存,并评估 CNI 插件的策略更新延迟。

4.2 命名空间隔离:逻辑边界与资源分组

命名空间是 Kubernetes 租户隔离的基础单元。每个命名空间拥有独立的资源视图,但默认情况下 Pod 之间可以跨命名空间通信。命名空间本身不提供安全隔离,仅作为资源分组和配额绑定的逻辑边界。

# 创建命名空间并绑定资源配额
apiVersion: v1
kind: Namespace
metadata:
  name: tenant-alpha
---
apiVersion: v1
kind: ResourceQuota
metadata:
  name: alpha-quota
  namespace: tenant-alpha
spec:
  hard:
    requests.cpu: "4"
    requests.memory: "8Gi"
    limits.cpu: "8"
    limits.memory: "16Gi"
    persistentvolumeclaims: "5"
    pods: "20"
升级注意: 命名空间删除操作会级联删除其下所有资源。在控制平面升级期间,应避免执行命名空间级别的批量删除,防止 etcd 瞬时写入压力过大。

4.3 RBAC 权限隔离:最小权限原则

RBAC 通过 Role/ClusterRole 定义权限集合,再通过 RoleBinding/ClusterRoleBinding 将权限授予用户或 ServiceAccount。在控制平面升级场景中,RBAC 鉴权请求量会显著上升,因为升级工具(如 kubeadm、Cluster API)需要频繁校验操作权限。

RBAC 性能调优的关键指标:

  • 鉴权缓存命中率:kube-apiserver 内置 RBAC 缓存,默认每 5 秒同步一次。升级期间建议将 --authorization-webhook-cache-authorized-ttl 适当调大(如 30s),减少重复鉴权。
  • RoleBinding 数量:每个命名空间超过 100 个 RoleBinding 会导致鉴权延迟增加。建议使用聚合 ClusterRole 减少绑定数量。
  • SubjectAccessReview 并发:升级工具可能发起大量 SubjectAccessReview 请求,需监控 apiserver 的 --max-mutating-requests-inflight 参数。
# 聚合 ClusterRole 示例:减少 RoleBinding 数量
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: tenant-admin-aggregate
aggregationRule:
  clusterRoleSelectors:
    - matchLabels:
        rbac.example.com/aggregate-to-tenant-admin: "true"
rules: []  # 规则由子 ClusterRole 提供

4.4 资源配额(ResourceQuota):硬性资源边界

ResourceQuota 在准入控制器阶段拦截资源创建请求,确保命名空间内的资源消耗不超过预设上限。在控制平面升级期间,ResourceQuota 的评估逻辑会占用 apiserver 的 CPU 时间,尤其是当配额对象数量多且更新频繁时。

性能调优建议:

  • 合并配额对象:每个命名空间只创建一个 ResourceQuota,而非按资源类型拆分多个。
  • 避免频繁更新:升级期间不要动态调整配额值,减少准入控制器的重新计算。
  • 监控配额评估延迟:通过 apiserver 指标 apiserver_admission_controller_admission_duration_seconds 观察 ResourceQuota 插件的耗时。
最佳实践: 在升级前使用 kubectl describe quota -A 检查所有命名空间的配额使用率,将接近上限的命名空间提前扩容,避免升级过程中因配额不足导致关键组件启动失败。

4.5 网络策略(NetworkPolicy):细粒度流量控制

NetworkPolicy 通过标签选择器定义 Pod 之间的入站和出站规则。与前三层隔离不同,网络策略的执行不在 apiserver 层面,而是由 CNI 插件(如 Calico、Cilium、Antrea)在数据平面实现。控制平面升级时,CNI 控制器需要重新同步所有 NetworkPolicy 规则,这一过程可能造成网络中断或延迟。

网络策略性能影响分析:

CNI 插件 策略同步方式 升级期间风险 推荐优化
Calico Felix 监听 apiserver 策略更新延迟 5-30s 启用 Typha 减少 apiserver 连接数
Cilium KVStore 或 CRD 模式 CRD 模式下 etcd 压力大 升级前切换为 KVStore 模式
Antrea Agent 监听 apiserver 大规模集群策略同步慢 调整 resync 间隔为 60s
# 网络策略示例:隔离 tenant-alpha 命名空间
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-ingress
  namespace: tenant-alpha
spec:
  podSelector: {}
  policyTypes:
    - Ingress
  ingress: []  # 拒绝所有入站流量
升级风险提示: 如果 CNI 插件在升级期间重启,所有 NetworkPolicy 规则会重新下发。对于大规模集群(>500 节点),建议在升级前将 CNI 组件的 --sync-period 调整为 120s,避免同步风暴。

4.6 四层隔离协同架构

下图展示了四层隔离策略在控制平面与数据平面的协同关系:

四层租户隔离协同架构 控制平面(kube-apiserver + etcd) 命名空间隔离 RBAC 权限隔离 资源配额 数据平面(CNI 插件 + kubelet) 网络策略(NetworkPolicy) 租户 A(tenant-alpha) 命名空间: tenant-alpha CPU 配额: 4 核 / 内存: 8Gi 网络策略: 拒绝所有入站 RBAC: 只读 + deploy 权限 租户 B(tenant-beta) 命名空间: tenant-beta CPU 配额: 8 核 / 内存: 16Gi 网络策略: 仅允许 80 端口 RBAC: 管理员权限 四层隔离从控制平面到数据平面逐层递进,共同保障租户资源与安全边界

4.7 升级期间隔离策略的调优清单

在控制平面升级前,建议按以下清单检查并优化租户隔离配置:

  1. 命名空间清理:删除不再使用的命名空间,减少 etcd 存储压力。
  2. RBAC 缓存预热:通过 kubectl auth can-i 模拟关键操作,触发鉴权缓存填充。
  3. ResourceQuota 检查:确保所有命名空间配额使用率低于 80%,预留升级缓冲。
  4. NetworkPolicy 评估:统计每个命名空间的策略数量,超过 50 条的建议合并或简化。
  5. CNI 插件配置:调整策略同步间隔,避免升级期间全量重同步。
  6. 监控指标采集:重点关注 apiserver_request_duration_seconds 和 etcd_request_duration_seconds。
升级验证命令:
kubectl get namespace --show-labels — 检查命名空间标签
kubectl describe quota -A — 查看所有配额使用情况
kubectl get networkpolicy -A — 统计网络策略数量
kubectl get rolebinding,clusterrolebinding -A | wc -l — 评估 RBAC 绑定规模