利用 Chaos Mesh 的受限授权功能保障租户命名空间安全
本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

多租户集群由多个用户和/或工作负载(称为"租户")共享。集群运维人员必须隔离各租户,以最小化受损租户或恶意租户对集群及其他租户造成的损害。
集群多租户架构
规划多租户架构时,您应考虑 Kubernetes 中的资源隔离层级:集群、命名空间、节点、Pod 和容器。
尽管 Kubernetes 无法保证租户间的绝对安全隔离,但它提供的功能足以满足特定场景需求。您可以将各租户及其 Kubernetes 资源分配到独立的命名空间。Kubernetes 支持在同一个物理集群上运行多个虚拟集群,这些虚拟集群即称为命名空间。命名空间专为多团队/多项目环境中大量用户协同工作的场景设计。
部署 Chaos Mesh 的集群
假设您设计的 Kubernetes 集群需要运行多个租户服务,并遵循了 Kubernetes 最佳安全实践:每个租户服务运行在独立命名空间,用户仅拥有对应命名空间的访问权限等。
您在集群中启用了 Chaos Mesh(Chaos Mesh 是面向 Kubernetes 的云原生混沌工程平台),使租户服务能执行各类混沌实验以确保系统韧性。同时您通过 RBAC 授予租户用户管理 Chaos Mesh 资源的权限。
假设某租户用户需要在自有命名空间(例如 chaos-mesh)执行 Pod 终止操作,并创建了以下 Chaos Mesh YAML 文件:
apiVersion: chaos-mesh.org/v1alpha1
kind: PodChaos
metadata:
name: pod-kill
namespace: chaos-mesh
spec:
action: pod-kill
mode: one
selector:
namespaces:
- tidb-cluster-demo
labelSelectors:
'app.kubernetes.io/component': 'tikv'
scheduler:
cron: '@every 1m'
该用户拥有 chaos-mesh 命名空间的权限,但无权访问 tidb-cluster-demo 命名空间。当用户通过 kubectl 应用该 YAML 时,系统将在 chaos-mesh 命名空间创建 pod-kill 混沌资源。但选择器(selector)指定的目标命名空间为 tidb-cluster-demo,这意味着混沌操作将作用于无权限的 tidb-cluster-demo 命名空间,而非用户有权访问的 chaos-mesh 命名空间。这就导致用户能够越权影响其他命名空间——严重的安全隐患!
自 Chaos Mesh 1.1.3 版本起,该安全问题已通过受限授权功能修复。现在当用户提交上述 YAML 时,系统将返回类似错误提示:
Error when creating "pod/pod-kill.yaml": admission webhook "vauth.kb.io" denied the request: ... is forbidden on namespace
tidb-cluster-demo
问题已解决!
请注意,若用户同时拥有 tidb-cluster-demo 命名空间的权限,则不会触发此错误。
拓展阅读
如需彻底禁止用户跨命名空间创建混沌实验,可参阅我的往期博客:利用 OPA 保障租户服务使用 Chaos Mesh 的安全性。
诚邀参与
如果您对 Chaos Mesh 感兴趣并希望了解更多,欢迎加入 Slack 频道 或提交拉取请求及问题至其 GitHub 仓库。