Contribuisci a migliorare questa pagina
Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Per contribuire a questa guida per l'utente, scegli il GitHub link Modifica questa pagina nel riquadro destro di ogni pagina.
Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Lavorare con Argo CD Projects
Argo CD Projects (AppProject) forniscono il raggruppamento logico e il controllo degli accessi per le applicazioni. I progetti definiscono i repository Git, i cluster di destinazione e i namespace che le applicazioni possono utilizzare, abilitando limiti di multi-tenancy e sicurezza nelle istanze Argo CD condivise.
Quando usare Projects
Usa Projects per:
-
Separa le applicazioni per team, ambiente o unità aziendale
-
Limita i repository da cui i team possono eseguire l'implementazione
-
Limita i cluster e i namespace in cui i team possono effettuare l'implementazione
-
Applica le quote di risorse e i tipi di risorse consentiti
-
Fornisci l'implementazione self-service delle applicazioni con guardrail
Progetto predefinito
Ogni funzionalità di Argo CD include un default progetto che consente l'accesso a tutti i repository, i cluster e i namespace. Sebbene sia utile per i test iniziali, crea progetti dedicati con restrizioni esplicite per l'uso in produzione.
Per i dettagli sulla configurazione predefinita del progetto e su come limitarla, consultate The Default Project
Creazione di un progetto
Crea un progetto applicando una AppProject risorsa al tuo cluster.
Esempio: progetto specifico per il team
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
Applica il progetto:
kubectl apply -f team-a-project.yaml
Configurazione del progetto
Archivi di origine
Controlla quali repository Git le applicazioni di questo progetto possono utilizzare:
spec: sourceRepos: - 'https://github.com/my-org/app-*' # Wildcard pattern - 'https://github.com/my-org/infra' # Specific repo
È possibile utilizzare caratteri jolly e schemi di negazione (!prefisso) per consentire o negare repository specifici. Per i dettagli, consultate Gestione dei progetti
Restrizioni sulla destinazione
Limite in cui le applicazioni possono essere distribuite:
spec: destinations: - name: prod-cluster # Specific cluster by name namespace: production - name: '*' # Any cluster namespace: team-a-* # Namespace pattern
Importante
Utilizza nomi di cluster e modelli di namespace specifici anziché caratteri jolly per i progetti di produzione. In questo modo si evitano implementazioni accidentali in cluster o namespace non autorizzati.
È possibile utilizzare caratteri jolly e schemi di negazione per controllare le destinazioni. Per i dettagli, consultate Gestione dei progetti
Restrizioni sulle risorse
Controlla quali tipi di risorse Kubernetes possono essere implementati:
Risorse con ambito cluster:
spec: clusterResourceWhitelist: - group: '' kind: Namespace - group: 'rbac.authorization.k8s.io' kind: Role
Risorse con ambito namespace:
spec: namespaceResourceWhitelist: - group: 'apps' kind: Deployment - group: '' kind: Service - group: '' kind: ConfigMap - group: 's3.services.k8s.aws' kind: Bucket
Usa le liste nere per negare risorse specifiche:
spec: namespaceResourceBlacklist: - group: '' kind: Secret # Prevent direct Secret creation
Assegna applicazioni ai progetti
Quando crei un'applicazione, specifica il progetto nel spec.project campo:
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
Le applicazioni senza un progetto specificato utilizzano il default progetto.
Ruoli del progetto e RBAC
I progetti possono definire ruoli personalizzati per un controllo granulare degli accessi. Associa i ruoli del progetto agli utenti e ai gruppi di AWS Identity Center nella configurazione delle funzionalità per controllare chi può sincronizzare, aggiornare o eliminare le applicazioni.
Esempio: progetto con ruoli di sviluppatore e amministratore
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
Per i dettagli sui ruoli del progetto, sui token JWT per le CI/CD pipeline e sulla configurazione RBAC, consulta Project Roles
Schemi comuni
Progetti basati sull'ambiente
Crea progetti separati per ogni ambiente:
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
Progetti basati su team
Isola i team con progetti dedicati:
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: '*'
Progetti multicluster
Implementa su più cluster con politiche coerenti:
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
Best practice
Inizia con progetti restrittivi: inizia con autorizzazioni limitate ed espandi secondo necessità anziché iniziare con un accesso ampio.
Usa modelli di namespace: sfrutta i caratteri jolly nelle restrizioni dello spazio dei nomi (ad esempioteam-a-*) per consentire flessibilità pur mantenendo i limiti.
Progetti di produzione separati: utilizza progetti dedicati per la produzione con controlli più rigorosi e politiche di sincronizzazione manuale.
Scopi del progetto di documentazione: utilizza il description campo per spiegare a cosa serve ogni progetto e chi dovrebbe utilizzarlo.
Rivedi regolarmente le autorizzazioni del progetto: controlla periodicamente i progetti per assicurarti che le restrizioni siano ancora in linea con le esigenze del team e i requisiti di sicurezza.
Risorse aggiuntive
-
Configurare le autorizzazioni di Argo CD- Configurazione dell'integrazione tra RBAC e Identity Center
-
Creazione di applicazioni- Crea applicazioni all'interno dei progetti
-
Usa ApplicationSets- Utilizzabile ApplicationSets con Projects per implementazioni multi-cluster
-
Documentazione sui progetti Argo CD
- Riferimento completo a upstream