Kubernetes
kubectl auth can-i 說我可以,但我不能
我很困惑。kubectl 說我可以(通過
kubectl auth can-i
子命令),但是當我去執行操作時,我不能。我已經安裝
kubectl
在一個 docker 鏡像上,該鏡像執行在一個由Deployment
. 當我kubectl exec -it
進入那個 pod(只有一個容器)時,我得到了這個。user@my-pod:~$ kubectl auth can-i get secrets -n myNamespace yes user@my-pod:~$ kubectl get secrets -n myNamespace Error from server (Forbidden): secrets is forbidden: User "system:serviceaccount:myNamespace:myServiceAccount" cannot list resource "secrets" in API group "" in the namespace "myNamespace"
這是我的服務帳戶的配置方式
--- apiVersion: v1 kind: ServiceAccount metadata: name: myServiceAccount namespace: myNamespace --- kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: name: myRole namespace: myNamespace rules: - apiGroups: [""] resources: ["secrets"] verbs: ["get", "describe"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: myRoleBinding namespace: myNamespace roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: myRole subjects: - kind: ServiceAccount name: myServiceAccount namespace: myNamespace
我首先很想知道我是否使用
kubectl auth can-i
不正確。其次,我希望能夠授權此服務帳戶進行此 API 呼叫。我的 yaml 中是否存在錯誤配置?
這裡發生的是兩種不同方式使用之間的不幸碰撞,但
kubectl
僅以一種方式使用它。支持的動詞列表顯示在其參考頁面上get``can-i``can-i
跑步:
kubectl auth can-i get secrets -n myNamespace
專門詢問
get
動詞。這相當於kubectl get secret my-awesome-secret
。如果您想了解kubectl get secret
,那就是使用列表動詞,因此將通過以下方式進行測試:
kubectl auth can-i list secrets -n myNamespace
下表中列出了區別:https ://kubernetes.io/docs/reference/access-authn-authz/authorization/#determine-the-request-verb
我相信您的解決方法
Role
是更新verbs:
以包括"list"
如果您想列舉Secret
srules: - apiGroups: [""] resources: ["secrets"] verbs: ["get", "describe", "list"]