从 kubernetes 获取 'cannot list resource "pods/var"'

Getting 'cannot list resource "pods/var"' from kubernetes

我正在尝试在自定义命名空间中设置 fluent-bit。我采取了以下步骤(为清楚起见,此处省略了很多):

我这样创建了服务帐户:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: k8s-logger
  namespace: efk

然后我将该服务帐户绑定到标准“视图”ClusterRrole:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: k8s-logger
subjects:
- kind: ServiceAccount
  name: k8s-logger
  namespace: efk
roleRef:
  kind: ClusterRole
  name: view
  apiGroup: rbac.authorization.k8s.io

最后,我创建了 fluent-bit DaemonSet 并告诉它使用“k8s-logger”ServiceAccount:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluent-bit
  namespace: efk
spec:
  template:
    spec:
      serviceAccount: k8s-logger
      serviceAccountName: k8s-logger
.
.
.

(顺便说一句,如果有人知道 serviceAccount 和 serviceAccountName 之间的区别,我很想知道)。

但是,我在 fluent-bit 日志中得到以下输出:

pods is forbidden: User "system.serviceaccount:efk:k8s-logger" cannot list resource "pods/var" in API group "" in the namespace "work"

不行的时候,我开始验证:

此时我不知道如何进一步调试或找出问题所在。我四处乱窜:

但是这些东西并没有改变任何东西。还有人有其他想法吗?

您的错误显示 cannot list resource "pods/var" -- 作为免责声明:我从未见过该 RBAC 资源。

虽然 view ClusterRole 授予您读取权限:

pods                []                  []              [get list watch]
pods/log            []                  []              [get list watch]
pods/status         []                  []              [get list watch]

尝试创建您自己的 ClusterRole,将 pods/var 添加到该列表,假设这是一回事? pods/logpods/statuspods/exec 更常见,尽管基于该错误,我猜 pods/var 是一回事?

解决此问题的一种方法是复制 view 角色,并添加您需要的内容:

kubectl get -o yaml clusterrole view >my-view-role.yaml
vi my-view-role.yaml

重置其元数据,并重命名 clusterrole,删除 aggregationRules(如果有):

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: view-plus
rules:
[...]

保留原始规则,找到提到的 pods/status 或 pods/log,然后插入 pods/var,如您的错误消息所示:

- apiGroups:
  - ""
  resources:
  - bindings
  - events
  - limitranges
  - namespaces/status
  - pods/log
  - pods/status
  - pods/var
  - replicationcontrollers/status
  - resourcequotas
  - resourcequotas/status
  verbs:
  - get
  - list
  - watch

创建该 ClusterRole,kubectl create -f ...

接下来,使用您的自定义 ClusterRole 替换您的 ClusterRoleBinding。