У меня проблема с разрешением (не могу создать ресурс \ "Работа \" в группе \ "API \") при создании заданий с помощью датчиков арго-событий.

Я пытаюсь запустить создание задания с помощью датчика, но получаю следующую ошибку.

         Job.batch is forbidden: User \"system:serviceaccount:samplens:sample-sa\" cannot create resource \"Job\" in API group \"batch\" in the namespace \"samplens\"","errorVerbose":"timed out waiting for the condition: Job.batch is forbidden: User \"system:serviceaccount:samplens:sample-sa\" cannot create resource \"Job\" in API group \"batch\" in the namespace \"samplens\"\nfailed to execute trigger\ngithub.com/argoproj/argo-events/sensors.(*SensorContext).triggerOne\n\t/home/jenkins/agent/workspace/argo-events_master/sensors/listener.go:328\ngithub.com/argoproj/argo-events/sensors.(*SensorContext).triggerActions\n\t/home/jenkins/agent/workspace/argo-events_master/sensors/listener.go:269\ngithub.com/argoproj/argo-events/sensors.(*SensorContext).listenEvents.func1.3\n\t/home/jenkins/agent/workspace/argo-events_master/sensors/listener.go:181\nruntime.goexit\n\t/usr/local/go/src/runtime/asm_amd64.s:1357","triggerName":"sample-job","triggeredBy":["payload"],"triggeredByEvents":["38333939613965312d376132372d343262302d393032662d663731393035613130303130"],"stacktrace":"github.com/argoproj/argo-events/sensors.(*SensorContext).triggerActions\n\t/home/jenkins/agent/workspace/argo-events_master/sensors/listener.go:271\ngithub.com/argoproj/argo-events/sensors.(*SensorContext).listenEvents.func1.3\n\t/home/jenkins/agent/workspace/argo-events_master/sensors/listener.go:181"}
12

Хотя я создал учетную запись службы, роль и привязку ролей. Вот мой файл для создания сервисного аккаунта

      apiVersion: v1
kind: ServiceAccount
metadata:
  name: sample-sa
  namespace: samplens

Вот мой rbac.yaml

      apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: sample-role
  namespace: samplens
rules:
  - apiGroups:
      - ""
    resources:
      - pods
    verbs:
      - create
      - delete
      - get
      - watch
      - patch
  - apiGroups:
      - "batch"
    resources:
      - jobs
    verbs:
      - create
      - delete
      - get
      - watch
      - patch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: sample-role-binding
  namespace: samplens
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: sample-role
subjects:
  - kind: ServiceAccount
    name: sample-sa
    namespace: samplens

а вот и мой sensor.yaml

      apiVersion: argoproj.io/v1alpha1
kind: Sensor
metadata:
  name: webhook
spec:
  template:
    serviceAccountName: sample-sa
  dependencies:
    - name: payload
      eventSourceName: webhook
      eventName: devops-toolkit
  triggers:
    - template:
        name: sample-job
        k8s:
          group: batch
          version: v1
          resource: Job
          operation: create
          source:
            resource:
              apiVersion: batch/v1
              kind: Job
              metadata:
                name: samplejob-crypto
                annotations:
                  argocd.argoproj.io/hook: PreSync
                  argocd.argoproj.io/hook-delete-policy: HookSucceeded
              spec:
                ttlSecondsAfterFinished: 100
                serviceAccountName: sample-sa
                template:
                  spec:
                    serviceAccountName: sample-sa
                    restartPolicy: OnFailure
                    containers:
                      - name: sample-crypto-job
                        image: docker.artifactory.xxx.com/abc/def/yyz:master-b1b347a

Датчик срабатывает правильно, но не может создать задание. Может кто-нибудь помочь, что мне не хватает?

2 ответа

Разместив это как вики сообщества для лучшей наглядности, не стесняйтесь редактировать и расширять ее.

Исходная проблема была решена путем корректировки role и давая *глаголы. Это означает, что датчику argo на самом деле требуется больше разрешений.

Это рабочее решение для тестовой среды, а для производства RBAC следует использовать с principle of least privileges.

Как протестировать RBAC

Есть kubectl синтаксис, который позволяет проверить, правильно ли настроен RBAC (учетная запись службы + роль + привязка ролей).

Ниже приведен пример того, как проверить, SERVICE_ACCOUNT_NAME in может создавать рабочие места в пространстве имен NAMESPACE:

kubectl auth can-i --as=system:serviceaccount:NAMESPACE:SERVICE_ACCOUNT_NAME create jobs -n NAMESPACE

Ответ будет прост: yes или же no.

Полезные ссылки:

Только что столкнулся с той же проблемой в арго-событиях. Надеюсь, это будет исправлено в ближайшем будущем или, по крайней мере, в какой-то лучшей документации.

Измените следующее значение в вашем sensor.yaml:

      spec.triggers[0].template.k8s.resource: jobs

Соответствующая документация (на данный момент), кажется, указывает на какую-то старую документацию Kubernetes API v1.13, поэтому я понятия не имею, почему это нужно писать во множественном числе «работы», но это решило проблему для меня.

В примере триггера , где запускается Pod, значение «pods» используется в том же поле, которое указало мне правильное направление.

Другие вопросы по тегам