为什么配置了所需权限的K8s ServiceAccount无法列出Pod资源?
问题根因
你配置的Role规则中,resources字段使用了单数形式的pod,Kubernetes RBAC要求所有资源必须填写复数形式名称,正确值应为pods。
修复步骤
- 修改
objects.yaml中的Role定义部分,修正resources字段:
--- kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: namespace: xyz name: listpodser rules: - apiGroups: [""] resources: ["pods"] # 此处从pod改为pods verbs: ["get", "list"] # 剩余的RoleBinding、ServiceAccount部分无需修改,保持原有配置即可 --- kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: namespace: xyz name: service-listpodser subjects: - kind: ServiceAccount name: serviceacc apiGroup: "" roleRef: kind: Role name: listpodser apiGroup: "" --- apiVersion: v1 kind: ServiceAccount metadata: name: serviceacc namespace: xyz
- 重新应用配置:
kubectl apply -f objects.yaml
- 再次校验权限,返回结果应为yes:
kubectl auth can-i get pods --namespace xyz --as system:serviceaccount:xyz:serviceacc kubectl auth can-i list pods --namespace xyz --as system:serviceaccount:xyz:serviceacc
内容的提问来源于stack exchange,提问作者Nipun Talukdar
相关产品推荐
相关产品推荐

