2. Kubernetes多租户基础概念:Namespace隔离、RBAC、NetworkPolicy、ResourceQuota、LimitRange在多租户场景下的作用
在Kubernetes多租户集群中,隔离与资源管控是两大核心挑战。Kubernetes原生提供了五个关键组件来构建多租户基础:Namespace、RBAC、NetworkPolicy、ResourceQuota 和 LimitRange。它们分别从逻辑边界、权限、网络、资源总量和单个容器资源约束五个维度实现租户隔离。
核心观点:多租户隔离不是单一机制能完成的,而是Namespace(边界)+ RBAC(身份与权限)+ NetworkPolicy(网络隔离)+ ResourceQuota(总量限制)+ LimitRange(单体约束)的组合策略。缺少任何一个,隔离都可能出现漏洞。
2.1 五维隔离模型总览
下表清晰展示了每个组件在多租户场景中的隔离维度、作用对象和典型场景:
| 组件 | 隔离维度 | 作用对象 | 多租户典型场景 |
|---|---|---|---|
| Namespace | 逻辑边界 | 资源分组 | 每个租户一个独立Namespace,资源名称天然隔离 |
| RBAC | 身份与权限 | 用户/ServiceAccount | 租户管理员只能管理自己的Namespace,不能跨租户操作 |
| NetworkPolicy | 网络流量 | Pod间通信 | 禁止租户A的Pod访问租户B的Pod,默认拒绝所有跨Namespace流量 |
| ResourceQuota | 资源总量 | Namespace级别 | 限制每个租户最多使用10个Pod、20个Service、8核CPU、16Gi内存 |
| LimitRange | 单体资源约束 | Pod/Container | 强制每个容器必须设置requests/limits,防止单个Pod耗尽租户配额 |
2.2 五组件协同工作流(SVG架构图)
下图展示了在多租户集群中,五个组件如何分层协作,共同构建一个完整的隔离与管控体系:
2.3 各组件深度解析
2.3.1 Namespace:多租户的逻辑边界
Namespace 是 Kubernetes 多租户的第一道防线。每个租户拥有独立的 Namespace,资源名称(如 Pod、Service、ConfigMap)在各自 Namespace 内唯一,跨 Namespace 不可见。
- 资源隔离:同名 Service 可以在不同 Namespace 共存,互不干扰。
- DNS 隔离:跨 Namespace 访问需使用
<service>.<namespace>.svc.cluster.local全限定域名。 - 管理边界:kubectl 操作默认限定在当前 Namespace,避免误操作影响其他租户。
2.3.2 RBAC:细粒度的权限控制
RBAC(基于角色的访问控制)确保租户只能访问自己的 Namespace。核心概念包括:
- Role / ClusterRole:定义一组权限规则(如 get pods、create deployments)。
- RoleBinding / ClusterRoleBinding:将 Role 绑定到用户、组或 ServiceAccount。
- 多租户最佳实践:为每个租户创建独立的 ServiceAccount,绑定仅限该 Namespace 的 Role。
关键配置示例: 为租户A创建只读角色
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: tenant-a
name: tenant-a-reader
rules:
- apiGroups: [""]
resources: ["pods", "services", "configmaps"]
verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
namespace: tenant-a
name: tenant-a-reader-binding
subjects:
- kind: User
name: "user-tenant-a"
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: tenant-a-reader
apiGroup: rbac.authorization.k8s.io
2.3.3 NetworkPolicy:网络层面的强制隔离
在多租户场景中,默认允许所有流量是巨大的安全风险。NetworkPolicy 通过标签选择器和 CIDR 规则,实现 Pod 级别的网络访问控制。
- 默认拒绝策略:先创建一条拒绝所有入站/出站流量的策略,再按需放行。
- 跨 Namespace 控制:使用
namespaceSelector精确控制哪些 Namespace 可以通信。 - Cilium 增强:Cilium 支持基于 DNS、HTTP 方法、Kafka 主题等 L7 协议的 NetworkPolicy,实现更精细的租户网络隔离。
常见陷阱: 仅创建 NetworkPolicy 是不够的,必须确保集群网络插件(如 Cilium、Calico)支持 NetworkPolicy。此外,默认策略应设置为 Deny All,否则未匹配策略的 Pod 仍可自由通信。
2.3.4 ResourceQuota:防止租户资源滥用
ResourceQuota 限制一个 Namespace 内资源总量,防止单个租户耗尽集群资源。可限制的资源包括:
- 计算资源:requests.cpu、requests.memory、limits.cpu、limits.memory。
- 存储资源:requests.storage、persistentvolumeclaims。
- 对象数量:pods、services、configmaps、secrets、replicationcontrollers 等。
典型配置: 限制租户A最多使用 4 核 CPU、8Gi 内存、10 个 Pod
apiVersion: v1
kind: ResourceQuota
metadata:
name: tenant-a-quota
namespace: tenant-a
spec:
hard:
requests.cpu: "4"
requests.memory: "8Gi"
limits.cpu: "8"
limits.memory: "16Gi"
pods: "10"
services: "5"
persistentvolumeclaims: "3"
2.3.5 LimitRange:单体容器的资源约束
ResourceQuota 控制总量,但无法阻止单个 Pod 申请过大的资源。LimitRange 为 Namespace 内的每个容器设置默认 requests/limits 和最小/最大约束。
- 默认值:如果 Pod 未设置 requests/limits,自动注入默认值。
- 边界约束:强制每个容器的 CPU 请求在 100m~2 之间,内存请求在 128Mi~4Gi 之间。
- 比例约束:限制 limits/requests 的比例(如 maxLimitRequestRatio),防止过度超卖。
典型配置: 强制每个容器设置 requests 和 limits,且 limits 不超过 requests 的 2 倍
apiVersion: v1
kind: LimitRange
metadata:
name: tenant-a-limits
namespace: tenant-a
spec:
limits:
- max:
cpu: "2"
memory: "4Gi"
min:
cpu: "100m"
memory: "128Mi"
default:
cpu: "500m"
memory: "512Mi"
defaultRequest:
cpu: "200m"
memory: "256Mi"
maxLimitRequestRatio:
cpu: "2"
2.4 五组件协同实战流程(SVG流程图)
下图展示了在多租户集群中,从租户创建到 Pod 启动的完整隔离检查流程:
2.5 多租户隔离最佳实践清单
| 维度 | 最佳实践 | 避坑指南 |
|---|---|---|
| Namespace | 每个租户使用独立 Namespace,命名规范如 tenant-{id} |
不要将敏感资源(如 Secret)放在 default Namespace |
| RBAC | 使用 ServiceAccount 而非用户账号,最小权限原则 | 避免使用 cluster-admin 角色绑定到租户 |
| NetworkPolicy | 先创建默认拒绝策略,再按需放行 | 不要依赖默认允许策略,必须显式定义 |
| ResourceQuota | 设置合理的 CPU/内存/对象数量上限 | 不要只限制 CPU 而忽略内存和存储 |
| LimitRange | 强制设置 requests 和 limits,防止资源争抢 | 不要设置过大的 max 值,避免单个 Pod 撑爆配额 |
进阶提示: 在 Cilium 环境下,NetworkPolicy 可以结合 CiliumNetworkPolicy 实现 L7 协议过滤(如 HTTP 路径、gRPC 方法、Kafka 主题),为多租户提供更精细的网络隔离。后续章节将深入讲解 Cilium 网络策略的调优实战。