0

我正在尝试在具有集群上 kubernetes 配置的服务帐户的上下文中删除tekton kubernetes 资源,并且遇到特定于使用deletecollection所有 tekton 资源访问的错误。示例错误如下:

pipelines.tekton.dev 被禁止:用户“system:serviceaccount:my-account:default”无法删除命名空间“my-namespace”中 API 组“tekton.dev”中的集合资源“pipelines”

我曾尝试在此处应用RBAC来提供帮助,但仍然遇到相同的错误。我的 RBAC 尝试如下:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: my-role
  namespace: my-namespace
rules:
- apiGroups: ["tekton.dev"]
  resources: ["pipelines", "pipelineruns", "tasks", "taskruns"]
  verbs: ["get", "watch", "list", "delete", "deletecollection"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: my-role-binding
  namespace: my-namespace
subjects:
- kind: User
  name: system:serviceaccount:my-account:default
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: my-role
  apiGroup: rbac.authorization.k8s.io

这些 RBAC 配置继续导致相同的错误。这是必要的还是类似的?在与 tekton 资源交互(特别是删除)时,是否有任何 RBAC 示例?

4

2 回答 2

2

给定两个命名空间my-namespace,并且命名空间my-account中的默认服务帐户my-account被正确授予对 indeletecollection动词 onpipelines的权限my-namespace

您可以在申请后使用以下方式验证这kubectl auth can-i一点:

$ kubectl -n my-namespace --as="system:serviceaccount:my-account:default" auth can-i deletecollection pipelines.tekton.de
yes

验证您是否实际应用了 RBAC 清单。

于 2020-07-28T14:49:38.320 回答
-1

如下更改 RBAC

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: my-role
  namespace: my-namespace
rules:
- apiGroups: ["tekton.dev"]
  resources: ["pipelines", "pipelineruns", "tasks", "taskruns"]
  verbs: ["get", "watch", "list", "delete", "deletecollection"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: my-rolebinding
  namespace: my-namespace
subjects:
- kind: ServiceAccount
  name: default
  namespace: my-account
roleRef:
  kind: Role
  name: my-role
  apiGroup: rbac.authorization.k8s.io

有几点需要注意:

  1. 固定subjects使用ServiceAccountUser. 这实际上是失败的原因,因为服务帐户没有被授予 RBAC。
  2. 我假设您要通过namespacemy-namespacedefault服务帐户删除 Tekton 资源。my-account如果它不同,则需要更改RoleRoleBinding相应地完成。
于 2020-07-28T14:11:25.527 回答