K8s创建ClusterRole后无法获取对应权限访问Pod日志问题
问题根因与解决方案
已发现的配置&操作错误点
- 执行
kubectl auth can-i命令的当前操作用户idow缺少创建selfsubjectaccessreviews资源的权限:权限校验命令本身需要调用K8s的authorization.k8s.ioAPI组能力,当前用户无该权限会直接报错,和你要校验的目标用户/组权限无关。 - 校验命令指定的用户组和实际绑定的组不匹配:ClusterRoleBinding中绑定的是
system:read-logs组,但你命令中传入的是--as-group=read-pod,完全匹配不到已配置的权限规则。 - ClusterRole配置存在API组错误:
deployments属于appsAPI组,不属于core("")组,当前配置下deployments相关权限不生效。 - 集群级资源多余配置了命名空间:ClusterRoleBinding是集群级资源,不需要填写
metadata.namespace字段,配置后也不会生效。 - 缺少Pod日志访问的必备权限:你的需求是查看Pod日志,当前ClusterRole仅配置了
pods资源的权限,还需要补充pods/log资源的get权限才能正常拉取日志。 - 命令使用了不规范的资源名:校验命令中
get pod使用了单数资源名,规范写法为get pods,对应报错的Warning提示。
具体修复步骤
- 先给当前操作用户
idow授权权限校验能力,创建如下ClusterRole和ClusterRoleBinding:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: selfsubjectaccessreview-role rules: - apiGroups: ["authorization.k8s.io"] resources: ["selfsubjectaccessreviews"] verbs: ["create"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: selfsubjectaccessreview-binding subjects: - kind: User name: idow apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: selfsubjectaccessreview-role apiGroup: rbac.authorization.k8s.io
- 修正原ClusterRole配置,补充日志权限、修正API组错误:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: read-permissions rules: - apiGroups: [""] resources: ["nodes", "services", "configmaps", "pods", "endpoints", "pods/log"] verbs: ["list", "get"] - apiGroups: ["apps"] resources: ["deployments"] verbs: ["list", "get"]
- 修正原ClusterRoleBinding配置,移除多余命名空间,可根据实际使用的组调整subjects.name:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: read-permissions-binding subjects: - kind: Group # 如果你要使用read-pod组就改成这个名称,和后续校验命令保持一致即可 name: system:read-logs apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: read-permissions apiGroup: rbac.authorization.k8s.io
- 使用匹配配置的校验命令测试:
# 如果你绑定的是system:read-logs组用这个命令 kubectl auth can-i get pods --as="user" --as-group=system:read-logs # 如果你绑定的是read-pod组用这个命令 kubectl auth can-i get pods --as="user" --as-group=read-pod
内容的提问来源于stack exchange,提问作者idow
相关产品推荐
相关产品推荐

