Kubernetes 多租户:命名空间不是完整安全边界

从身份、网络、资源、策略和节点隔离设计 Kubernetes 多租户边界。

文章目录 · 3 节

命名空间提供名称与策略作用域,但默认不会隔离网络、节点、内核或集群级资源。多租户设计应先明确租户之间是否互相信任。

五层边界

  1. 身份:每个租户使用独立 ServiceAccount 和最小 RBAC。
  2. 网络:默认拒绝,再按服务关系放行 NetworkPolicy。
  3. 资源:配置 ResourceQuota、LimitRange 和 PriorityClass。
  4. 准入:限制特权容器、hostPath、hostNetwork 和危险 capabilities。
  5. 运行时:高风险租户使用专用节点、沙箱运行时或独立集群。
kubectl auth can-i --as=system:serviceaccount:team-a:app --list -n team-a
kubectl get resourcequota,limitrange -n team-a
kubectl get networkpolicy -n team-a

防止共享组件越权

Ingress Controller、日志采集器和运维 Operator 常拥有跨命名空间权限,应审计其配置入口和 Secret 访问范围。

选择独立集群的时机

当租户需要自定义控制面、存在合规隔离要求或可能运行不可信代码时,独立集群通常比堆叠策略更清晰。隔离方案要通过越权测试验证,而不是只检查 YAML。