Не удалось создать запуск задач/конвейер из контейнера webhook

#tekton

Вопрос:

Я пытаюсь создать PipeLineRun/PipeLineRun внутри continer, прослушивающего веб — крючок и запускающего tkn, но мне нужны права RBAC. Я попробовал привязать роль: tekton-конвейеры-контроллер к учетной записи службы по умолчанию:

 apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: webhook
  namespace: tekton-pipelines
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: tekton-pipelines-controller
subjects:
  - kind: ServiceAccount
    name: default
    namespace: default
 

Но я все равно не могу этого сделать:

 kubectl auth can-i create taskrun -n default --as=system:serviceaccount:default:default

no
 

Я также попытался создать роль для ресурса:

 apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: webhook-create-taskrun
  namespace: tekton-pipelines
rules:
  - apiGroups: ["tekton.dev/v1beta1"]
    resources: ["taskrun"]
    verbs: ["get", "create", "list"]
# [ delete deletecollection get list patch create update watch ]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: webhook-create-taskrun
  namespace: tekton-pipelines
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: webhook-create-taskrun
subjects:
  - kind: ServiceAccount
    name: default
    namespace: default
 

К сожалению, до сих пор нет доступа

Я также искал что-нибудь «taskrun» во всех ролевых связях в тектон-трубопроводах и ничего не нашел

         ns := "tekton-pipelines"
    rbacClientSet := clientSet.RbacV1()
    rolebindings, _ := rbacClientSet.RoleBindings(ns).List(context.Background(), metav1.ListOptions{})

    for _, element := range rolebindings.Items {
        fmt.Println(element)
    }
 

Ответ №1:

Вашей учетной записи ServiceAccount должны быть предоставлены привилегии, аналогичные привилегиям регистратора событий (триггеры Tekton).

Вы можете найти пример роли там: https://github.com/tektoncd/triggers/blob/main/config/200-clusterrole.yaml#L64-L87 :

 apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: tekton-triggers-eventlistener-roles
  labels:
    app.kubernetes.io/instance: default
    app.kubernetes.io/part-of: tekton-triggers
rules:
  - apiGroups: ["triggers.tekton.dev"]
    resources: ["eventlisteners", "triggerbindings", "triggertemplates", "triggers"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources: ["configmaps"]
    verbs: ["get", "list", "watch"]
  - apiGroups: ["tekton.dev"]
    resources: ["pipelineruns", "pipelineresources", "taskruns"]
    verbs: ["create"]
  - apiGroups: [""]
    resources: ["serviceaccounts"]
    verbs: ["impersonate"]
  - apiGroups: ["policy"]
    resources: ["podsecuritypolicies"]
    resourceNames: ["tekton-triggers"]
    verbs: ["use"]
 

Тот, который вы используете (tekton-pipelines-контроллер), не предназначен для создания конвейеров.

Тот, который вы пытались написать самостоятельно, позволяет создавать таскруны, вам все еще не хватает конвейерных.

Вам, вероятно, не нужны полные разрешения ролей tekton-триггеры-список событий, если вы реализуете свои собственные триггеры. Может быть достаточно создать конвейерные линии.