2. 多租户基础模型:租户定义、资源池划分、隔离边界

多租户(Multi-Tenancy)是云原生平台的核心能力,其本质是一套物理或虚拟化基础设施同时服务于多个独立客户(租户),且每个租户感知不到其他租户的存在。在故障域隔离演练中,理解租户的基础模型是设计演练场景、划定爆炸半径、评估风险的前提。

2.1 租户定义与身份模型

租户是资源分配、计费、安全策略和运维管理的最小逻辑单元。不同平台对租户的抽象粒度不同,常见定义方式如下:

租户类型 典型场景 隔离级别 故障域关联
项目/Project OpenStack、GCP Project 网络、存储、计算全隔离 每个项目可绑定独立可用区
命名空间/Namespace Kubernetes 多租户 软隔离(RBAC + NetworkPolicy) 共享节点池,故障域重叠
账户/Account AWS Account、阿里云主账号 强隔离(独立 VPC、独立账单) 每个账户可独立选择 Region/AZ
组织/Organization 企业级 SaaS 平台 逻辑隔离 + 数据隔离 按组织划分故障域优先级
演练提示: 在故障域隔离演练中,租户定义越粗(如 Account 级),爆炸半径越大,演练前需要更严格的风险评估和回滚预案。建议从 Namespace 级租户开始演练,逐步升级到 Account 级。

2.2 资源池划分策略

资源池划分决定了租户之间的资源竞争关系和故障传播路径。常见的划分模型包括共享池、独享池和混合池三种。

核心原则: 资源池的划分粒度必须与故障域隔离目标对齐。如果两个租户共享同一个物理节点或存储后端,则它们处于同一个故障域内。

2.2.1 计算资源池划分

  • 共享节点池: 多个租户的 Pod/VM 混部在同一组物理节点上。资源利用率高,但故障域重叠严重,一个节点故障可能影响多个租户。
  • 独占节点池: 每个租户绑定独立的节点组(NodeGroup)。故障域完全隔离,但资源碎片化严重,成本较高。
  • 弹性节点池: 基于负载动态调整节点归属,结合了共享和独占的优点,但需要精细的调度策略和故障域感知。

2.2.2 存储资源池划分

存储类型 共享方式 故障域风险 演练关注点
本地盘(Local SSD) 节点级独享 节点故障 = 数据丢失 数据备份与恢复 RTO
分布式存储(Ceph/GlusterFS) 集群级共享 OSD 故障影响所有租户 存储集群故障域划分
云盘(EBS/PV) 租户级独享 单盘故障仅影响单租户 快照与跨 AZ 迁移
对象存储(S3/MinIO) 桶级共享 桶策略错误导致数据泄露 权限隔离与审计

2.2.3 网络资源池划分

网络隔离是多租户故障域隔离中最关键也最容易被忽视的一环。常见的网络隔离模型包括:

  • VPC 级隔离: 每个租户拥有独立的虚拟网络,完全隔离 L2/L3 广播域。故障域最大,但网络管理复杂。
  • 子网级隔离: 同一 VPC 内通过子网划分租户,结合 ACL 和安全组实现隔离。故障域缩小到子网级别。
  • Overlay 网络隔离: 使用 VXLAN/Geneve 封装,租户之间通过隧道隔离。故障域与底层物理网络解耦,但需要 Overlay 控制器的高可用。
  • 服务网格隔离: 在 L7 层通过 mTLS 和 RBAC 实现租户间的服务调用隔离。故障域最小,但依赖 Sidecar 代理的稳定性。
常见误区: 很多团队认为网络策略(NetworkPolicy)配置正确就等于网络隔离完成。实际上,NetworkPolicy 只控制 L3/L4 流量,无法防止 ARP 欺骗、DNS 劫持等 L2 攻击。在故障域演练中,必须验证底层网络隔离的有效性,而不仅仅是策略配置。

2.3 隔离边界:计算/存储/网络

隔离边界是故障域隔离的物理或逻辑分界线。以下 SVG 图展示了典型的多租户隔离边界模型:

多租户隔离边界模型 租户 A 计算隔离 独占节点池 / 安全容器 CPU Pin + 内存限制 cgroup v2 资源隔离 存储隔离 独立 PV / 独立桶 存储池 QoS 限速 加密密钥独立管理 网络隔离 独立 VPC / Overlay 隧道 NetworkPolicy + mTLS 独立 DNS / 独立网关 租户 B 计算隔离 独占节点池 / 安全容器 CPU Pin + 内存限制 cgroup v2 资源隔离 存储隔离 独立 PV / 独立桶 存储池 QoS 限速 加密密钥独立管理 网络隔离 独立 VPC / Overlay 隧道 NetworkPolicy + mTLS 独立 DNS / 独立网关 共享基础设施 物理节点 / 虚拟化层 Kubernetes Node / Hypervisor 共享但可调度隔离 存储集群 / 分布式存储 Ceph / MinIO / NFS 共享但 QoS 隔离 网络基础设施 物理交换机 / 路由器 共享但 VLAN/VXLAN 隔离 控制平面 / API Server 共享但 RBAC 隔离 说明:虚线表示逻辑依赖关系,实际故障域隔离取决于共享基础设施层的故障域划分粒度

2.4 隔离边界的故障域映射

隔离边界与故障域之间存在明确的映射关系。以下表格总结了不同隔离边界对应的故障域特征:

隔离边界 故障域粒度 典型故障场景 爆炸半径 演练验证方法
计算:独占节点池 节点级 节点宕机、内核 Panic 仅影响该租户 模拟节点故障,观察租户 Pod 迁移
计算:共享节点池 节点级 节点宕机、资源争抢 影响所有共享租户 注入 CPU 压力,观察其他租户性能衰减
存储:独立 PV 卷级 PV 损坏、存储节点故障 仅影响该卷挂载的 Pod 模拟 PV 读写故障,验证应用降级
存储:共享存储集群 集群级 OSD 故障、网络分区 影响所有使用该集群的租户 模拟 OSD 离线,观察存储集群自愈
网络:独立 VPC VPC 级 VPC 网关故障、路由表损坏 仅影响该 VPC 内租户 模拟 VPC 网关故障,验证跨 VPC 通信
网络:Overlay 隧道 隧道级 VTEP 故障、隧道封装错误 影响该隧道关联的租户 模拟 VTEP 节点故障,验证 Overlay 切换

2.5 隔离边界的风险控制要点

风险控制黄金法则: 在故障域演练中,隔离边界越靠近共享基础设施层,爆炸半径越大,演练前必须完成以下三项检查:
  1. 依赖关系梳理: 明确每个租户依赖的共享组件清单(如共享存储集群、共享网络网关)。
  2. 熔断机制验证: 确认共享组件是否具备熔断和限流能力,防止一个租户的故障扩散到其他租户。
  3. 回滚预案: 针对共享组件的故障演练,必须准备快速回滚脚本,确保在 5 分钟内恢复服务。

以下 SVG 图展示了隔离边界与故障域之间的映射关系,以及风险控制的关键检查点:

隔离边界 → 故障域映射与风险控制 隔离边界 计算隔离 存储隔离 网络隔离 控制平面隔离 故障域 节点级 / Pod 级 爆炸半径:小 卷级 / 集群级 爆炸半径:中 VPC 级 / 隧道级 爆炸半径:中 API 级 / 集群级 爆炸半径:大 风险控制检查点 ✅ 依赖关系梳理 明确租户依赖的共享组件清单 ✅ 熔断机制验证 确认共享组件具备熔断和限流能力 ✅ 回滚预案 5 分钟内恢复服务的快速回滚脚本 ⚠️ 爆炸半径越大,检查越严格

2.6 租户基础模型的最佳实践

基于以上分析,在多租户故障域隔离演练中,建议遵循以下最佳实践:

  1. 租户定义标准化: 统一使用 tenant_id 作为资源标签,确保所有资源(计算、存储、网络)都能通过标签关联到具体租户。
  2. 资源池分层划分: 按照 Gold/Silver/Bronze 三级 SLA 划分资源池,Gold 租户使用独占节点池 + 独立存储卷 + 独立 VPC,Bronze 租户使用共享池。
  3. 隔离边界文档化: 每个租户的隔离边界必须形成文档,包括计算节点列表、存储卷列表、网络策略列表,并在演练前进行审计。
  4. 故障域感知调度: 使用拓扑分布约束(Topology Spread Constraints)和 Pod 反亲和性,确保同一租户的 Pod 分布在不同的故障域中。
  5. 演练前基线采集: 在演练前采集每个租户的基线指标(CPU 使用率、网络延迟、存储 IOPS),用于演练后的对比分析。
演练案例: 某金融云平台在演练中发现,两个租户虽然使用了不同的 VPC,但共享了同一个物理交换机。当该交换机发生故障时,两个租户同时断网。后续整改中,该平台为 Gold 租户部署了独立 ToR 交换机,实现了真正的网络故障域隔离。