执行kubectl cluster-info遇权限禁止错误:admin无法访问kube-system的services资源
解决kubectl cluster-info返回Forbidden权限错误的方案
这个错误指向很明确:你的admin用户没有权限在kube-system命名空间下读取核心API组的services资源,而kubectl cluster-info命令本身就是通过查询这个命名空间里的核心服务(比如kubernetes、kube-dns)信息来返回结果的,权限缺失就会触发这个Forbidden报错。
咱们先做个快速验证,确认权限问题:
- 执行命令:
kubectl auth can-i list services -n kube-system --as=admin
如果返回no,就坐实了是权限不足导致的问题。
接下来给你两种解决思路,你可以根据实际需求选择:
方案一:最小权限授予(仅允许查看kube-system的services)
遵循最小权限原则,只给admin用户必要的权限:
- 创建一个针对
kube-system命名空间的Role,定义查看services的权限:
创建文件kube-system-services-reader.yaml,内容如下:
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: kube-system name: services-reader rules: - apiGroups: [""] # 空字符串对应K8s核心API组 resources: ["services"] verbs: ["list"]
- 应用这个Role:
kubectl apply -f kube-system-services-reader.yaml - 将这个Role绑定到
admin用户:
创建文件admin-services-reader-binding.yaml,内容如下:
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: admin-services-reader-binding namespace: kube-system subjects: - kind: User name: admin apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: services-reader apiGroup: rbac.authorization.k8s.io
应用绑定:kubectl apply -f admin-services-reader-binding.yaml
方案二:授予kube-system下的全只读权限
如果admin用户需要查看kube-system下更多资源(不止services),可以直接绑定K8s内置的view集群角色,这个角色包含了大部分资源的只读权限:
执行命令:kubectl create rolebinding admin-view-kube-system --clusterrole=view --user=admin --namespace=kube-system
完成上述操作后,再执行kubectl cluster-info应该就能正常显示集群核心服务信息了。如果还有异常,可以用提示里的kubectl cluster-info dump命令导出详细集群状态,进一步排查问题。
内容的提问来源于stack exchange,提问作者qie fan
相关产品推荐
相关产品推荐

