Gardener项目中的Project资源详解:多租户管理与权限控制
什么是Gardener Project
在Gardener多租户管理体系中,Project(项目)是一个核心概念,它为不同团队或用户组提供了资源隔离的边界。每个Project对应一个Kubernetes命名空间,其中包含该团队所有的相关资源,如Secret、Shoot集群等。
Project资源结构解析
一个典型的Project资源YAML定义如下:
apiVersion: core.gardener.cloud/v1beta1
kind: Project
metadata:
name: dev
spec:
namespace: garden-dev
description: "开发环境项目"
purpose: "用于产品开发测试"
owner:
apiGroup: rbac.authorization.k8s.io
kind: User
name: john.doe@example.com
members:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: alice.doe@example.com
role: admin
- apiGroup: rbac.authorization.k8s.io
kind: User
name: bob.doe@example.com
role: viewer
关键字段说明:
namespace
:可选字段,指定项目关联的命名空间description
和purpose
:用于描述项目用途的元数据owner
:项目所有者,作为主要联系人members
:项目成员及其角色列表
Project与命名空间的关系
每个Project都会关联一个Kubernetes命名空间,这种关联关系有三种创建方式:
- 自动创建:当不指定
.spec.namespace
时,系统会自动生成命名空间,命名规则为garden-<projectName>-<uid>
- 指定命名空间:通过
.spec.namespace
显式指定 - 接管现有命名空间:通过添加特定标签(
gardener.cloud/role=project
和project.gardener.cloud/name=<projectName>
)可以将现有命名空间纳入Project管理
删除Project时,默认会删除关联的命名空间。如需保留命名空间,管理员可以添加namespace.gardener.cloud/keep-after-project-deletion
注解。
项目角色体系
Gardener Project实现了精细的RBAC权限控制,主要角色包括:
- owner:项目所有者,拥有最高权限(相当于admin+uam+serviceaccountmanager)
- admin:管理员,可以管理项目内大部分资源(对ServiceAccount只有只读权限)
- serviceaccountmanager:专门管理ServiceAccount及其令牌
- uam:用户访问管理,负责成员管理
- viewer:查看者,可以查看除Secret外的所有资源
- extension:xxx:扩展角色,用于插件系统
这些角色通过以下机制实现:
- 系统预定义的ClusterRole提供基础权限
- 项目特定的ClusterRole和RoleBinding实现细粒度控制
- 项目控制器自动维护这些RBAC资源
用户访问管理(UAM)演进
Gardener v1.8引入了UAM角色的重要变更:
- 新创建的项目中,只有owner拥有成员管理权限
- 旧项目会自动迁移,为所有admin成员添加uam角色(向后兼容)
- 可以逐步移除不需要的uam角色
这种设计既保证了现有系统的平滑过渡,又实现了权限的最小化原则。
资源删除的双重确认机制
为防止误删除重要资源,Gardener实现了"四眼原则"(Four-Eyes-Principle):
- 删除Shoot集群需要添加确认注解
confirmation.gardener.cloud/deletion=true
- 可以配置项目要求双重确认(由不同用户执行确认和删除操作)
配置示例:
spec:
dualApprovalForDeletion:
- resource: shoots
selector:
matchLabels: {}
includeServiceAccounts: true
该机制支持:
- 通过标签选择器指定适用范围
- 控制是否包含ServiceAccount操作
- 灵活应对不同安全要求的场景
闲置项目处理
Gardener通过"Stale Projects Reconciler"控制器自动检测并处理闲置项目:
- 长时间未使用的项目会被标记为"stale"
- 在宽限期后仍未被使用的项目会被自动删除
- 这种机制有助于清理资源,提高集群利用率
最佳实践建议
- 项目规划:按团队或环境划分项目边界
- 权限分配:遵循最小权限原则,避免过度授权
- 成员管理:定期审查项目成员和角色
- 资源清理:利用闲置项目机制自动维护
- 重要操作:对生产环境启用双重确认机制
通过合理使用Gardener的Project功能,可以实现高效、安全的多租户Kubernetes集群管理。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考