De forma predeterminada, los flujos de trabajo se envían al namespace argo. Para enviar flujos de trabajo a un namespace distinto y aislar recursos con control de acceso entre equipos o proyectos, primero otorgue los permisos obligatorios de control de acceso basado en roles (RBAC) al ServiceAccount del namespace.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Una instalación de Argo Workflows en ejecución dentro de su clúster.
Acceso mediante
kubectlcon permisos para crear namespaces y recursos RBAC.El CLI
argoinstalado.
Otorgue permisos y envíe un flujo de trabajo
Paso 1: Cree el namespace de destino
kubectl create ns test
Paso 2: Cree el archivo de autorización RBAC
Cree un archivo llamado role-rolebinding.yaml con a continuación contenido.
Este ejemplo otorga permisos al ServiceAccountdefault. Si su flujo de trabajo especifica un ServiceAccount distinto, otorgue los permisos a ese ServiceAccount. Los RoleBindings tienen alcance de namespace, por lo que los permisos aplican únicamente dentro del namespace donde se crean. Por esta razón, en el paso 3 se aplica este archivo al namespacetest.
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
El archivo define cinco Roles y cuatro RoleBindings. Comience con el rol executor, ya que es el mínimo obligatorio para ejecutar cualquier flujo de trabajo. Agregue los roles restantes solo para las funciones que utilice:
|
Rol |
Obligatorio para |
Recursos |
|
|
Mínimo para el ejecutor emissary |
|
|
|
Plantillas HTTP y plantillas de plugin |
|
|
|
Recolección de basura de artefactos |
|
|
|
Envío de flujos de trabajo desde WorkflowTemplates |
|
|
|
Creación y gestión de flujos de trabajo desde plantillas de recursos |
|
Paso 3: Aplique el archivo de autorización
Aplique el archivo al namespace test para crear ahí los Roles y RoleBindings:
kubectl apply -f role-rolebinding.yaml -n test
La salida esperada es la siguiente:
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
Paso 4: Cree una definición de flujo de trabajo
Cree un archivo llamado 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" ]
Paso 5: Envíe el flujo de trabajo al namespace de destino
argo submit helloworld-workflow.yaml -n test
El flujo de trabajo se ejecuta en el namespace test con los permisos otorgados en el paso 3.