1. 多租户概念与挑战

1.1 什么是多租户

多租户(Multi-Tenancy)是一种软件架构模式,指单个软件实例能够同时为多个独立的“租户”(Tenant)提供服务。每个租户在逻辑上相互隔离,彼此无法感知对方的存在,但共享同一套基础设施、平台或应用实例。

在云原生环境中,租户可以是一个部门、一个项目组、一个外部客户,甚至是一个微服务。多租户的核心目标是资源复用最大化与运营成本最小化,同时保证每个租户的独立性与安全性。

关键特征:
  • 共享性:多个租户共用同一套计算、存储、网络资源池。
  • 隔离性:租户之间的数据、流量、配置互不干扰。
  • 可扩展性:新增租户无需重新部署整套系统。
  • 可计量性:每个租户的资源消耗可被精确追踪与计费。

1.2 多租户在云原生中的核心挑战

云原生架构(Kubernetes、Service Mesh、CNI 插件等)天然支持多租户,但实际落地时面临三大核心挑战:隔离性、安全性、性能争抢。这三者相互关联,任何一项出现短板都会导致整体多租户方案失效。

挑战维度 核心问题 典型风险 云原生影响范围
隔离性 租户间网络、存储、命名空间是否完全隔离 租户 A 误操作导致租户 B 服务中断 K8s Namespace、NetworkPolicy、CNI 插件
安全性 租户间数据泄露、权限越界、流量嗅探 恶意租户通过旁路攻击窃取其他租户数据 RBAC、mTLS、加密隧道、Pod 安全策略
性能争抢 共享资源(带宽、CPU、内存)的公平分配 “吵闹邻居”租户耗尽集群带宽,导致其他租户延迟飙升 CNI 带宽管理、QoS、资源配额(ResourceQuota)
常见误区:很多团队认为只要创建不同的 Kubernetes Namespace 就实现了多租户隔离。实际上,Namespace 仅提供逻辑分组,不提供网络隔离。默认情况下,不同 Namespace 的 Pod 可以互相通信,必须配合 NetworkPolicy 或 CNI 插件才能实现真正的租户隔离。

1.3 多租户隔离模型对比

根据隔离的严格程度,多租户模型可分为三种:

  • 软隔离(Soft Multi-Tenancy):租户共享同一集群,通过 Namespace、RBAC、NetworkPolicy 实现逻辑隔离。成本低,但隔离强度有限,适合内部开发环境。
  • 硬隔离(Hard Multi-Tenancy):每个租户拥有独立的虚拟集群(如 vCluster)或物理节点,网络层面使用 VLAN/VXLAN 或独立 CNI 插件。隔离性强,但资源利用率下降。
  • 混合隔离(Hybrid Multi-Tenancy):关键业务租户使用硬隔离,非关键租户使用软隔离,在成本与安全之间取得平衡。
多租户核心挑战关系图 多租户架构 隔离性 安全性 性能争抢 三者相互影响 隔离不足 → 安全漏洞 → 恶意租户抢占资源 → 性能争抢加剧 性能争抢 → 服务质量下降 → 租户间信任破裂 → 隔离需求升级

1.4 隔离性:从 Namespace 到网络边界

隔离性是多租户的基石。在云原生网络中,隔离性体现在以下层级:

  1. 控制面隔离:租户拥有独立的 RBAC 权限、ServiceAccount、配额管理。
  2. 数据面隔离:租户的 Pod 流量必须经过 NetworkPolicy 或 CNI 策略的过滤。
  3. 网络边界隔离:使用 VPC、VXLAN、IPVLAN 等技术将租户网络划分为独立的 L2/L3 域。
  4. DNS 与服务发现隔离:租户只能发现本租户内的 Service,避免跨租户服务调用。
最佳实践:在 Kubernetes 中,建议为每个租户创建独立的 Namespace,并配合以下策略实现网络隔离:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all
  namespace: tenant-a
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress

1.5 安全性:防止租户间攻击

安全性挑战主要来自以下场景:

  • 数据泄露:Pod 间未加密通信,恶意租户通过抓包获取其他租户敏感数据。
  • 权限越界:RBAC 配置不当,租户 A 的 ServiceAccount 可以读取租户 B 的 Secret。
  • DNS 劫持:租户 A 创建同名 Service,诱导租户 B 的流量错误路由。
  • 资源耗尽攻击:租户 A 创建大量 Pod 或 Service,耗尽集群 IP 池或 DNS 记录数。

应对措施包括:启用 mTLS 加密(如 Istio)、严格 RBAC 绑定、使用 CNI 插件(如 Calico)的租户级安全策略、限制每个租户的 Service 与 Endpoint 数量。

1.6 性能争抢:“吵闹邻居”问题

性能争抢是多租户网络中最棘手的问题。当多个租户共享同一物理网络链路或节点时,一个租户的突发流量会挤占其他租户的带宽,导致延迟抖动和丢包。

争抢资源 影响范围 典型表现 缓解方案
节点带宽 同节点 Pod 间通信 租户 A 大量下载,租户 B 请求超时 CNI 带宽插件(bandwidth)、TC 限速
集群网络带宽 跨节点 Pod 通信 租户 A 大数据任务导致集群网络拥塞 QoS 队列、VLAN 优先级标记
DNS 解析 所有租户共享 CoreDNS 租户 A 高并发 DNS 查询导致其他租户解析延迟 CoreDNS 限流、独立 DNS 实例
API Server 控制面请求 租户 A 频繁 List/Watch 导致 API Server 过载 APF(API Priority and Fairness)
“吵闹邻居”性能争抢示意图 共享集群网络链路(带宽 10Gbps) 租户 A 大数据传输(8Gbps) 租户 B 实时交易(1Gbps) 租户 C 视频会议(1Gbps) 争抢结果:租户 A 占用 80% 带宽 租户 B 和租户 C 的可用带宽被压缩至 1Gbps 以下,出现延迟和丢包 解决方案:为每个租户设置带宽上限(Ingress/Egress Shaping)

1.7 本章小结

多租户是云原生网络拓扑选型的起点。理解隔离性、安全性、性能争抢这三大挑战,是后续章节中对比不同网络方案(Flannel、Calico、Cilium、Kube-OVN 等)的基础。在进入具体选型之前,建议先明确以下问题:

  • 你的租户之间是否需要隔离(如金融级合规)?
  • 你的租户流量模型是否包含突发大数据传输?
  • 你的团队是否有能力维护复杂的网络策略(如 eBPF、IPVS)?