多租户NetPolicy策略配置与性能调优实战 - 第1节

1.1 多租户概念与网络隔离需求

1.1.1 什么是多租户

多租户(Multi-Tenancy)是一种软件架构模式,指单个平台实例同时服务多个独立用户群体(租户),每个租户在逻辑上彼此隔离。在 Kubernetes 环境中,租户通常对应一个团队、一个项目、一个业务线或一个客户。

维度 单租户 多租户
资源归属 所有资源属于同一用户 资源按租户划分,互不干扰
隔离粒度 无隔离需求 网络、存储、计算、身份均需隔离
运维复杂度 低 高,需策略编排与审计
资源利用率 可能闲置 共享基础设施,利用率高

1.1.2 网络隔离的核心需求

多租户场景下,网络隔离是安全基座。不同租户的工作负载必须满足以下要求:

  • 禁止跨租户直接通信:租户 A 的 Pod 默认不能访问租户 B 的 Pod。
  • 允许租户内部自由通信:同一租户内的服务可以互相调用。
  • 支持白名单例外:如共享监控、日志采集、API 网关等基础设施需要跨租户访问。
  • 隔离控制面与数据面:网络策略不影响控制面组件(如 kube-dns、metrics-server)。
实践要点: 网络隔离不应依赖物理网络或 VLAN 硬切分,而应通过 Kubernetes NetworkPolicy 在软件层面实现动态、细粒度的租户边界。

1.2 Kubernetes 网络模型概述

1.2.1 三大基础原则

Kubernetes 网络模型定义了四个关键约束,所有 CNI 插件都必须遵守:

  1. Pod 间无需 NAT 直接通信:每个 Pod 拥有独立 IP,跨 Node 的 Pod 通信不经过地址转换。
  2. Node 与 Pod 间直接通信:节点上的 kubelet 可以直接访问 Pod IP。
  3. Pod 内容器共享网络栈:同一 Pod 内的多个容器通过 localhost 通信,端口不冲突。
  4. Service 抽象层:ClusterIP 实现稳定的虚拟 IP,负载均衡到后端 Pod。

1.2.2 网络策略(NetworkPolicy)的角色

NetworkPolicy 是 Kubernetes 原生的防火墙规则,工作在 L3/L4 层,通过标签选择器定义哪些 Pod 可以互相通信。它不依赖底层 CNI 实现,但需要 CNI 插件(如 Calico、Cilium、Weave)支持。

关键认知: NetworkPolicy 是“白名单”模型——未显式允许的流量默认被拒绝。多租户隔离正是利用这一特性,为每个租户创建独立的隔离策略。

1.3 多租户网络隔离架构图

多租户 Kubernetes 网络隔离架构 多租户 Kubernetes 网络隔离架构 Kubernetes 集群边界 租户 A Pod A1 Pod A2 允许 租户 B Pod B1 Pod B2 阻止 共享基础设施(监控/日志/网关) 允许流量 阻止流量 共享服务

1.4 多租户网络策略设计模式

1.4.1 基于 Namespace 的租户隔离

最常用的多租户模式是将每个租户映射到一个独立的 Namespace。通过 NetworkPolicy 实现以下规则:

  • 默认拒绝所有入站流量:防止外部 Pod 访问。
  • 允许同 Namespace 内所有 Pod 通信:保证租户内部服务发现正常。
  • 显式允许基础设施 Namespace 的入站:如 monitoring、ingress-nginx。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: tenant-isolation
  namespace: tenant-a
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          kubernetes.io/metadata.name: tenant-a
  - from:
    - namespaceSelector:
        matchLabels:
          kubernetes.io/metadata.name: infrastructure

1.4.2 基于标签的细粒度隔离

当租户内部需要进一步划分(如开发环境 vs 生产环境),可以使用 Pod 标签实现更精细的控制:

  • 环境隔离:只允许相同环境标签的 Pod 通信。
  • 分层隔离:前端 Pod 只能访问后端 Pod,不能直接访问数据库。
性能注意事项: 每个 Namespace 中 NetworkPolicy 对象数量建议控制在 50 个以内。过多的策略规则会导致 CNI 插件 iptables 或 eBPF 规则膨胀,增加数据路径延迟。在 1000+ Pod 规模的集群中,策略匹配延迟可能从微秒级上升到毫秒级。

1.5 多租户网络模型对比

模型 隔离粒度 策略复杂度 性能影响 适用场景
Namespace 级隔离 粗粒度(整个 Namespace) 低 极小 团队/项目隔离
标签级隔离 细粒度(Pod 标签) 中 低 环境/分层隔离
IP 级隔离 最细粒度(单个 Pod IP) 高 中 安全合规要求严格
Service Mesh 隔离 L7 应用层 高 中高 微服务多租户

1.6 多租户网络策略设计原则

  1. 最小权限原则:默认拒绝所有流量,仅显式放行必要通信。
  2. 策略分层:基础设施层 → 租户层 → 应用层,逐层细化。
  3. 可审计性:所有策略变更通过 GitOps 或策略引擎记录。
  4. 性能优先:优先使用 Namespace 选择器,避免大量 Pod 选择器规则。
  5. 避免策略冲突:同一 Pod 被多个 NetworkPolicy 选中时,规则取并集,需提前规划策略层级。
本章小结: 多租户网络隔离的核心是“默认拒绝 + 显式放行”。Kubernetes NetworkPolicy 提供了声明式、可扩展的隔离能力,但需要结合 Namespace 设计、标签体系和 CNI 插件特性才能在生产环境中达到性能与安全的平衡。下一章将深入 NetworkPolicy 的语法与匹配规则。