簡體   English   中英

Kubernetes RBAC“由 RoleBinding 允許”但“無法列出資源”

[英]Kubernetes RBAC "Allowed by RoleBinding" but "cannot list resource"

我正在向我的 Kubernetes 集群部署一個應用程序,該應用程序使用 Kubernetes API 列出集群中的 pod(不僅是其命名空間中的 pod)。 該應用程序將位於其自己的命名空間中。

RBAC 規則如下;

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
  name: kubecontrol-rbac-role
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "watch", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
  name: kubecontrol-rbac-role-binding
  namespace: kubecontrol
subjects:
  - kind: ServiceAccount
    namespace: kubecontrol
    name: default
roleRef:
  kind: ClusterRole
  name: kubecontrol-rbac-role
  apiGroup: rbac.authorization.k8s.io

如您所見,我有一個 ClusterRole,它授予對“pods”資源的“list”、“get”和“watch”權限,以及一個 RoleBinding 將此 ClusterRole 應用於命名空間的default ServiceAccount。

當我使用kubectl auth can-in檢查授權時,這個配置看起來是正確的;

$ kubectl -n kubecontrol auth can-i --as=system:serviceaccount:kubecontrol:default list pods
yes
$ kubectl -n kubecontrol auth can-i --as=system:serviceaccount:kubecontrol:default list pods --v=8
...
I0326 23:17:05.125188   56505 request.go:947] Response Body: {"kind":"SelfSubjectAccessReview","apiVersion":"authorization.k8s.io/v1","metadata":{"creationTimestamp":null},"spec":{"resourceAttributes":{"namespace":"kubecontrol","verb":"list","resource":"pods"}},"status":{"allowed":true,"reason":"RBAC: allowed by RoleBinding \"kubecontrol-rbac-role-binding/kubecontrol\" of ClusterRole \"kubecontrol-rbac-role\" to ServiceAccount \"default/kubecontrol\""}}

RBAC:由 ClusterRole "kubecontrol-rbac-role" 的 RoleBinding "kubecontrol-rbac-role-binding/kubecontrol" 允許到 ServiceAccount "default/kubecontrol"

但是,當我實際嘗試執行操作時,卻被告知不允許這樣做;

$ kubectl get pod --as=system:serviceaccount:kubecontrol:default --all-namespaces
Error from server (Forbidden): pods is forbidden: User "system:serviceaccount:kubecontrol:default" cannot list resource "pods" in API group "" at the cluster scope

我在我的應用程序中看到相同的錯誤消息。

用戶( system:serviceaccount:kubecontrol:default )在兩種情況下都是相同的,那么為什么我不能列出 pod,即使根據 Kubernetes 本身我應該能夠列出 有什么我想念的嗎?

使用--all-namespaces可以列出集群所有命名空間中的 pod。 但是由於您只使用了RoleBinding ,因此您僅對給定的命名空間(在您的情況下命名空間kubecontrol )擁有來自ClusterRole的權限。 您必須使用ClusterRoleBinding來為您提供整個集群的ClusterRole

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM