前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >子账号无法在控制台查看TKE集群内资源

子账号无法在控制台查看TKE集群内资源

原创
作者头像
聂伟星
修改2021-03-08 14:21:39
修改2021-03-08 14:21:39
2.9K0
举报

最近有很多人在使用TKE的过程中出现了一个问题,那就是我在控制台点击到集群查看pod,发现报错权限不足。

报错信息如下:

权限不足,请联系集群管理员添加权限(deployments.apps is forbidden: User "1xxxxxxx-1615166513" cannot list resource "deployments" in API group "apps" in the namespace "default"

很多人看到这个错误第一时间就去检查自己账户的CAM权限,发现自己的账户权限是够的,有的直接给子账号赋予了QcloudAccessForTKERole这个策略,但是点击某个集群查看pod等资源还是报上面的错误,这个时候,很多大佬就会向腾讯云提单咨询,为什么我子账号CAM权限足够还是无法查看集群内的资源。

如果你对k8s的RBAC这块较为熟悉的话,看到这个报错就会立马想到是因为账号绑定role或者clsuerrole权限不够导致的,在腾讯云上,tke集群的权限控制分为2种:

  • 集群层面:就是让你能看到那些集群,看不到哪些集群
  • 单个集群内的资源对象:这个层面就是让你操作集群内哪些资源(deployment,pv,pvc等)

通常查看pod报权限不足就是由单个集群内资源对象层面进行控制,原生的就是RBAC,在tke集群就是授权管理,其实也是控制台进行配置rbac规则进行账号的授权

关于tke上的授权管理介绍,大家可以查看文档https://cloud.tencent.com/document/product/457/46104,下面我们来说下如果遇到了这个问题该如何快速解决。

这里我们首先说下tke的授权管理功能里面预设的clusterrole,因为后续的操作都是基于给账号绑定clusterrole来进行操作的

  • 所有命名空间维度
    • 管理员(tke:admin):对所有命名空间下资源的读写权限,具备集群节点、存储卷、命名空间、配额的读写权限,可配置子账号的读写权限。
    • 运维人员(tke:ops):对所有命名空间下控制台可见资源的读写权限,具备集群节点、存储卷、命名空间、配额的读写权限。
    • 开发人员(tke:dev):对所有命名空间下控制台可见资源的读写权限。
    • 受限人员(tke:ro):对所有命名空间下控制台可见资源的只读权限。
    • 自定义:用户自定义 ClusterRole。
  • 指定命名空间维度
    • 开发人员(tke:ns:dev): 对所选命名空间下控制台可见资源的读写权限, 需要选择指定命名空间。
    • 只读用户(tke:ns:ro):对所选命名空间下控制台可见资源的只读权限, 需要选择指定命名空间。
  • 所有预设的 ClusterRole 都将带有固定 label:cloud.tencent.com/tke-rbac-generated: "true"
  • 所有预设的 ClusterRoleBinding 都带有固定的 annotations:cloud.tencent.com/tke-account-nickname: yournickname 及 label:cloud.tencent.com/tke-account: "yourUIN"

下面我们基于上面的clusterrole来说下权限问题的解决方案

1. 获取集群admin角色

可以在控制台点击进入集群,找到左侧的授权管理,点击获取集群的admin角色,然后点击确认即可,这个操作需要你的账号CAM权限有AcquireClusterAdminRole,并且会直接给你子账号绑定上tke:admin(管理员)这个角色,这样你就是集群的管理员,有对所有命名空间下资源的读写权限,具备集群节点、存储卷、命名空间、配额的读写权限,可配置子账号的读写权限。

这个方式的缺点就是一键获取admin权限,只能绑定tke:admin这个角色,无法绑定其他角色,也有优点,那就是不需要主账号或者集群和创建者去操作,可以自行操作获取权限、

2. RBAC策略生成器给子账号分配权限

tke的集群默认只有集群创建者和主账号有集群的管理员权限,其他子账号默认都是没有权限,如果你觉得给子账号分配管理员权限太大了,首先不要给子账号cam分配AcquireClusterAdminRole,然后让主账号或者集群创建者通过rbac策略生成器给子账号分配具体需要的权限。

首先点击进去集群,点击左侧的授权管理,点击RBAC授权管理器,然后选择你需要分配权限的子账号,点击下一步,然后根据需要给子账号分配具体的权限。

这里需要注意一下,如果你是选择的所有namespaces,那么权限可以选择管理员(tke:admin)、运维人员(tke:ops)、开发人员(tke:dev)、受限人员(tke:ro)、自定义,并且自定义只能选择自定义的clusterrole。自定义的clusterrole不支持在控制台创建,只能自行编写yaml进行创建。

如果你是选择单个命名空间。那么权限可以选择开发人员(tke:dev)、受限人员(tke:ro)、自定义,这里的自定义只能选择自定义role,并且自定义role只能自行编写yaml创建。

如果你通过上面方式只给子账号分配了test命名空间下的权限,那么子账号在控制台也就只能操作test命名空间下的资源。当然你给子账号分配管理员权限, 其实就和第一种获取集群admin的方式一样,只是RBAC策略生成器分配权限需要操作账号是集群管理员才能操作。

3. 编写yaml给子账号分配权限

如果你对rbac的yaml编写比较熟悉,你可以直接首先编写yaml的方式来给子账号绑定权限,当然前提是kubectl对应的kubeconfig有管理员权限, 这样才能创建ClusterRole、ClusterRoleBinding、Role、RoleBinding,通过yaml的方式这里就不举例说明了,大家可以参考https://cloud.tencent.com/document/product/457/46106和https://kubernetes.io/zh/docs/reference/access-authn-authz/rbac/自行编写yaml。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 获取集群admin角色
  • 2. RBAC策略生成器给子账号分配权限
  • 3. 编写yaml给子账号分配权限
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档