2. 多租户网络基础:多租户架构定义、网络隔离技术对比

2.1 多租户架构定义与核心挑战

多租户(Multi-Tenancy)是一种软件架构模式,其中单个软件实例(或集群)服务于多个独立的用户群体(即“租户”)。在云原生与网络场景下,每个租户通常对应一个客户、一个业务部门或一个项目组,拥有独立的网络策略、资源配额与数据视图。

核心特征:
  • 隔离性(Isolation): 租户间的流量、配置与故障域必须严格隔离,防止“吵闹邻居”效应。
  • 可扩展性(Scalability): 网络架构应支持从数十到数万个租户的线性扩展。
  • 资源配额(Resource Quota): 每个租户的带宽、连接数、IP 地址段等资源需可量化、可限制。
  • 运维透明性(Operational Transparency): 租户应能自主管理其网络策略,而底层物理网络对租户透明。

多租户网络面临的核心瓶颈在于:隔离粒度与转发性能之间的平衡。传统的 VLAN 隔离简单但扩展性差;VxLAN 扩展性强但引入封装开销;网络策略(Network Policy)灵活但依赖控制器与代理。下表从关键维度对比三种主流隔离技术。

2.2 网络隔离技术对比:VLAN vs VxLAN vs 网络策略

对比维度 VLAN (802.1Q) VxLAN (RFC 7348) 网络策略 (Network Policy)
隔离粒度 二层广播域(子网) 二层广播域(虚拟网络) 三层/四层(IP + 端口)
最大租户数 4094(12-bit VLAN ID) 约 1600 万(24-bit VNI) 无理论上限(依赖控制器)
封装开销 4 字节(802.1Q 标签) 50 字节(UDP + VxLAN 头部) 无封装(纯策略匹配)
跨子网/跨DC 需三层路由 原生支持(Overlay over IP) 依赖 CNI 插件实现
运维复杂度 低(传统交换机配置) 中(需 VTEP 配置) 高(需控制器与 Agent)
适用场景 小型数据中心、物理机隔离 大规模虚拟化/容器集群 Kubernetes 原生隔离
选型建议: 在云原生多租户环境中,通常采用“VxLAN + 网络策略”的组合方案:VxLAN 负责二层 Overlay 网络的大规模扩展,网络策略负责细粒度的东西向流量控制。VLAN 仅用于边缘或遗留系统对接。

2.3 多租户网络隔离架构图

下图展示了一个典型的多租户 Overlay 网络架构,其中两个租户(Tenant A 和 Tenant B)共享同一物理网络,但通过 VxLAN 隧道与网络策略实现完全隔离。

多租户 VxLAN + 网络策略隔离架构 多租户 Overlay 网络隔离架构 物理网络层(Underlay) Spine-Leaf 架构 | 10G/25G 链路 | BGP/OSPF 路由 VTEP 节点 A VTEP 节点 B VTEP 节点 C VxLAN 隧道 VxLAN 隧道 租户 A - Pod 1 IP: 10.1.1.2 标签: app=web 租户 A - Pod 2 IP: 10.1.1.3 标签: app=db 租户 B - Pod 3 IP: 10.2.1.2 标签: app=front 租户 B - Pod 4 IP: 10.2.1.3 标签: app=back 网络策略层 策略 A: 允许 app=web → app=db 策略 B: 拒绝所有非租户 A 流量 策略 C: 允许租户 B → 外部 API 租户 A 租户 B VTEP 网络策略 VxLAN 隧道
常见误区: 不要认为 VxLAN 能自动解决所有隔离问题。VxLAN 仅提供二层网络扩展,租户间的访问控制仍需依赖网络策略或 ACL。此外,VxLAN 的 50 字节封装头会降低 MTU,需在物理网络启用 jumbo frame(通常 1600 字节以上)以避免分片。

2.4 网络策略的细粒度隔离模型

在 Kubernetes 等容器编排平台中,NetworkPolicy 是定义租户隔离的标准 API 对象。它基于标签选择器(Label Selector)匹配 Pod,并控制入站(Ingress)与出站(Egress)流量。以下是一个典型的多租户隔离策略示例:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: tenant-a-isolation
  namespace: tenant-a-ns
spec:
  podSelector:
    matchLabels:
      tenant: a
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          tenant: a
    ports:
    - protocol: TCP
      port: 80
    - protocol: TCP
      port: 443
  egress:
  - to:
    - namespaceSelector:
        matchLabels:
          tenant: a
    ports:
    - protocol: TCP
      port: 53
    - protocol: UDP
      port: 53
  - to:
    - ipBlock:
        cidr: 0.0.0.0/0
        except:
        - 10.0.0.0/8
        - 172.16.0.0/12
        - 192.168.0.0/16
策略设计要点:
  • 默认拒绝(Default Deny): 建议为每个租户命名空间创建一条“拒绝所有入站/出站”的基线策略,再显式放行所需流量。
  • 命名空间隔离: 每个租户使用独立命名空间,并通过 namespaceSelector 限制跨命名空间访问。
  • IP 块例外: 出站策略中通常需要放行 DNS(端口 53)和集群 API Server,同时阻止私有 IP 段以防止租户间意外通信。

2.5 隔离技术选型决策树

在实际项目中,选择哪种隔离技术取决于集群规模、运维能力和性能要求。以下决策树可辅助判断:

多租户网络隔离技术选型决策树 多租户网络隔离技术选型决策树 租户数 > 100? 否 是 VLAN + 传统 ACL 适用:物理机/VM 环境 租户数 < 4000,无跨 DC 需求 VxLAN Overlay 适用:容器/虚拟化集群 租户数 > 4000,需跨 DC 扩展 + 网络策略 (K8s)
关键结论:
  • 小规模(租户 < 100): VLAN + ACL 足够,运维简单,性能无损耗。
  • 大规模(租户 > 100): 必须采用 VxLAN Overlay 解决 VLAN 数量限制,并叠加网络策略实现细粒度控制。
  • 混合场景: 边缘节点或遗留系统仍可使用 VLAN,通过 VxLAN 网关桥接至 Overlay 网络。