阿里云集群获取namespace等资源数据报403权限错误求助
问题解决步骤
你遇到的403报错是Kubernetes RBAC(基于角色的访问控制)权限限制导致的,当前使用的操作账号(API调用对应的281247226166595041、kubectl对应的225396037912844073)没有集群级别的namespace资源列表访问权限。阿里云ACK集群默认仅给集群创建者分配cluster-admin超级权限,其他RAM用户/子账号默认无任何集群操作权限。
- 步骤1:确认需要授权的账号标识,即报错信息里的用户ID,也可以提前在阿里云RAM控制台确认要授权的账号对应的UID
- 步骤2:使用集群创建者账号(或拥有cluster-admin权限的账号)执行授权操作,两种操作方式二选一:
- 方式一:控制台操作
登录阿里云容器服务ACK控制台,进入目标集群的「权限管理」-「授权」页面,添加需要授权的RAM账号,按需分配集群级别的只读权限(包含namespace列表查询权限)即可。 - 方式二:kubectl命令行操作
编写RBAC授权YAML文件auth.yaml,内容如下:
执行命令应用配置:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: custom-namespace-view-binding subjects: # 可同时添加多个需要授权的用户 - kind: User name: "281247226166595041" # 替换为调用API的用户ID apiGroup: rbac.authorization.k8s.io - kind: User name: "225396037912844073" # 替换为kubectl使用的用户ID apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: view # 系统内置只读ClusterRole,默认包含namespaces list权限 apiGroup: rbac.authorization.k8s.iokubectl apply -f auth.yaml
- 方式一:控制台操作
- 步骤3:验证权限
先执行kubectl get namespace确认无报错,再运行Golang项目调用API验证数据是否可以正常获取。
注意:如果不需要访问全集群所有命名空间,可将ClusterRoleBinding改为对应命名空间下的RoleBinding,仅授权该命名空间的访问权限,权限粒度更安全。
内容的提问来源于stack exchange,提问作者PranitaT
相关产品推荐
相关产品推荐

