FEATURED · 精选文章

KubeSphere 多租户架构解析:三级 RBAC、资源隔离与跨集群工作空间实战

发布时间 / 2026/9/14 1:34:36
来源 / 创域科博编辑部
栏目 / 资讯中心
KubeSphere 多租户架构解析:三级 RBAC、资源隔离与跨集群工作空间实战 KubeSphere 多租户架构解析三级 RBAC、资源隔离与跨集群工作空间实战【免费下载链接】kubesphereThe container platform tailored for Kubernetes multi-cloud, datacenter, and edge management ⎈ ☁️项目地址: https://gitcode.com/GitHub_Trending/ku/kubesphereKubeSphere 在原生 Kubernetes 之上构建了一套完整的多租户管理体系以「工作空间Workspace」为最小租户单元通过平台 / 工作空间 / 项目三级 RBAC 与网络隔离策略解决企业级资源共享场景下的权限边界、审计与公平调度问题。本文以 multi-tenancy-in-kubesphere.md 为主体结合仓库内 CRD 定义、控制器源码与 API 封装脚本深入讲解 KubeSphere 多租户的架构原理并给出可落地的用户、工作空间、项目创建与授权实操命令。Kubernetes 多租户面临的挑战Kubernetes 帮助用户编排应用、调度容器显著提升了资源利用率。但相比传统集群运维方式企业和个人在使用 Kubernetes 时会在资源共享与安全方面遇到诸多挑战。多租户Multi-tenancy是一种常见的软件架构多租户环境中的资源由多个用户即「租户」共享同时各租户的数据相互隔离。多租户 Kubernetes 集群的管理员必须做到两件事最小化受损或恶意租户对其他租户造成的破坏确保资源被公平分配。关于多租户应该如何结构化Kubernetes 社区从未停止过讨论也没有统一的标准答案。但无论企业多租户系统如何构建都离不开两个基本组成部分逻辑资源隔离与物理资源隔离。逻辑隔离API 访问控制与租户级权限从逻辑层面看资源隔离主要指API 访问控制和基于租户的权限控制。Kubernetes 的 RBACRole-Based Access Control与命名空间Namespace提供了逻辑隔离能力然而它们在大多数企业环境中并不直接适用——企业中的租户往往需要跨多个命名空间甚至跨多个集群管理资源。此外多租户体系还必须能够基于租户的行为提供审计日志与事件查询能力。物理隔离节点、网络与容器运行时安全物理资源的隔离包括节点Node和网络Network同时也涉及容器运行时安全。例如创建NetworkPolicy资源控制流量走向使用PodSecurityPolicy对象约束容器行为通过 Kata Containers 等更安全的容器运行时提供额外的隔离边界。KubeSphere 中的多租户以工作空间为最小租户单元为解决上述问题KubeSphere 提供了一套基于 Kubernetes 的多租户管理解决方案。其核心架构如下图所示在 KubeSphere 中工作空间Workspace是最小的租户单元。工作空间允许用户在多个集群与项目之间共享资源工作空间成员可以在被授权的集群中创建项目并邀请其他成员在同一个项目中协作。用户UserKubeSphere 账户的实例。用户可以被任命为平台管理员来管理集群也可以被添加到工作空间中参与项目协作。多级访问控制与资源配额限制它们是 KubeSphere 资源隔离的基石决定了多租户架构如何构建与管理。从仓库中的 CRD 定义可以印证这一模型workspacetemplates.tenant.kubesphere.io 是集群级scope: Cluster自定义资源其spec.template.spec.manager指定工作空间管理员spec.placement.clusters声明该工作空间将被放置到哪些集群——这正是「工作空间可跨集群共享资源」的底层实现载体而 workspaces.tenant.kubesphere.io 则代表被同步到各个成员集群中的工作空间实例。WorkspaceTemplate 控制器跨集群同步的引擎工作空间「一个模板、多处落地」的能力由 workspacetemplate_controller.go 实现。从源码结构看该控制器承担了四项核心职责初始化内置工作空间角色initWorkspaceRoles会读取带scope.iam.kubesphere.io/workspace标签的BuiltinRole模板在工作空间中创建对应的内置WorkspaceRole源码见 workspacetemplate_controller.go。角色名称采用workspace-role格式超长时用 FNV 哈希截断ensureWorkspaceRoleName。为管理员创建角色绑定initManagerRoleBinding将spec.template.spec.manager指定的用户绑定到该工作空间的admin角色workspacetemplate_controller.go。跨集群同步multiClusterSync遍历所有就绪集群将 WorkspaceTemplate 渲染出的 Workspace 同步到匹配的目标集群未匹配则删除workspacetemplate_controller.go。级联删除删除 WorkspaceTemplate 时通过 finalizer 级联清理各成员集群中的 WorkspaceworkspaceTemplateCascadingDeletion。控制器还监听Cluster资源的状态变化ClusterStatusChangedPredicate一旦集群就绪即触发对应工作空间模板的重新同步保证跨集群一致性。三级访问控制平台 / 工作空间 / 项目与 Kubernetes 类似KubeSphere 使用RBAC管理授予用户的权限从而在逻辑上实现资源隔离。KubeSphere 的访问控制分为平台、工作空间、项目三个层级通过「角色Role」控制用户在不同层级对不同资源拥有什么权限。平台角色Platform Roles控制平台用户对平台资源如集群、工作空间、平台成员的权限工作空间角色Workspace Roles控制工作空间成员对工作空间资源如项目即命名空间以及 DevOps 项目的权限项目角色Project Roles控制项目成员对项目资源如工作负载、流水线的权限。仓库中以iam.kubesphere.ioAPI 组下的 CRD 完整承载了这套模型可在 config/ks-core/charts/ks-crds/crds 中查看层级CRD角色示例内置平台globalroles.iam.kubesphere.io、globalrolebindings.iam.kubesphere.ioplatform-admin全部权限、platform-regular受限访问、platform-self-provisioner可创建工作空间工作空间workspaceroles.iam.kubesphere.io、workspacerolebindings.iam.kubesphere.ioworkspace-admin、workspace-regular、workspace-self-provisioner、workspace-viewer项目roles.iam.kubesphere.io、rolebindings.iam.kubesphere.ioadmin全量管理、operator增删改不可管理角色、viewer只读内置角色的实际定义存放在 config/ks-core/charts/ks-core/templates/builtinroles.yaml 与 config/ks-core/charts/ks-core/templates/globalroles.yaml 中而 iam.kubesphere.io_users.yaml 定义的User是集群级资源其spec含email、password由 mutating admission webhook 加密、displayName、lang、groups等字段status记录state与lastLoginTime——平台级角色正是通过metadata.annotations[iam.kubesphere.io/globalrole]注解绑定到用户上的。用户密码策略来自 CRD 校验iam.kubesphere.io_users.yaml 中对password字段的校验规则非常值得关注长度8 ~ 64 位minLength: 8, maxLength: 64组成必须同时包含小写字母、大写字母与数字实现细节Go 正则不支持 JavaScript 的(?)零宽断言因此 CRD 用 6 个正则枚举「小写字母、大写字母、数字」首次出现的 6 种排列组合来等价实现同一校验效果同时兼容已加密的 bcrypt 字符串^(\$2[ayb]\$.{56})$。这意味着创建用户时密码必须同时满足大小写字母与数字混合、长度 8~64 的要求否则 API 会返回 400。网络隔离工作空间与项目级策略除了逻辑上的资源隔离KubeSphere 还允许为工作空间和项目设置网络隔离策略。这一能力沉淀在 tenant.kubesphere.io_workspaces.yaml 中Workspace的spec早期版本v1alpha1明确包含networkIsolation布尔类型字段用于声明是否对该工作空间启用网络隔离。在实际集群中工作空间/项目粒度的网络隔离最终通过生成对应的NetworkPolicy资源来管控命名空间间的流量从而在多租户环境中隔离租户网络边界。多租户管理实战用户、工作空间与项目仓库中的多租户管理 Skill 提供了一整套基于 KubeSphere IAM API 的实操流程配套脚本为 ks_api.py它封装了 OAuth 登录、token 缓存与 API 调用支持 GET / POST / PUT 等方法。以下命令默认连接到http://ks-apiserver.kubesphere-system可通过环境变量KUBESPHERE_HOST覆盖。前置准备登录获取 Token# 安装依赖 pip install requests # 设置端点可选默认 http://ks-apiserver.kubesphere-system export KUBESPHERE_HOSThttp://kubesphere-host # 登录获取 token会自动缓存到 ~/.kubesphere_token 并自动刷新 python ks_api.py --login --username admin --password your-password # 可选清除缓存的 token python ks_api.py --clear-cache创建用户python ks_api.py POST /kapis/iam.kubesphere.io/v1beta1/users { apiVersion: iam.kubesphere.io/v1beta1, kind: User, metadata: { annotations: { iam.kubesphere.io/uninitialized: true, iam.kubesphere.io/globalrole: platform-regular, kubesphere.io/creator: admin }, name: username }, spec: { email: email, password: password } }要点平台角色通过iam.kubesphere.io/globalrole注解指定默认platform-regular最小权限原则不要默认给platform-adminiam.kubesphere.io/uninitialized: true标记用户尚未完成初始化控制器会随后处理密码需满足上文 CRD 中描述的强度策略。创建工作空间python ks_api.py POST /kapis/tenant.kubesphere.io/v1beta1/workspacetemplates { apiVersion: iam.kubesphere.io/v1beta1, kind: WorkspaceTemplate, metadata: { name: workspace-name, annotations: { kubesphere.io/creator: creator } }, spec: { template: { spec: { manager: manager }, metadata: { annotations: { kubesphere.io/creator: creator } } }, placement: { clusters: [ {name: cluster-name} ] } } }要点metadata.name→ 工作空间名称spec.template.spec.manager→ 工作空间管理员默认取当前登录用户spec.placement.clusters→ 承载该工作空间的集群列表该对象与 CRD workspacetemplates.tenant.kubesphere.io 完全对应控制器会将工作空间同步到每个目标集群并自动初始化内置角色、绑定管理员如需指定「跨集群」只需在placement.clusters中列出多个集群即可实现同一工作空间在不同集群共享资源。在工作空间内创建项目项目本质上是带 KubeSphere 标签的 Kubernetes 命名空间python ks_api.py POST /clusters/cluster-name/kapis/tenant.kubesphere.io/v1beta1/workspaces/workspace-name/namespaces { apiVersion: v1, kind: Namespace, metadata: { labels: { kubesphere.io/workspace: workspace-name, kubesphere.io/managed: true }, name: project-name, annotations: { kubesphere.io/creator: creator } }, cluster: cluster-name }要点kubesphere.io/workspace标签将命名空间归属到指定工作空间这是「项目」与「工作空间」关联的实现机制kubesphere.io/managed: true标记该项目由 KubeSphere 管理。邀请用户加入工作空间 / 项目工作空间级邀请默认角色workspace-name-regularpython ks_api.py POST /kapis/iam.kubesphere.io/v1beta1/workspaces/workspace-name/workspacemembers [{username:username,roleRef:workspace-name-regular}]项目级邀请默认角色viewerpython ks_api.py POST /clusters/cluster-name/kapis/iam.kubesphere.io/v1beta1/namespaces/project-name/namespacemembers [{username:username,roleRef:viewer}]修改用户权限修改平台角色时需要先 GET 用户拿到完整 metadata再 PUT 更新iam.kubesphere.io/globalrole注解# 步骤 1获取当前用户信息 python ks_api.py GET /kapis/iam.kubesphere.io/v1beta1/users/username # 步骤 2更新平台角色注解 python ks_api.py PUT /kapis/iam.kubesphere.io/v1beta1/users/username { apiVersion: iam.kubesphere.io/v1beta1, kind: User, metadata: { name: username, annotations: { iam.kubesphere.io/globalrole: new-global-role } } }修改工作空间角色与项目角色# 工作空间角色 python ks_api.py PUT /kapis/iam.kubesphere.io/v1beta1/workspaces/workspace-name/workspacemembers/username {username:username,roleRef:workspace-name-role} # 项目角色 python ks_api.py PUT /clusters/cluster-name/kapis/iam.kubesphere.io/v1beta1/namespaces/project-name/namespacemembers/username {username:username,roleRef:role}查询多租户资源# 列出工作空间 python ks_api.py GET /kapis/tenant.kubesphere.io/v1beta1/workspacetemplates # 列出用户 python ks_api.py GET /kapis/iam.kubesphere.io/v1beta1/users # 列出工作空间成员 python ks_api.py GET /kapis/iam.kubesphere.io/v1beta1/workspaces/workspace-name/workspacemembers # 列出项目成员 python ks_api.py GET /clusters/cluster-name/kapis/iam.kubesphere.io/v1beta1/namespaces/project-name/namespacemembers # 列出工作空间内的项目 python ks_api.py GET /clusters/cluster-name/kapis/tenant.kubesphere.io/v1beta1/workspaces/workspace-name/namespaces # 获取用户详情 python ks_api.py GET /kapis/iam.kubesphere.io/v1beta1/users/username常见错误排查错误码原因解决办法401 UnauthorizedToken 过期清除缓存后重新登录python ks_api.py --clear-cache python ks_api.py --login --username admin --password password403 Forbidden无权限使用 admin 账号操作409 Conflict资源已存在更换名称404 Not Found资源不存在核对名称 / 工作空间 / 集群是否正确400 Bad Request参数不合法检查错误信息邮箱格式、密码策略、命名规则连接拒绝 / 超时API 不可达核对KUBESPHERE_HOST是否正确调试小技巧--quiet参数可以输出更简洁的结果如python ks_api.py GET /users --quiet直接运行python ks_api.py可查看当前缓存的 token 状态。最佳实践与安全边界基于 Skill 的约束与仓库实现多租户管理应遵循以下原则最小权限原则新建用户默认platform-regular邀请到工作空间默认workspace-name-regular邀请到项目默认viewer仅在明确要求时才提升权限优先使用内置角色不要自行创建自定义 Role / WorkspaceRole / GlobalRole自定义权限请通过 KubeSphere 控制台审批流程配置敏感操作走控制台删除用户、工作空间、项目、角色或角色绑定等敏感操作不应通过 API 直接执行而应经 KubeSphere 控制台配合审批流程完成审计与事件多租户体系必须具备面向隔离租户的审计日志与事件查询能力三级角色绑定关系globalrolebindings、workspacerolebindings、rolebindings会随用户与角色的变更被控制器持续调和。小结KubeSphere 的多租户方案以工作空间为最小租户单元向上对接平台级的集群与全局资源管理向下承接跨集群、跨命名空间的项目协作通过平台 / 工作空间 / 项目三级 RBAC实现逻辑隔离通过NetworkPolicy 与网络隔离策略实现网络层隔离并通过 workspacetemplate 控制器 将工作空间模板自动同步到多个成员集群。结合本文给出的 CRD 字段说明与 API 实操命令你可以快速在企业集群中落地「用户 → 工作空间 → 项目」的完整租户管理体系。【免费下载链接】kubesphereThe container platform tailored for Kubernetes multi-cloud, datacenter, and edge management ⎈ ☁️项目地址: https://gitcode.com/GitHub_Trending/ku/kubesphere创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻