Kubernetes内权限管理
弹性算力池在集群层面的操作,如实例创建、升级、节点关联及证书签发等,均由 SenseCore 的 IAM 授权机制进行管理。集群内部各类资源对象的权限管理,则遵循 Kubernetes 的权限模型,由 Kubernetes 管理员(如 cluster-admin 角色)通过 Kubernetes 接口进行配置,详见使用 RBAC 鉴权。
弹性算力池集群创建后,租户管理员和集群创建者默认会被授予该集群的 cluster-admin 角色,从而具备对集群内所有资源的管理权限。如需实现多用户共享同一集群,租户管理员或集群创建者需通过 IAM 为其他用户配置相应的权限。
预置角色
集群预置角色
参考Kubernetes常见用法,平台内置了以下面向用户的clusterrole,参考面向用户的角色。
默认 ClusterRole | 默认 ClusterRoleBinding | 描述 |
---|---|---|
cluster-admin | 预置同名clusterrolebinding,预绑定集群创建人 | 允许用户在平台上的任何资源上执行所有操作,建议采用最小化授权的原则,审慎的为用户绑定此角色 |
admin | 预置同名clusterrolebinding,不预绑定用户 | 对命名空间中的大多数资源的读/写权限,包括创建命名空间级内的角色(role)和角色绑定(rolebind)的能力。此角色不允许对资源配额或者命名空间本身进行写操作。 |
edit | 预置同名clusterrolebinding,不预绑定用户 | 允许对命名空间的大多数对象进行读/写操作。 |
view | 预置同名clusterrolebinding,不预绑定用户 | 允许对命名空间的大多数对象的只读权限 |
AI训练引擎预置角色
面向AI业务场景的典型作业,随集群创建预置了AI训练引擎,安装组件时创建如下预置角色。
默认 ClusterRole | 默认 ClusterRoleBinding | 描述 |
---|---|---|
ate-admin | 无 | 允许用户在控制台或kubectl命令下,对训练任务(vcjob)进行增删改查,此角色的权限点,会默认聚合至集群预置的edit clusterrole。 |
ate-guest | 无 | 允许用户查看训练任务和相关的其它资源,此角色的权限点,会默认聚合至集群预置的view clusterrole |
各角色详细的权限点,可通过 kubectl describe clusterrole <clusterrole Name>
查看,示例如下:
权限授予
Kubernetes的权限授予,通常通过编辑RoleBinding 和 ClusterRoleBinding来完成,详见RoleBinding 和 ClusterRoleBinding。
针对IAM用户,弹性算力池创建的Kubernetes集群中,会以IAM用户ID标识。如下图中“9f942a39-1be0-4d86-831c-ffe3d6c9a1ce”:
在Kubernetes中识别为:
以此能力为基础,通过编辑RoleBinding 和 ClusterRoleBinding中的用户(subjects)信息,即可完成授权或移除授权操作。
示例1:为上述用户在集群范围内绑定view权限
为用户授权可以通过三种方式实现:Kubernetes dashboar、Kubectl命令、终端命令
方式一:通过Kubernetes 仪表盘的UI操作:
需要访问到Kubernetes仪表盘,详见通过kubectl port-forward命令实现本机可访问dashboard。
编辑预置的name为view的clusterrolebind。其中授权角色为clusterrole/view不用调整,编辑subjects中的name为用户id。
方式二:kubectl编辑或clusterrolebind文件:
执行命令kubectl edit clusterrolebinding view
在弹出的文件编辑器中编辑name字段为待授权用户的id
保存并关闭后将自动提交至kubernetes集群,操作及客户端如下返回:
方式三:等效命令:
执行以下命令以授权上述用户具备view权限:
kubectl patch clusterrolebinding view --type='json' -p='[{"op": "add", "path": "/subjects/-", "value": {"apiGroup": "rbac.authorization.k8s.io", "kind": "User", "name": "9f942a39-1be0-4d86-831c-ffe3d6c9a1ce"}}]'
授权后,此用户增加了kubernetes原生资源的查看权限,效果如下:
授权前 | 授权后 |
---|---|
![]() | ![]() |
示例2:为上述用户在命名空间:jackson中绑定edit角色
Kubernetes通过命名空间对训练任务等大多数工作负载进行了隔离。为避免不同用户误操作彼此的训练任务等工作负载,推荐为每个用户分配独立的命名空间。示例由cluster-admin创建命名空间jackson,并将此命名空间内使用权限授予上述用户。
创建命名空间
kubectl create ns jackson
将上述用户授权在此命名空间的edit角色权限
kubectl create rolebinding ate-ns-admin --clusterrole=edit --user=9f942a39-1be0-4d86-831c-ffe3d6c9a1ce --namespace=jackson
在命名空间jackson中创建了一个名为ate-ns-admin的rolebinding,为上述用户授予了此命名空间内的edit角色关联的权限
由于前述ate-admin权限点已经聚合至了默认的edit角色中,上述用户在命名空间jackson中已具备vcjob的创建权限
kubectl can-i create vcjob -n jackson --as 9f942a39-1be0-4d86-831c-ffe3d6c9a1ce