Ayude a mejorar esta página
Para contribuir a esta guía del usuario, elija el enlace Edit this page on GitHub que se encuentra en el panel derecho de cada página.
Uso de proyectos de Argo CD
Los proyectos de Argo CD (AppProjects) proporcionan agrupamiento lógico y control de acceso para las aplicaciones. Los proyectos definen qué repositorios de Git, clústeres de destino y espacios de nombres pueden usar las aplicaciones, lo que habilita la multitenencia y los límites de seguridad en las instancias de Argo CD compartidas.
Cuándo se usan los proyectos
Use los proyectos en los siguientes casos:
-
Separación de aplicaciones por equipo, entorno o unidad de negocio
-
Restricción de los repositorios desde los que los equipos pueden implementar
-
Limitación de los clústeres y espacios de nombres en los que los equipos pueden implementar
-
Aplicación de cuotas de recursos y tipos de recursos permitidos
-
Concesión de acceso a la implementación de aplicaciones de autoservicio con barreras de protección
Proyecto predeterminado
Cada capacidad de Argo CD incluye un proyecto default que permite el acceso a todos los repositorios, clústeres y espacios de nombres. Si bien es útil para las pruebas iniciales, cree proyectos dedicados con restricciones explícitas para su uso en producción.
Para obtener más información sobre la configuración predeterminada del proyecto y cómo restringirla, consulte The Default Project
Creación de un proyecto
Para crear un proyecto, aplique un recurso de AppProject al clúster.
Ejemplo: proyecto específico de un equipo
apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: team-a namespace: argocd spec: description: Applications for Team A # Source repositories this project can deploy from sourceRepos: - 'https://github.com/my-org/team-a-*' - 'https://github.com/my-org/shared-libs' # Destination clusters and namespaces destinations: - name: dev-cluster namespace: team-a-dev - name: prod-cluster namespace: team-a-prod # Allowed resource types clusterResourceWhitelist: - group: '' kind: Namespace namespaceResourceWhitelist: - group: 'apps' kind: Deployment - group: '' kind: Service - group: '' kind: ConfigMap
Aplique el proyecto:
kubectl apply -f team-a-project.yaml
Configuración del proyecto
Repositorios de código fuente
Controle qué repositorios de Git pueden usar las aplicaciones de este proyecto:
spec: sourceRepos: - 'https://github.com/my-org/app-*' # Wildcard pattern - 'https://github.com/my-org/infra' # Specific repo
Puede usar comodines y patrones de negación (prefijo !) para permitir o denegar repositorios específicos. Para obtener más información, consulte Managing Projects
Restricciones de destino
Limite dónde se pueden implementar las aplicaciones:
spec: destinations: - name: prod-cluster # Specific cluster by name namespace: production - name: '*' # Any cluster namespace: team-a-* # Namespace pattern
importante
Utilice nombres de clústeres y patrones de espacios de nombres específicos en lugar de comodines para los proyectos de producción. De este modo, se impiden las implementaciones accidentales en clústeres o espacios de nombres no autorizados.
Puede utilizar comodines y patrones de negación para controlar los destinos. Para obtener más información, consulte Managing Projects
Restricciones de recursos
Controle qué tipos de recursos de Kubernetes se pueden implementar:
Recursos basados en clústeres:
spec: clusterResourceWhitelist: - group: '' kind: Namespace - group: 'rbac.authorization.k8s.io' kind: Role
Recursos basados en espacios de nombres:
spec: namespaceResourceWhitelist: - group: 'apps' kind: Deployment - group: '' kind: Service - group: '' kind: ConfigMap - group: 's3.services.k8s.aws' kind: Bucket
Use listas de elementos prohibidos para denegar recursos específicos:
spec: namespaceResourceBlacklist: - group: '' kind: Secret # Prevent direct Secret creation
Asignación de aplicaciones a proyectos
Al crear una aplicación, especifique el proyecto en el campo spec.project:
apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: my-app namespace: argocd spec: project: team-a # Assign to team-a project source: repoURL: https://github.com/my-org/my-app path: manifests destination: name: prod-cluster namespace: team-a-prod
Las aplicaciones sin un proyecto específico utilizan el proyecto default.
Roles del proyecto y RBAC
Los proyectos pueden definir roles personalizados para el control de acceso detallado. Asigne roles del proyecto a los usuarios y grupos de AWS Identity Center según la configuración de la capacidad para controlar quién puede sincronizar, actualizar o eliminar aplicaciones.
Ejemplo: proyecto con roles de desarrollador y administrador
apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: team-a namespace: argocd spec: sourceRepos: - '*' destinations: - name: '*' namespace: 'team-a-*' roles: - name: developer description: Developers can sync applications policies: - p, proj:team-a:developer, applications, sync, team-a/*, allow - p, proj:team-a:developer, applications, get, team-a/*, allow groups: - team-a-developers - name: admin description: Admins have full access policies: - p, proj:team-a:admin, applications, *, team-a/*, allow groups: - team-a-admins
Para obtener más información sobre los roles del proyecto, los tokens JWT para las canalizaciones de CI/CD y la configuración d RBAC, consulte Project Roles
Patrones comunes
Proyectos basados en entornos
Cree proyectos separados para cada entorno:
apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: production namespace: argocd spec: sourceRepos: - 'https://github.com/my-org/*' destinations: - name: prod-cluster namespace: '*' # Strict resource controls for production clusterResourceWhitelist: [] namespaceResourceWhitelist: - group: 'apps' kind: Deployment - group: '' kind: Service
Proyectos basados en equipos
Aísle los equipos con proyectos específicos:
apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: platform-team namespace: argocd spec: sourceRepos: - 'https://github.com/my-org/platform-*' destinations: - name: '*' namespace: 'platform-*' # Platform team can manage cluster resources clusterResourceWhitelist: - group: '*' kind: '*'
Proyectos de varios clústeres
Implemente en varios clústeres con políticas coherentes:
apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: global-app namespace: argocd spec: sourceRepos: - 'https://github.com/my-org/global-app' destinations: - name: us-west-cluster namespace: app - name: eu-west-cluster namespace: app - name: ap-south-cluster namespace: app
Prácticas recomendadas
Comience con proyectos restrictivos: comience con permisos limitados y amplíelos según sea necesario en lugar de comenzar con un acceso amplio.
Utilice patrones de espacios de nombres: use los comodines en las restricciones de los espacios de nombres (por ejemplo, team-a-*) para ofrecer flexibilidad mientras mantiene los límites.
Separe los proyectos de producción: utilice proyectos específicos para la producción con controles más estrictos y políticas de sincronización manual.
Documente los propósitos del proyecto: utilice el campo description para explicar para qué sirve cada proyecto y quién debe usarlo.
Revise los permisos del proyecto con regularidad: audite los proyectos periódicamente para asegurarse de que las restricciones sigan alineándose con las necesidades del equipo y los requisitos de seguridad.
Recursos adicionales
-
Configuración de los permisos de Argo CD: configuración de la integración de Identity Center y RBAC
-
Creación de aplicaciones: creación de aplicaciones dentro de los proyectos
-
Uso de ApplicationSets: uso de ApplicationSets con proyectos para implementaciones de varios clústeres
-
Documentación de proyectos de Argo CD
: referencia ascendente completa