Todos os produtos
Search
Central de documentação

Container Compute Service:Envie um workflow para um namespace específico

Última atualização: Jun 29, 2026

Por padrão, os workflows são enviados ao namespace argo. Para enviar workflows a outro namespace e garantir isolamento de recursos e controle de acesso entre equipes ou projetos, conceda primeiro as permissões necessárias de Role-Based Access Control (RBAC) ao ServiceAccount do namespace.

Pré-requisitos

Antes de começar, verifique se você tem:

  • Uma instalação do Argo Workflows em execução no cluster

  • Acesso ao kubectl com permissões para criar namespaces e recursos RBAC

  • A CLI argo instalada

Conceda permissões e envie um workflow

Etapa 1: Crie o namespace de destino

kubectl create ns test

Etapa 2: Crie o arquivo de autorização RBAC

Crie um arquivo chamado role-rolebinding.yaml com o seguinte conteúdo.

Este exemplo concede permissões ao ServiceAccount default. Se o workflow especificar um ServiceAccount diferente, conceda as permissões a esse ServiceAccount. Os RoleBindings têm escopo de namespace; portanto, as permissões valem apenas dentro do namespace onde foram criadas. Por isso, aplique este arquivo ao namespace test na etapa 3.
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  annotations:
    workflows.argoproj.io/description: |
      This is the minimum recommended permissions needed if you want to use the agent, e.g. for HTTP or plugin templates.

      If <= v3.2 you must replace `workflowtasksets/status` with `patch workflowtasksets`.
  name: agent
rules:
  - apiGroups:
      - argoproj.io
    resources:
      - workflowtasksets
    verbs:
      - list
      - watch
  - apiGroups:
      - argoproj.io
    resources:
      - workflowtasksets/status
    verbs:
      - patch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  annotations:
    workflows.argoproj.io/description: |
      This is the minimum recommended permissions needed if you want to use artifact GC.
  name: artifactgc
rules:
  - apiGroups:
      - argoproj.io
    resources:
      - workflowartifactgctasks
    verbs:
        - list
        - watch
  - apiGroups:
      - argoproj.io
    resources:
      - workflowartifactgctasks/status
    verbs:
      - patch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  annotations:
    workflows.argoproj.io/description: |
      Recommended minimum permissions for the `emissary` executor.
  name: executor
rules:
  - apiGroups:
      - argoproj.io
    resources:
      - workflowtaskresults
    verbs:
      - create
      - patch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: submit-workflow-template
rules:
  - apiGroups:
      - argoproj.io
    resources:
      - workfloweventbindings
    verbs:
      - list
  - apiGroups:
      - argoproj.io
    resources:
      - workflowtemplates
    verbs:
      - get
  - apiGroups:
      - argoproj.io
    resources:
      - workflows
    verbs:
      - create
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  annotations:
    workflows.argoproj.io/description: |
      This is an example of the permissions you would need if you wanted to use a resource template to create and manage
      other workflows. The same pattern would be suitable for other resurces, e.g. a service
  name: workflow-manager
rules:
  - apiGroups:
      - argoproj.io
    resources:
      - workflows
    verbs:
      - create
      - get
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: agent-default
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: agent
subjects:
  - kind: ServiceAccount
    name: default
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: artifactgc-default
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: artifactgc
subjects:
  - kind: ServiceAccount
    name: default
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: executor-default
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: executor
subjects:
  - kind: ServiceAccount
    name: default
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: workflow-manager-default
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: workflow-manager
subjects:
  - kind: ServiceAccount
    name: default

O arquivo define cinco Roles e quatro RoleBindings. Comece pela Role executor, pois ela é o mínimo necessário para executar qualquer workflow. Adicione as demais Roles apenas conforme os recursos utilizados:

Role

Necessária para

Recursos

executor

Mínimo para o executor emissary

workflowtaskresults (create, patch)

agent

Modelos HTTP e modelos de plugin

workflowtasksets (list, watch); workflowtasksets/status (patch)

artifactgc

Coleta de lixo de artefatos

workflowartifactgctasks (list, watch); workflowartifactgctasks/status (patch)

submit-workflow-template

Envio de workflows a partir de WorkflowTemplates

workfloweventbindings (list); workflowtemplates (get); workflows (create)

workflow-manager

Criação e gerenciamento de workflows a partir de modelos de recursos

workflows (create, get)

Etapa 3: Aplique o arquivo de autorização

Aplique o arquivo no namespace test para criar os Roles e RoleBindings correspondentes:

kubectl apply -f role-rolebinding.yaml -n test

A saída esperada é:

role.rbac.authorization.k8s.io/agent created
role.rbac.authorization.k8s.io/artifactgc created
role.rbac.authorization.k8s.io/executor created
role.rbac.authorization.k8s.io/submit-workflow-template created
role.rbac.authorization.k8s.io/workflow-manager created
rolebinding.rbac.authorization.k8s.io/agent-default created
rolebinding.rbac.authorization.k8s.io/artifactgc-default created
rolebinding.rbac.authorization.k8s.io/executor-default created
rolebinding.rbac.authorization.k8s.io/workflow-manager-default created

Etapa 4: Crie uma definição de workflow

Crie um arquivo chamado helloworld-workflow.yaml:

apiVersion: argoproj.io/v1alpha1
kind: Workflow                  # new type of k8s spec.
metadata:
  generateName: hello-world-    # name of the workflow spec.
spec:
  entrypoint: main          # invoke the main template.
  templates:
    - name: main              # name of the template.
      container:
        image: mirrors-ssl.aliyuncs.com/busybox:latest
        command: [ echo ]
        args: [ "hello world" ]

Etapa 5: Envie o workflow para o namespace de destino

argo submit helloworld-workflow.yaml -n test

O workflow executa no namespace test com as permissões concedidas na etapa 3.