添加 pods/portforward 的创建权限似乎删除了 configmaps 的获取权限

Adding a create permission for pods/portforward seems to remove the get permission for configmaps

我正在尝试从该命名空间内的容器中 运行 helm status --tiller-namespace=$NAMESPACE $RELEASE_NAME

我在规则中扮演角色

  - apiGroups:
      - ""
    resources:
      - pods
      - configmaps
    verbs:
      - get
      - watch

绑定到默认服务帐户。但是我得到了错误

Error: pods is forbidden: User "system:serviceaccount:mynamespace:default" cannot list resource "pods" in API group "" in the namespace "mynamespace"

所以我像这样添加了 list 动词

  - apiGroups:
      - ""
    resources:
      - pods
      - configmaps
    verbs:
      - get
      - watch
      - list

现在我已经进展到错误 cannot create resource "pods/portforward" in API group ""。我在 k8s 文档中找不到任何关于如何将不同的动词分配给同一 apiGroup 中的不同资源的任何内容,但基于 this example 我认为这应该有效:

  - apiGroups:
      - ""
    resources:
      - pods
      - configmaps
    verbs:
      - get
      - watch
      - list
  - apiGroups:
      - ""
    resources:
      - pods/portforward
    verbs:
      - create

但是,现在我收到错误 cannot get resource "configmaps" in API group ""。请注意,在 运行 helm status 命令之前,我 运行 宁 kubectl get cm $CMNAME

看来我确实有权执行 kubectl get cm 直到 我尝试添加创建 pods/portforward 的权限。

有人能给我解释一下吗?

集群也是运行ning k8s版本

Server Version: version.Info{Major:"1", Minor:"12", GitVersion:"v1.12.7+1.2.3.el7", GitCommit:"cfc2012a27408ac61c8883084204d10b31fe020c", GitTreeState:"archive", BuildDate:"2019-05-23T20:00:05Z", GoVersion:"go1.10.8", Compiler:"gc", Platform:"linux/amd64"}

和头盔版本

Server: &version.Version{SemVer:"v2.12.1", GitCommit:"02a47c7249b1fc6d8fd3b94e6b4babf9d818144e", GitTreeState:"clean"}

我的问题是我正在部署具有这些角色的清单作为 helm chart 的一部分(使用 helm 2)。但是部署的tiller的服务账号没有create pods/portforward权限。因此它无法授予该权限,因此在尝试使用角色部署清单时出错。这意味着未创建 configmap 获取权限角色,因此出现了奇怪的错误。