【问题标题】:I am getting permission issue (cannot create resource \"Job\" in API group \"batch) while creating jobs via sensors of argo-events通过 argo-events 的传感器创建作业时,我遇到了权限问题(无法在 API 组“批处理”中创建资源“作业”)
【发布时间】:2021-09-09 13:08:12
【问题描述】:

我正在尝试从传感器触发创建作业,但出现以下错误:

   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

虽然我已经创建了serviceaccountrolerolebinding。 这是我的serviceaccount 创建文件:

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

传感器被正确触发,但未能创建作业。 有人可以帮忙吗,我错过了什么?

【问题讨论】:

  • 我首先通过这种方法检查 kubernetes 部分本身(使用相同的 yamls 测试并成功):kubectl auth can-i --as=system:serviceaccount:samplens:sample-sa create jobs -n samplens -> yes。如果这对你有用,那么是时候 argo 部分了(不熟悉它)
  • @moonkotte 我通过提供 - apiGroups: - '' 资源: - '' 动词: - '*' 解决了这个问题
  • 你是给所有资源的所有动词还是只给作业/豆荚?我想了解更多。另请记住,这对于测试来说很好,但如果您要将其移至生产环境,则应使用principle of least privilege,这意味着您应该只授予必要的权限,而不能再授予更多权限。

标签: kubernetes kubernetes-rbac argo-events


【解决方案1】:

将其发布为社区 wiki 以获得更好的可见性,请随时编辑和扩展它。

原来的问题已通过调整role 并赋予* 动词来解决。这意味着 argo 传感器实际上需要更多权限。

这是一个适用于测试环境的解决方案,而对于生产环境,RBAC 应与principle of least privileges 一起使用。

如何测试 RBAC

kubectl 语法允许测试 RBAC(服务帐户 + 角色 + 角色绑定)是否按预期设置。

下面是如何检查SERVICE_ACCOUNT_NAME in NAMESPACE 是否可以在命名空间NAMESPACE 中创建作业的示例:

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

答案很简单:yesno

有用的链接:

【讨论】:

    【解决方案2】:

    刚刚在 argo-events 中遇到了同样的问题。希望这会在不久的将来得到解决,或者至少有一些更好的文档。

    在您的sensor.yaml 中更改以下值:

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

    relevant documentation(此时)似乎指向一些旧的 Kubernetes API v1.13 文档,所以我不知道为什么需要将其写成复数“工作”,但这解决了问题我。

    example trigger 中,Pod 被触发,值“pods”用于指向正确方向的相同字段。

    【讨论】:

      猜你喜欢
      • 2010-09-08
      • 1970-01-01
      • 2021-07-03
      • 1970-01-01
      • 1970-01-01
      • 2021-09-11
      • 1970-01-01
      • 2010-11-07
      • 2017-01-31
      相关资源
      最近更新 更多