最近有很多人在使用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种:
通常查看pod报权限不足就是由单个集群内资源对象层面进行控制,原生的就是RBAC,在tke集群就是授权管理,其实也是控制台进行配置rbac规则进行账号的授权
关于tke上的授权管理介绍,大家可以查看文档https://cloud.tencent.com/document/product/457/46104,下面我们来说下如果遇到了这个问题该如何快速解决。
这里我们首先说下tke的授权管理功能里面预设的clusterrole,因为后续的操作都是基于给账号绑定clusterrole来进行操作的
cloud.tencent.com/tke-rbac-generated: "true"
。cloud.tencent.com/tke-account-nickname: yournickname
及 label:cloud.tencent.com/tke-account: "yourUIN"
。下面我们基于上面的clusterrole来说下权限问题的解决方案
可以在控制台点击进入集群,找到左侧的授权管理,点击获取集群的admin角色,然后点击确认即可,这个操作需要你的账号CAM权限有AcquireClusterAdminRole,并且会直接给你子账号绑定上tke:admin(管理员)这个角色,这样你就是集群的管理员,有对所有命名空间下资源的读写权限,具备集群节点、存储卷、命名空间、配额的读写权限,可配置子账号的读写权限。
这个方式的缺点就是一键获取admin权限,只能绑定tke:admin这个角色,无法绑定其他角色,也有优点,那就是不需要主账号或者集群和创建者去操作,可以自行操作获取权限、
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策略生成器分配权限需要操作账号是集群管理员才能操作。
如果你对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 删除。