3. 多租户概念与模型:租户隔离模型、身份标识与资源配额

在多租户 Istio 网格中,租户 是一个逻辑隔离单元,代表一组具有独立权限、资源配额和网络策略的用户或服务集合。本章节将深入剖析 Istio 多租户的核心模型,包括三种隔离粒度、租户身份标识机制以及资源配额管理策略。

3.1 租户隔离模型:命名空间 / 集群 / 网格

Istio 支持三种层次的租户隔离模型,每种模型在隔离性、管理复杂度和资源利用率上各有取舍。下表对比了三种模型的核心差异:

隔离模型 隔离粒度 网络策略范围 控制面共享 典型场景
命名空间级 Kubernetes Namespace Namespace 内 共享 Istiod 开发/测试环境,轻量租户
集群级 Kubernetes Cluster 集群内 独立 Istiod 生产环境,强隔离需求
网格级 Istio Mesh 跨集群 独立控制面 多集群联邦,全球部署
最佳实践: 在签名链路性能调优场景中,推荐使用 命名空间级 隔离作为默认模型,配合细粒度的 AuthorizationPolicy 实现租户间安全隔离,同时保持控制面共享带来的低延迟优势。

下图展示了三种隔离模型的架构对比:

租户隔离模型对比架构 命名空间级隔离 租户A Namespace 租户B Namespace 租户C Namespace 共享 Istiod 集群级隔离 集群1 (租户A) 集群2 (租户B) 集群3 (租户C) 独立 Istiod 网格级隔离 网格1 (租户A) 网格2 (租户B) 网格3 (租户C) 独立控制面

3.2 租户身份标识

租户身份标识是多租户隔离的基础。Istio 通过以下机制实现租户身份的绑定与传递:

  • Kubernetes Namespace 标签: 为每个租户的 Namespace 打上 tenant: <tenant-id> 标签,作为最基础的标识。
  • ServiceAccount 绑定: 每个租户下的服务使用独立的 ServiceAccount,Istio 通过 SPIFFE 标准将 ServiceAccount 映射为身份证书。
  • 自定义请求头: 在入口网关处注入 X-Tenant-ID 请求头,用于在网格内传递租户上下文。
  • JWT 声明: 在 JWT 令牌中嵌入 tenant 声明,实现端到端的身份验证。
身份标识配置示例: 以下 YAML 展示了如何为租户 A 的 Namespace 打标签并绑定 ServiceAccount。
apiVersion: v1
kind: Namespace
metadata:
  name: tenant-a
  labels:
    tenant: "tenant-a"
    istio-injection: enabled
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: sa-tenant-a
  namespace: tenant-a
---
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
  name: strict-mtls
  namespace: tenant-a
spec:
  mtls:
    mode: STRICT
  selector:
    matchLabels:
      tenant: "tenant-a"

3.3 租户资源配额

资源配额确保单个租户不会过度占用网格资源,影响其他租户的服务质量。在多租户签名链路中,需要重点管理以下配额:

资源类型 配额维度 影响范围 推荐配置策略
Envoy 代理内存 Pod 级别 签名延迟 限制 256Mi - 512Mi
Envoy 代理 CPU Pod 级别 签名吞吐量 限制 500m - 1000m
Istiod 连接数 Namespace 级别 控制面稳定性 每租户最大 1000 连接
配置更新频率 Namespace 级别 XDS 推送延迟 每秒最多 10 次更新
服务条目数 Namespace 级别 网格规模 每租户最多 500 个 ServiceEntry

下图展示了租户资源配额管理的流程:

租户资源配额管理流程 租户A 资源请求 配额检查 通过/拒绝 资源分配 监控与审计 配额超限告警
性能调优警告: 在签名链路中,Envoy 代理的内存配额不足会导致频繁的 TLS 握手重试,增加签名延迟。建议为每个租户的 Envoy 代理预留至少 256Mi 内存,并监控实际使用量动态调整。

3.4 隔离模型选择决策树

在实际项目中,选择哪种隔离模型取决于以下因素:

  1. 安全等级要求: 金融、医疗等强合规场景优先选择集群级或网格级隔离。
  2. 运维成本: 命名空间级隔离运维成本最低,适合快速迭代。
  3. 性能敏感度: 签名链路对延迟敏感,共享控制面可减少 XDS 推送延迟。
  4. 资源利用率: 命名空间级隔离资源利用率最高,网格级最低。

下表总结了不同场景下的推荐隔离模型:

场景 推荐模型 理由
开发/测试环境 命名空间级 快速部署,低成本
生产环境(单集群) 命名空间级 + 严格 mTLS 平衡隔离与性能
生产环境(多集群) 集群级 物理隔离,故障域独立
全球多区域部署 网格级 跨集群服务发现与流量管理
关键结论: 多租户隔离模型的选择直接影响签名链路的性能与安全。命名空间级隔离配合细粒度的 AuthorizationPolicy 和 ResourceQuota,是大多数场景下的最优解。集群级和网格级隔离适用于对安全合规有更高要求的场景,但需要接受更高的资源开销和管理复杂度。