

 **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à.

# Funzionalità EKS
<a name="capabilities"></a>

**Suggerimento**  
[Inizia: [Crea funzionalità ACK \$1 Crea funzionalità](create-ack-capability.md)[Argo CD \$1 Crea](create-argocd-capability.md) funzionalità kro](create-kro-capability.md) 

Amazon EKS Capabilities è un set stratificato di funzionalità di cluster completamente gestite che aiutano ad accelerare la velocità degli sviluppatori e a ridurre la complessità della creazione e della scalabilità con Kubernetes. EKS Capabilities sono funzionalità native di Kubernetes per la distribuzione continua dichiarativa, la gestione delle risorse e la creazione e l'orchestrazione AWS delle risorse Kubernetes, tutte completamente gestite da. AWS Con EKS Capabilities, puoi concentrarti maggiormente sulla creazione e sulla scalabilità dei tuoi carichi di lavoro, alleggerendo il carico operativo di questi servizi di piattaforma fondamentali. AWS Queste funzionalità vengono eseguite all'interno di EKS anziché nei cluster, eliminando la necessità di installare, mantenere e scalare i componenti critici della piattaforma sui nodi di lavoro.

Per iniziare, puoi creare una o più funzionalità EKS su un cluster EKS nuovo o esistente. Per fare ciò, puoi usare la AWS CLI, EKS Console di gestione AWS APIs, eksctl o i tuoi strumenti preferiti. infrastructure-as-code Sebbene le funzionalità EKS siano progettate per funzionare insieme, sono risorse cloud indipendenti che puoi scegliere in base al tuo caso d'uso e ai tuoi requisiti.

Tutte le versioni di Kubernetes supportate da EKS sono supportate per EKS Capabilities.

**Nota**  
Le funzionalità EKS sono disponibili in tutte le regioni AWS commerciali in cui è disponibile Amazon EKS. Per un elenco delle regioni supportate, consulta gli [endpoint e le quote di Amazon EKS](https://docs.aws.amazon.com/general/latest/gr/eks.html) nella Guida AWS generale.

## Funzionalità disponibili
<a name="_available_capabilities"></a>

### AWS Controller per Kubernetes (ACK)
<a name="shared_aws_controllers_for_kubernetes_ack"></a>

ACK consente la gestione delle AWS risorse utilizzando Kubernetes APIs, consentendoti di creare e gestire bucket S3, database RDS, ruoli IAM e altre risorse utilizzando risorse personalizzate Kubernetes. AWS ACK riconcilia continuamente lo stato desiderato con lo stato effettivo in cui si trova AWS, correggendo eventuali variazioni nel tempo per mantenere il sistema integro e le risorse configurate come specificato. Puoi gestire AWS le risorse insieme ai carichi di lavoro Kubernetes utilizzando gli stessi strumenti e flussi di lavoro, con supporto per più di 50 AWS servizi tra cui S3, RDS, DynamoDB e Lambda. ACK supporta la gestione delle risorse tra account e regioni, abilitando complesse architetture di gestione di sistemi multi-account e multi-cluster. ACK supporta risorse di sola lettura e adozione in sola lettura, facilitando la migrazione da altre infrastrutture come strumenti di codice ai sistemi basati su Kubernetes.

 [Scopri di più su ACK →](ack.md) 

### Argo CD
<a name="_argo_cd"></a>

Argo CD GitOps implementa una distribuzione continua basata sulle applicazioni, utilizzando i repository Git come fonte di verità per i carichi di lavoro e lo stato del sistema. Argo CD sincronizza automaticamente le risorse delle applicazioni con i cluster dai repository Git, rilevando e correggendo le deviazioni per garantire che le applicazioni distribuite corrispondano allo stato desiderato. È possibile distribuire e gestire applicazioni su più cluster da una singola istanza Argo CD, con la distribuzione automatizzata dai repository Git ogni volta che vengono apportate modifiche. L'uso combinato di Argo CD e ACK fornisce un GitOps sistema di base, che semplifica la gestione delle dipendenze dei carichi di lavoro e supporta la progettazione di interi sistemi, inclusa la gestione di cluster e infrastrutture su larga scala. Argo CD si integra con AWS Identity Center per l'autenticazione e l'autorizzazione e fornisce un'interfaccia utente Argo ospitata per visualizzare lo stato di integrità e di implementazione delle applicazioni.

 [Scopri di più su Argo CD →](argocd.md) 

### kro (Kube Resource Orchestrator)
<a name="_kro_kube_resource_orchestrator"></a>

kro ti consente di creare Kubernetes personalizzati APIs che compongono più risorse in astrazioni di livello superiore, permettendo ai team della piattaforma di definire modelli riutilizzabili per combinazioni di risorse comuni: elementi costitutivi del cloud. Con kro, puoi comporre sia Kubernetes che AWS le risorse in astrazioni unificate, utilizzando una sintassi semplice per abilitare configurazioni dinamiche e logica condizionata. kro consente ai team della piattaforma di fornire funzionalità self-service con guardrail appropriati, consentendo agli sviluppatori di fornire infrastrutture complesse utilizzando infrastrutture semplici e appositamente create APIs mantenendo gli standard organizzativi e le migliori pratiche. le risorse kro sono semplicemente risorse Kubernetes e sono specificate in Kubernetes Manifest test che possono essere archiviati in Git o inviati a OCI- registri compatibili come Amazon ECR per un'ampia distribuzione organizzativa.

 [Scopri di più su kro →](kro.md) 

## Vantaggi delle funzionalità EKS
<a name="_benefits_of_eks_capabilities"></a>

Le funzionalità EKS sono completamente gestite da AWS, eliminando la necessità di installazione, manutenzione e scalabilità dei servizi cluster di base. AWS gestisce le patch di sicurezza, gli aggiornamenti e la gestione operativa, permettendo ai team di concentrarsi sulla creazione AWS anziché sulle operazioni del cluster. A differenza dei tradizionali componenti aggiuntivi di Kubernetes che consumano risorse del cluster, le funzionalità vengono eseguite in EKS anziché sui nodi di lavoro. Ciò consente di liberare capacità e risorse del cluster per i carichi di lavoro, riducendo al minimo l'onere operativo della gestione dei controller interni al cluster e di altri componenti della piattaforma.

Con EKS Capabilities, puoi gestire distribuzioni, AWS risorse Kubernetes personalizzate e composizioni utilizzando Kubernetes nativi e strumenti come. APIs `kubectl` Tutte le funzionalità operano nel contesto dei cluster, rilevando e correggendo automaticamente le variazioni di configurazione nelle risorse applicative e dell'infrastruttura cloud. È possibile distribuire e gestire le risorse su più cluster, AWS account e regioni da un unico punto di controllo, semplificando le operazioni in ambienti complessi e distribuiti.

Le funzionalità EKS sono progettate per i GitOps flussi di lavoro e forniscono infrastrutture dichiarative e con controllo della versione e una gestione delle applicazioni. Le modifiche fluiscono da Git attraverso il sistema, fornendo audit trail, funzionalità di rollback e flussi di lavoro di collaborazione che si integrano con le pratiche di sviluppo esistenti. Questo approccio nativo di Kubernetes significa che non è necessario utilizzare più strumenti o gestire infrastructure-as-code sistemi esterni ai cluster e che esiste un'unica fonte di verità a cui fare riferimento. Lo stato desiderato, definito nella configurazione dichiarativa di Kubernetes con controllo della versione, viene applicato continuamente in tutto l'ambiente.

## Prezzi
<a name="_pricing"></a>

Con EKS Capabilities, non sono previsti impegni anticipati o commissioni minime. Ti viene addebitato un costo per ogni risorsa di capacità per ogni ora in cui è attiva sul tuo cluster Amazon EKS. Le risorse Kubernetes specifiche gestite da EKS Capabilities vengono inoltre fatturate su base oraria.

Per informazioni aggiornate sui prezzi, consulta la [pagina dei prezzi di Amazon EKS](https://aws.amazon.com/eks/pricing/).

**Suggerimento**  
È possibile utilizzare AWS Cost Explorer e Cost and Usage Reports per tenere traccia dei costi delle funzionalità separatamente dagli altri addebiti EKS. È possibile etichettare le funzionalità con il nome del cluster, il tipo di funzionalità e altri dettagli ai fini dell'allocazione dei costi.

## Come funzionano le funzionalità EKS
<a name="_how_eks_capabilities_work"></a>

Ogni funzionalità è una AWS risorsa che crei sul tuo cluster EKS. Una volta creata, la funzionalità viene eseguita in EKS ed è completamente gestita da AWS.

**Nota**  
È possibile creare una risorsa di funzionalità di ogni tipo (Argo CD, ACK e kro) per un determinato cluster. Non è possibile creare risorse con funzionalità multiple dello stesso tipo sullo stesso cluster.

Interagisci con le funzionalità del tuo cluster utilizzando Kubernetes APIs e strumenti standard:
+ Utilizzalo per `kubectl` applicare risorse personalizzate Kubernetes
+ Usa gli archivi Git come fonte di verità per GitOps i flussi di lavoro

Alcune funzionalità supportano strumenti aggiuntivi. Esempio:
+ Usa la CLI di Argo CD per configurare e gestire repository e cluster con le funzionalità di Argo CD
+ Utilizzate l'interfaccia utente di Argo CD per visualizzare e gestire le applicazioni gestite dalla funzionalità Argo CD

Le funzionalità sono progettate per funzionare insieme, ma sono indipendenti e completamente attivabili. È possibile abilitare una, due o tutte e tre le funzionalità in base alle proprie esigenze e aggiornare la configurazione man mano che i requisiti evolvono.

Tutti i tipi di EKS Compute sono supportati per l'uso con EKS Capabilities. Per ulteriori informazioni, consulta [Gestire le risorse di elaborazione utilizzando i nodi](eks-compute.md).

Per la configurazione di sicurezza e i dettagli sui ruoli IAM, consulta[Considerazioni sulla sicurezza per EKS Capabilities](capabilities-security.md). Per i modelli di architettura multi-cluster, vedi[Considerazioni sulle funzionalità EKS](capabilities-considerations.md).

## Casi di utilizzo comune
<a name="_common_use_cases"></a>

 **GitOps per applicazioni e infrastruttura** 

Usa Argo CD per distribuire applicazioni e componenti operativi e ACK per gestire le configurazioni dei cluster e fornire l'infrastruttura, entrambi dai repository Git. L'intero stack (applicazioni, database, storage e rete) è definito come codice e distribuito automaticamente.

Esempio: un team di sviluppo invia modifiche a Git. Argo CD distribuisce l'applicazione aggiornata e ACK fornisce un nuovo database RDS con la configurazione corretta. Tutte le modifiche sono verificabili, reversibili e coerenti in tutti gli ambienti.

 **Progettazione della piattaforma con self-service** 

Usa kro per creare risorse personalizzate APIs che compongono risorse ACK e Kubernetes. I team della piattaforma definiscono i modelli approvati con guardrail. I team addetti alle applicazioni utilizzano soluzioni semplici e di alto livello APIs per fornire stack completi.

Esempio: un team della piattaforma crea un'API "WebApplication" che fornisce un bucket Deployment, Service, Ingress e S3. Gli sviluppatori utilizzano questa API senza dover comprendere la complessità o le autorizzazioni sottostanti. AWS 

 **Gestione delle applicazioni multi-cluster** 

Usa Argo CD per distribuire applicazioni su più cluster EKS in diverse regioni o account. Gestisci tutte le implementazioni da una singola istanza Argo CD con policy e flussi di lavoro coerenti.

Esempio: distribuisci la stessa applicazione in cluster di sviluppo, gestione temporanea e produzione in più regioni. Argo CD assicura che ogni ambiente rimanga sincronizzato con il ramo Git corrispondente.

 **Gestione multi-cluster** 

Usa ACK per definire e fornire i cluster EKS, kro per personalizzare le configurazioni dei cluster con standard organizzativi e Argo CD per gestire il ciclo di vita e la configurazione dei cluster. Ciò consente la gestione dei end-to-end cluster dalla creazione fino alle operazioni in corso.

Esempio: definire i cluster EKS utilizzando ACK e kro per fornire e gestire l'infrastruttura dei cluster, definire gli standard organizzativi per il networking, le politiche di sicurezza, i componenti aggiuntivi e altre configurazioni. Usa Argo CD per creare e gestire continuamente cluster, configurazioni e aggiornamenti delle versioni di Kubernetes in tutta la tua flotta sfruttando standard coerenti e la gestione automatizzata del ciclo di vita.

 **Migrazioni e modernizzazione** 

Semplifica la migrazione a EKS con il provisioning delle risorse cloud e i flussi di lavoro nativi. GitOps Usa ACK per adottare AWS le risorse esistenti senza ricrearle e Argo CD per rendere operative le distribuzioni dei carichi di lavoro da Git.

Esempio: un team che esegue la migrazione EC2 da EKS adotta i database RDS e i bucket S3 esistenti utilizzando ACK, quindi utilizza Argo CD per distribuire applicazioni containerizzate da Git. Il percorso di migrazione è chiaro e le operazioni sono standardizzate sin dal primo giorno.

 **Account e Bootstrapping regionale** 

Automatizza l'implementazione dell'infrastruttura tra account e regioni utilizzando insieme Argo CD e ACK. Definisci la tua infrastruttura come codice in Git e lascia che siano le funzionalità a gestire l'implementazione e la gestione.

Esempio: un team della piattaforma gestisce repository Git che definiscono configurazioni di account standard, ruoli IAMVPCs, istanze RDS e stack di monitoraggio. Argo CD implementa automaticamente queste configurazioni su nuovi account e regioni, garantendo la coerenza e riducendo i tempi di configurazione manuale da giorni a minuti.

# Lavorare con le risorse di capacità
<a name="working-with-capabilities"></a>

Questo argomento descrive le operazioni comuni per la gestione delle risorse funzionali per tutti i tipi di capacità.

## Risorse di funzionalità EKS
<a name="_eks_capability_resources"></a>

Le funzionalità EKS sono AWS risorse che abilitano funzionalità gestite sul tuo cluster Amazon EKS. Le funzionalità vengono eseguite in EKS, eliminando la necessità di installare e gestire controller e altri componenti operativi sui nodi di lavoro. Le funzionalità vengono create per uno specifico cluster EKS e rimangono associate a quel cluster per l'intero ciclo di vita.

Ogni risorsa funzionale ha:
+ Un nome univoco all'interno del cluster
+ Un tipo di funzionalità (ACK, ARGOCD o KRO)
+ Un Amazon Resource Name (ARN), che specifica sia il nome che il tipo
+ Un ruolo IAM basato sulla capacità
+ Uno stato che indica il suo stato attuale
+ Configurazione, generica e specifica per il tipo di funzionalità

## Comprensione dello stato delle capacità
<a name="_understanding_capability_status"></a>

Le risorse di capacità hanno uno stato che indica il loro stato attuale. È possibile visualizzare lo stato e l'integrità delle funzionalità nella console EKS o utilizzando la AWS CLI.

 **Console**:

1. Apri la console Amazon EKS a https://console.aws.amazon.com/eks/ home\$1/clusters.

1. Seleziona il nome del cluster.

1. Scegli la scheda **Capacità** per visualizzare lo stato di tutte le funzionalità.

1. Per informazioni dettagliate sullo stato di salute, scegli la scheda **Osservabilità**, quindi **Monitor cluster**, quindi la scheda **Capacità**.

 ** AWS CLI:**

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-capability-name
```

### Stati delle capacità
<a name="_capability_statuses"></a>

 **CREAZIONE: La** funzionalità è in fase di configurazione. Puoi allontanarti dalla console: la funzionalità continuerà a creare in background.

 **ATTIVA**: La funzionalità è attiva e pronta per l'uso. Se le risorse non funzionano come previsto, controlla lo stato delle risorse e le autorizzazioni IAM. Per ulteriori informazioni, consulta [Risoluzione dei problemi delle funzionalità EKS](capabilities-troubleshooting.md).

 **AGGIORNAMENTO**: vengono applicate le modifiche alla configurazione. Attendi che lo stato ritorni a`ACTIVE`.

 **ELIMINAZIONE**: la funzionalità viene rimossa dal cluster.

 **CREATE\$1FAILED**: l'installazione ha rilevato un errore. Le cause più comuni includono:
+ La politica di fiducia dei ruoli IAM è errata o mancante
+ Il ruolo IAM non esiste o non è accessibile
+ Problemi di accesso al cluster
+ Parametri di configurazione non validi

Consulta la sezione relativa allo stato delle funzionalità per dettagli specifici sugli errori.

 **UPDATE\$1FAILED: aggiornamento della configurazione non riuscito**. Controlla la sezione sullo stato delle funzionalità per i dettagli e verifica le autorizzazioni IAM.

**Suggerimento**  
Per una guida dettagliata alla risoluzione dei problemi, consulta:  
 [Risoluzione dei problemi delle funzionalità EKS](capabilities-troubleshooting.md)- Risoluzione dei problemi generali relativi alle funzionalità
 [Risolvi i problemi relativi alle funzionalità ACK](ack-troubleshooting.md)- Problemi specifici dell'ACK
 [Risolvi i problemi relativi alle funzionalità di Argo CD](argocd-troubleshooting.md)- Problemi specifici di Argo CD
 [Risolvi i problemi relativi alle funzionalità kro](kro-troubleshooting.md)- problemi specifici per kro

## Crea funzionalità
<a name="_create_capabilities"></a>

Per creare una funzionalità sul tuo cluster, consulta i seguenti argomenti:
+  [Crea una funzionalità ACK](create-ack-capability.md)— Crea una funzionalità ACK per gestire AWS le risorse utilizzando Kubernetes APIs
+  [Crea una funzionalità Argo CD](create-argocd-capability.md)— Crea una funzionalità Argo CD per la distribuzione continua GitOps 
+  [Crea una funzionalità kro](create-kro-capability.md)— Crea una funzionalità kro per la composizione e l'orchestrazione delle risorse

## Elenca le funzionalità
<a name="_list_capabilities"></a>

È possibile elencare tutte le risorse funzionali presenti in un cluster.

### Console
<a name="_console"></a>

1. Apri la console Amazon EKS a https://console.aws.amazon.com/eks/ home\$1/clusters.

1. Seleziona il nome del cluster per aprire la pagina dei dettagli del cluster.

1. Scegli la scheda **Funzionalità**.

1. Visualizza le risorse relative alle funzionalità in **Funzionalità gestite**.

### AWS CLI
<a name="shared_aws_cli"></a>

Usa il `list-capabilities` comando per visualizzare tutte le funzionalità del tuo cluster. Sostituiscilo *region-code* con la AWS regione in cui si trova il cluster e sostituiscilo *my-cluster* con il nome del cluster.

```
aws eks list-capabilities \
  --region region-code \
  --cluster-name my-cluster
```

```
{
    "capabilities": [
        {
            "capabilityName": "my-ack",
            "arn": "arn:aws:eks:us-west-2:111122223333:capability/my-cluster/ack/my-ack/abc123",
            "type": "ACK",
            "status": "ACTIVE",
            "createdAt": "2025-11-02T10:30:00.000000-07:00",
            "modifiedAt": "2025-11-02T10:32:15.000000-07:00",
        },
        {
            "capabilityName": "my-kro",
            "arn": "arn:aws:eks:us-west-2:111122223333:capability/my-cluster/kro/my-kro/abc123",
            "type": "KRO",
            "status": "ACTIVE",
            "version": "v0.6.3",
            "createdAt": "2025-11-02T10:30:00.000000-07:00",
            "modifiedAt": "2025-11-02T10:32:15.000000-07:00",
        },
        {
            "capabilityName": "my-argocd",
            "arn": "arn:aws:eks:us-west-2:111122223333:capability/my-cluster/argocd/my-argocd/abc123",
            "type": "ARGOCD",
            "status": "ACTIVE",
            "version": "3.1.8-eks-1",
            "createdAt": "2025-11-21T08:22:28.486000-05:00",
            "modifiedAt": "2025-11-21T08:22:28.486000-05:00"
        }
    ]
}
```

## Descrivi una funzionalità
<a name="_describe_a_capability"></a>

Ottieni informazioni dettagliate su una funzionalità specifica, inclusi la configurazione e lo stato.

### Console
<a name="_console_2"></a>

1. Apri la console Amazon EKS a https://console.aws.amazon.com/eks/ home\$1/clusters.

1. Seleziona il nome del cluster per aprire la pagina dei dettagli del cluster.

1. Scegli la scheda **Funzionalità**.

1. Scegli la funzionalità che desideri visualizzare in **Funzionalità gestite**.

1. Visualizza i dettagli delle funzionalità, tra cui lo stato, la configurazione e l'ora di creazione.

### AWS CLI
<a name="shared_aws_cli"></a>

Utilizzate il `describe-capability` comando per visualizzare informazioni dettagliate. Sostituisci *region-code* con la AWS regione in cui si trova il cluster, sostituisci *my-cluster* con il nome del cluster e sostituisci *capability-name* con il nome della funzionalità (ack, argocd o kro).

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name capability-name
```

 **Output di esempio:** 

```
{
  "capability": {
    "capabilityName": "my-ack",
    "capabilityArn": "arn:aws:eks:us-west-2:111122223333:capability/my-cluster/ack/my-ack/abc123",
    "clusterName": "my-cluster",
    "type": "ACK",
    "roleArn": "arn:aws:iam::111122223333:role/AmazonEKSCapabilityACKRole",
    "status": "ACTIVE",
    "configuration": {},
    "tags": {},
    "health": {
      "issues": []
    },
    "createdAt": "2025-11-19T17:11:30.242000-05:00",
    "modifiedAt": "2025-11-19T17:11:30.242000-05:00",
    "deletePropagationPolicy": "RETAIN"
  }
}
```

## Aggiorna la configurazione di una funzionalità
<a name="_update_the_configuration_of_a_capability"></a>

È possibile aggiornare alcuni aspetti della configurazione di una funzionalità dopo la creazione. Le opzioni di configurazione specifiche variano in base al tipo di funzionalità.

**Nota**  
Le risorse di funzionalità EKS sono completamente gestite, comprese le patch e gli aggiornamenti delle versioni. L'aggiornamento di una funzionalità aggiornerà la configurazione delle risorse e non comporterà aggiornamenti di versione dei componenti delle funzionalità gestite.

### AWS CLI
<a name="shared_aws_cli"></a>

Usa il `update-capability` comando per modificare una funzionalità:

```
aws eks update-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name capability-name \
  --role-arn arn:aws:iam::[.replaceable]111122223333:role/NewCapabilityRole
```

**Nota**  
Non tutte le proprietà delle funzionalità possono essere aggiornate dopo la creazione. Fate riferimento alla documentazione specifica sulle funzionalità per i dettagli su cosa è possibile modificare.

## Eliminare una funzionalità
<a name="_delete_a_capability"></a>

Quando non è più necessaria una funzionalità nel cluster, è possibile eliminare la risorsa relativa alla capacità.

**Importante**  
 **Eliminare le risorse del cluster prima di eliminare la funzionalità.**   
L'eliminazione di una risorsa di capacità non elimina automaticamente le risorse create tramite tale funzionalità:  
Tutte le Kubernetes Custom Resource Definitions (CRDs) rimangono installate nel cluster.
Le risorse ACK rimangono nel cluster e le AWS risorse corrispondenti rimangono nel tuo account
Le applicazioni Argo CD e le relative risorse Kubernetes rimangono nel cluster
kro ResourceGraphDefinitions e le istanze rimangono nel cluster
È necessario eliminare queste risorse prima di eliminare la funzionalità per evitare risorse orfane.  
Facoltativamente, puoi scegliere di conservare AWS le risorse associate alle risorse ACK Kubernetes. [Consulta](ack-considerations.md) le considerazioni su ACK 

### Console
<a name="_console_3"></a>

1. Apri la console Amazon EKS a https://console.aws.amazon.com/eks/ home\$1/clusters.

1. Seleziona il nome del cluster per aprire la pagina dei dettagli del cluster.

1. Scegli la scheda **Funzionalità**.

1. Seleziona la funzionalità che desideri eliminare dall'elenco delle **funzionalità gestite**.

1. Scegli la **funzionalità Elimina**.

1. Nella finestra di dialogo di conferma, digita il nome della funzionalità per confermare l'eliminazione.

1. Scegli **Elimina**.

### AWS CLI
<a name="shared_aws_cli"></a>

Usa il `delete-capability` comando per eliminare una risorsa di funzionalità:

Sostituisci *region-code* con la AWS regione in cui si trova il cluster, sostituisci *my-cluster* con il nome del cluster e sostituisci *capability-name* con il nome della funzionalità da eliminare.

```
aws eks delete-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name capability-name
```

## Fasi successive
<a name="_next_steps"></a>
+  [Capability: risorse Kubernetes](capability-kubernetes-resources.md)— Scopri le risorse Kubernetes fornite da ciascun tipo di funzionalità
+  [Concetti ACK](ack-concepts.md)— Comprendi i concetti e il ciclo di vita delle risorse di ACK
+  [Lavorare con Argo CD](working-with-argocd.md)— Utilizzo delle funzionalità di Argo CD per i flussi di lavoro GitOps 
+  [concetti kro](kro-concepts.md)— Comprendi i concetti kro e la composizione delle risorse

# Capability: risorse Kubernetes
<a name="capability-kubernetes-resources"></a>

Dopo aver abilitato una funzionalità sul cluster, molto spesso interagirai con essa creando e gestendo risorse personalizzate Kubernetes nel cluster. Ogni funzionalità fornisce il proprio set di definizioni di risorse personalizzate (CRDs) che estendono l'API Kubernetes con funzionalità specifiche per funzionalità.

## Risorse Argo CD
<a name="_argo_cd_resources"></a>

Quando abiliti la funzionalità Argo CD, puoi creare e gestire le seguenti risorse Kubernetes:

 **Applicazione**   
Definisce una distribuzione da un repository Git a un cluster di destinazione. `Application`le risorse specificano il repository di origine, lo spazio dei nomi di destinazione e la politica di sincronizzazione. È possibile creare fino a 1000 `Application` risorse per istanza con funzionalità Argo CD.

 **ApplicationSet**   
Genera più `Application` risorse a partire da modelli, abilitando implementazioni multi-cluster e multiambiente. `ApplicationSet`le risorse utilizzano i generatori per creare `Application` risorse in modo dinamico sulla base di elenchi di cluster, directory Git o altre fonti.

 **AppProject**   
Fornisce il raggruppamento logico e il controllo degli accessi alle risorse. `Application` `AppProject`le risorse definiscono quali repository, cluster e namespace possono essere utilizzati dalle `Application` risorse, abilitando limiti di multi-tenancy e sicurezza.

`Application`Risorsa di esempio:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/org/repo
    targetRevision: main
    path: manifests
  destination:
    server: https://kubernetes.default.svc
    namespace: production
```

Per ulteriori informazioni sulle risorse e sui concetti di Argo CD, vedere[Concetti di Argo CD](argocd-concepts.md).

## risorse kro
<a name="_kro_resources"></a>

Quando abiliti la funzionalità kro, puoi creare e gestire le seguenti risorse Kubernetes:

 **ResourceGraphDefinition (RGD)**   
Definisce un'API personalizzata che compone più Kubernetes e AWS risorse in un'astrazione di livello superiore. I team della piattaforma creano `ResourceGraphDefinition` risorse per fornire modelli riutilizzabili con guardrail.

 **Istanze di risorse personalizzate**   
Dopo aver creato una `ResourceGraphDefinition` risorsa, puoi creare istanze dell'API personalizzata definita da`ResourceGraphDefinition`. kro crea e gestisce automaticamente le risorse specificate in. `ResourceGraphDefinition`

Risorsa di esempio`ResourceGraphDefinition`:

```
apiVersion: kro.run/v1alpha1
kind: ResourceGraphDefinition
metadata:
  name: web-application
spec:
  schema:
    apiVersion: v1alpha1
    kind: WebApplication
    spec:
      name: string
      replicas: integer
  resources:
    - id: deployment
      template:
        apiVersion: apps/v1
        kind: Deployment
        # ... deployment spec
    - id: service
      template:
        apiVersion: v1
        kind: Service
        # ... service spec
```

Istanza di `WebApplication` esempio:

```
apiVersion: v1alpha1
kind: WebApplication
metadata:
  name: my-web-app
  namespace: default
spec:
  name: my-web-app
  replicas: 3
```

Quando applichi questa istanza, kro crea automaticamente `Service` le risorse `Deployment` e definite in. `ResourceGraphDefinition`

Per ulteriori informazioni sulle risorse e sui concetti di kro, consulta. [concetti kro](kro-concepts.md)

## Risorse ACK
<a name="_ack_resources"></a>

Quando abiliti la funzionalità ACK, puoi creare e gestire AWS risorse utilizzando risorse personalizzate Kubernetes. ACK ne fornisce oltre 200 CRDs per più di 50 AWS servizi, consentendoti di definire AWS le risorse insieme ai carichi di lavoro Kubernetes e di gestire risorse di infrastruttura dedicate con Kubernetes. AWS 

Esempi di risorse ACK:

 **Bucket S3**   
 `Bucket`le risorse creano e gestiscono bucket Amazon S3 con politiche di controllo delle versioni, crittografia e ciclo di vita.

 **RDS DBInstance**   
 `DBInstance`fornitura di risorse e gestione di istanze di database Amazon RDS con backup automatici e finestre di manutenzione.

 **Tabella DynamoDB**   
 `Table`le risorse creano e gestiscono tabelle DynamoDB con capacità fornita o su richiesta.

 **Ruolo IAM**   
 `Role`le risorse definiscono i ruoli IAM con policy di fiducia e policy di autorizzazione per l'accesso ai servizi. AWS 

 **Funzione Lambda**   
 `Function`le risorse creano e gestiscono funzioni Lambda con configurazione di codice, runtime e ruolo di esecuzione.

Esempio di specificazione di una `Bucket` risorsa:

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: my-app-bucket
spec:
  name: my-unique-bucket-name-12345
  versioning:
    status: Enabled
  encryption:
    rules:
      - applyServerSideEncryptionByDefault:
          sseAlgorithm: AES256
```

Per ulteriori informazioni sulle risorse e sui concetti di ACK, vedere[Concetti ACK](ack-concepts.md).

## Limiti delle risorse
<a name="_resource_limits"></a>

Le funzionalità EKS hanno i seguenti limiti di risorse:

 **Limiti di utilizzo di Argo CD**:
+ Massimo 1000 `Application` risorse per istanza con funzionalità Argo CD
+ Massimo 100 cluster remoti configurati per istanza con funzionalità Argo CD

 Limiti di **configurazione delle risorse**:
+ Massimo 150 risorse Kubernetes per `Application` risorsa in Argo CD
+ Massimo 64 risorse Kubernetes per mese `ResourceGraphDefinition`

**Nota**  
Questi limiti si applicano al numero di risorse gestite da ciascuna istanza di funzionalità. Se hai bisogno di limiti più elevati, puoi distribuire funzionalità su più cluster.

## Fasi successive
<a name="_next_steps"></a>

Per le attività specifiche relative alle funzionalità e la configurazione avanzata, consulta i seguenti argomenti:
+  [Concetti ACK](ack-concepts.md)— Comprendi i concetti e il ciclo di vita delle risorse di ACK
+  [Lavorare con Argo CD](working-with-argocd.md)— Utilizzo delle funzionalità di Argo CD per i flussi di lavoro GitOps 
+  [concetti kro](kro-concepts.md)— Comprendi i concetti kro e la composizione delle risorse

# Considerazioni sulle funzionalità EKS
<a name="capabilities-considerations"></a>

Questo argomento tratta importanti considerazioni sull'utilizzo di EKS Capabilities, tra cui la progettazione del controllo degli accessi, la scelta tra EKS Capabilities e soluzioni autogestite, i modelli architettonici per le implementazioni multi-cluster e le migliori pratiche operative.

## Capability, ruoli IAM e Kubernetes RBAC
<a name="_capability_iam_roles_and_kubernetes_rbac"></a>

Ogni risorsa di funzionalità EKS ha un ruolo IAM con funzionalità configurate. Il ruolo di capacità viene utilizzato per concedere le autorizzazioni di AWS servizio alle funzionalità EKS di agire per conto dell'utente. Ad esempio, per utilizzare EKS Capability for ACK per gestire i bucket Amazon S3, concederai le autorizzazioni amministrative di S3 Bucket alla funzionalità, consentendole di creare e gestire i bucket.

Una volta configurata la funzionalità, le risorse S3 in AWS possono essere create e gestite con risorse personalizzate Kubernetes nel cluster. Kubernetes RBAC è il meccanismo di controllo degli accessi all'interno del cluster che consente di determinare quali utenti e gruppi possono creare e gestire tali risorse personalizzate. Ad esempio, concedi a utenti e gruppi Kubernetes RBAC specifici le autorizzazioni per creare e gestire risorse nei namespace di tua scelta. `Bucket`

In questo modo, IAM e Kubernetes RBAC sono due parti del sistema di controllo degli accessi che regola le autorizzazioni relative alle funzionalità e alle risorse EKS. end-to-end È importante progettare la giusta combinazione di autorizzazioni IAM e policy di accesso RBAC per il tuo caso d'uso.

Per ulteriori informazioni sulla capacità, i ruoli IAM e le autorizzazioni Kubernetes, consulta. [Considerazioni sulla sicurezza per EKS Capabilities](capabilities-security.md)

## Modelli di architettura multicluster
<a name="_multi_cluster_architecture_patterns"></a>

Quando distribuisci funzionalità su più cluster, considera questi modelli architettonici comuni:

 **Hub and Spoke con gestione centralizzata** 

Esegui tutte e tre le funzionalità in un cluster gestito centralmente per orchestrare i carichi di lavoro e gestire l'infrastruttura cloud su più cluster di carichi di lavoro.
+ Argo CD sul cluster di gestione distribuisce applicazioni su cluster di carico di lavoro in diverse regioni o account
+ ACK sul cluster di gestione fornisce AWS risorse (RDS, S3, IAM) per tutti i cluster
+ kro sul cluster di gestione crea astrazioni di piattaforma portatili che funzionano su tutti i cluster

Questo modello centralizza il carico di lavoro e la gestione dell'infrastruttura cloud e può semplificare le operazioni per le organizzazioni che gestiscono molti cluster.

 **Decentralizzato GitOps** 

I carichi di lavoro e l'infrastruttura cloud sono gestiti dalle funzionalità dello stesso cluster in cui vengono eseguiti i carichi di lavoro.
+ Argo CD gestisce le risorse delle applicazioni sul cluster locale.
+ Le risorse ACK vengono utilizzate per esigenze di cluster e carichi di lavoro.
+ Le astrazioni della piattaforma kro vengono installate e orchestrano le risorse locali.

Questo modello decentralizza le operazioni, con i team che gestiscono i propri servizi di piattaforma dedicati in uno o più cluster.

 **Hub and Spoke con implementazione ACK ibrida** 

Combina modelli centralizzati e decentralizzati, con implementazioni di applicazioni centralizzate e gestione delle risorse in base all'ambito e alla proprietà.
+ Cluster di hub:
  + Argo CD gestisce le GitOps implementazioni nel cluster locale e in tutti i cluster di carichi di lavoro remoti
  + ACK viene utilizzato nel cluster di gestione per le risorse con ambito amministrativo (database di produzione, ruoli IAM,) VPCs
  + kro viene utilizzato nel cluster di gestione per le astrazioni riutilizzabili della piattaforma
+ Cluster Spoke:
  + I carichi di lavoro sono gestiti tramite Argo CD sul cluster di hub centralizzato
  + ACK viene utilizzato localmente per le risorse relative ai carichi di lavoro (bucket S3, istanze, code SQS) ElastiCache 
  + kro viene utilizzato localmente per la composizione delle risorse e i modelli di blocchi costitutivi

Questo modello separa le preoccupazioni: i team di piattaforma gestiscono l'infrastruttura critica centralmente sui cluster di gestione, includendo facoltativamente i cluster di carichi di lavoro, mentre i team applicativi specificano e gestiscono le risorse cloud insieme ai carichi di lavoro.

 **Scelta di un pattern** 

Considerate questi fattori nella scelta di un'architettura:
+  **Struttura organizzativa**: i team di piattaforma centralizzati preferiscono modelli di hub; i team decentralizzati possono preferire funzionalità per cluster
+  **Ambito delle risorse: le risorse con ambito** amministrativo (database, IAM) spesso traggono vantaggio dalla gestione centralizzata; le risorse dei carichi di lavoro (bucket, code) possono essere gestite localmente
+  **Self-service**: i team di piattaforma centralizzati possono creare e distribuire risorse prescrittive personalizzate per consentire un self-service sicuro delle risorse cloud per le esigenze di carichi di lavoro comuni
+  **Gestione della flotta di cluster: i cluster di gestione** centralizzati forniscono un piano di controllo di proprietà del cliente per la gestione della flotta dei cluster EKS, insieme ad altre risorse destinate all'amministrazione
+  **Requisiti di conformità**: alcune organizzazioni richiedono un controllo centralizzato per l'audit e la governance
+  **Complessità operativa**: un minor numero di istanze di funzionalità semplifica le operazioni ma può creare colli di bottiglia

**Nota**  
Puoi iniziare con uno schema ed evolvere verso un altro man mano che la tua piattaforma matura. Le funzionalità sono indipendenti: puoi distribuirle in modo diverso tra i cluster in base alle tue esigenze.

## Confronto tra le funzionalità EKS e le soluzioni autogestite
<a name="_comparing_eks_capabilities_to_self_managed_solutions"></a>

EKS Capabilities offre esperienze completamente gestite per i più diffusi strumenti e controller Kubernetes eseguiti in EKS. Ciò si differenzia dalle soluzioni autogestite, che vengono installate e utilizzate nel cluster.

### Principali differenze
<a name="_key_differences"></a>

 **Implementazione e gestione** 

 AWS gestisce completamente EKS Capabilities senza che sia richiesta l'installazione, la configurazione o la manutenzione dei componenti software. AWS installa e gestisce automaticamente tutte le Kubernetes Custom Resource Definitions (CRDs) richieste nel cluster.

Con le soluzioni autogestite, puoi installare e configurare il software del cluster utilizzando Helm charts, kubectl o altri operatori. Hai il pieno controllo sul ciclo di vita del software e sulla configurazione di runtime delle tue soluzioni autogestite, fornendo personalizzazioni a qualsiasi livello della soluzione.

 **Operazioni e manutenzione** 

 AWS gestisce l'applicazione di patch e altre operazioni del ciclo di vita del software per EKS Capabilities, con aggiornamenti automatici e patch di sicurezza. EKS Capabilities è integrato con AWS funzionalità per configurazioni semplificate, offre elevata disponibilità e tolleranza ai guasti integrate ed elimina la risoluzione dei problemi all'interno del cluster dei carichi di lavoro dei controller.

Le soluzioni autogestite richiedono il monitoraggio dello stato e dei registri dei componenti, l'applicazione di patch di sicurezza e aggiornamenti delle versioni, la configurazione dell'alta disponibilità con più repliche e budget per le interruzioni dei pod, la risoluzione dei problemi e la risoluzione dei problemi relativi al carico di lavoro dei controller e la gestione di release e versioni. Avete il pieno controllo sulle vostre implementazioni, ma ciò richiede spesso soluzioni su misura per l'accesso privato ai cluster e altre integrazioni che devono essere in linea con gli standard organizzativi e i requisiti di conformità in materia di sicurezza.

 **Consumo di risorse** 

EKS Capabilities viene eseguito in EKS e all'esterno dei cluster, liberando risorse dei nodi e delle risorse del cluster. Le funzionalità non utilizzano risorse del carico di lavoro del cluster, non consumano CPU o memoria sui nodi di lavoro, scalano automaticamente e hanno un impatto minimo sulla pianificazione della capacità del cluster.

Le soluzioni autogestite eseguono controller e altri componenti sui nodi di lavoro, consumando direttamente le risorse dei nodi di lavoro, il cluster IPs e altre risorse del cluster. La gestione dei servizi cluster richiede la pianificazione della capacità per i relativi carichi di lavoro e richiede la pianificazione e la configurazione delle richieste e dei limiti delle risorse per gestire i requisiti di scalabilità e alta disponibilità.

 **Supporto funzionalità** 

Essendo funzionalità di servizio completamente gestite, EKS Capabilities sono per loro natura convincenti rispetto alle soluzioni autogestite. Sebbene le funzionalità supportino la maggior parte delle funzionalità e dei casi d'uso, vi sarà una differenza nella copertura rispetto alle soluzioni autogestite.

Con le soluzioni autogestite, puoi controllare completamente la configurazione, le funzionalità opzionali e altri aspetti della funzionalità del tuo software. È possibile scegliere di eseguire immagini personalizzate, personalizzare tutti gli aspetti della configurazione e controllare completamente la funzionalità della soluzione autogestita.

 **Considerazioni sui costi** 

Ogni risorsa di funzionalità EKS ha un costo orario correlato, che varia in base al tipo di funzionalità. Le risorse del cluster gestite dalla funzionalità hanno inoltre un costo orario associato ai rispettivi prezzi. Per ulteriori informazioni, consultare [Prezzi di Amazon EKS](https://aws.amazon.com/eks/pricing/).

Le soluzioni autogestite non hanno costi diretti legati agli AWS addebiti, ma pagano per le risorse di elaborazione del cluster utilizzate dai controller e dai relativi carichi di lavoro. Oltre al consumo di risorse di nodi e cluster, il costo totale di proprietà delle soluzioni autogestite include i costi operativi e le spese di manutenzione, risoluzione dei problemi e supporto.

### Scelta tra EKS Capabilities e soluzioni autogestite
<a name="_choosing_between_eks_capabilities_and_self_managed_solutions"></a>

 **EKS Capabilities** Prendete in considerazione questa scelta quando desiderate ridurre il sovraccarico operativo e concentrarvi sul valore differenziato del software e dei sistemi, piuttosto che sulle operazioni della piattaforma in cluster per requisiti fondamentali. Utilizzate EKS Capabilities quando desiderate ridurre al minimo l'onere operativo delle patch di sicurezza e della gestione del ciclo di vita del software, liberare risorse di nodi e cluster per i carichi di lavoro delle applicazioni, semplificare la configurazione e la gestione della sicurezza e beneficiare della copertura di supporto. AWS Le funzionalità EKS sono ideali per la maggior parte dei casi d'uso in produzione e rappresentano l'approccio consigliato per le nuove implementazioni.

 **Soluzioni autogestite** Prendi in considerazione questa scelta quando hai bisogno di versioni specifiche dell'API di risorsa Kubernetes, build di controller personalizzate, se disponi di automazione e strumenti esistenti basati su implementazioni autogestite o hai bisogno di una personalizzazione approfondita delle configurazioni di runtime dei controller. Le soluzioni autogestite offrono flessibilità per casi d'uso specializzati e hai il controllo completo sulla configurazione di implementazione e runtime.

**Nota**  
EKS Capabilities può coesistere nel cluster con soluzioni autogestite ed è possibile effettuare migrazioni graduali.

### Confronti specifici per funzionalità
<a name="_capability_specific_comparisons"></a>

Per confronti dettagliati, tra cui funzionalità specifiche delle funzionalità, differenze a monte e percorsi di migrazione, consulta:
+  [Confronto tra la funzionalità EKS per ACK e l'ACK autogestito](ack-comparison.md) 
+  [Confronto tra la funzionalità EKS per Argo CD e Argo CD autogestita](argocd-comparison.md) 
+  [Confronto tra EKS Capability for kro e kro autogestito](kro-comparison.md) 

# Implementa AWS risorse da Kubernetes con AWS Controllers for Kubernetes (ACK)
<a name="ack"></a>

 AWS Controllers for Kubernetes (ACK) ti consente di definire e gestire le risorse di servizio direttamente da Kubernetes. AWS Con AWS Controllers for Kubernetes (ACK), puoi gestire le risorse dei carichi di lavoro e l'infrastruttura cloud utilizzando le risorse personalizzate di Kubernetes, insieme ai carichi di lavoro delle applicazioni utilizzando Kubernetes e strumenti familiari. APIs 

Con EKS Capabilities, ACK è completamente gestito da, eliminando la necessità di installare AWS, mantenere e scalare i controller ACK sui cluster.

## Come funziona ACK
<a name="_how_ack_works"></a>

ACK traduce le specifiche delle risorse personalizzate di Kubernetes in chiamate API. AWS Quando crei, aggiorni o elimini una risorsa personalizzata Kubernetes che rappresenta una risorsa di AWS servizio, ACK effettua le chiamate AWS API necessarie per creare, aggiornare o eliminare la risorsa. AWS 

Ogni AWS risorsa supportata da ACK ha una propria definizione di risorsa personalizzata (CRD) che definisce lo schema dell'API Kubernetes per specificarne la configurazione. Ad esempio, ACK fornisce CRDs S3 tra cui bucket, bucket policy e altre risorse S3.

ACK riconcilia continuamente lo stato delle AWS risorse con lo stato desiderato definito nelle risorse personalizzate Kubernetes. Se una risorsa si discosta dallo stato desiderato, ACK lo rileva e intraprende azioni correttive per riportarla all'allineamento. Le modifiche alle risorse Kubernetes si riflettono immediatamente sullo stato della AWS risorsa, mentre il rilevamento passivo della deriva e la correzione delle modifiche alle AWS risorse a monte possono richiedere fino a 10 ore (il periodo di risincronizzazione), ma in genere avvengono molto prima.

 **Esempio di manifesto delle risorse di S3 Bucket** 

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: my-ack-bucket
spec:
  name: my-unique-bucket-name
```

Quando applichi questa risorsa personalizzata al tuo cluster, ACK crea un bucket Amazon S3 nel tuo account se non esiste ancora. Le modifiche successive a questa risorsa, ad esempio la specificazione di un livello di storage non predefinito o l'aggiunta di una policy, verranno applicate alla risorsa S3 in. AWS Quando questa risorsa viene eliminata dal cluster, il bucket S3 in AWS viene eliminato per impostazione predefinita.

## Vantaggi di ACK
<a name="_benefits_of_ack"></a>

ACK offre la gestione AWS delle risorse nativa di Kubernetes, che consente di gestire AWS le risorse utilizzando gli stessi Kubernetes APIs e gli stessi strumenti utilizzati per le applicazioni. Questo approccio unificato semplifica il flusso di lavoro di gestione dell'infrastruttura eliminando la necessità di passare da uno strumento all'altro o di apprendere sistemi separati. infrastructure-as-code Definisci AWS le tue risorse in modo dichiarativo nei manifesti di Kubernetes, abilitando i GitOps flussi di lavoro e l'infrastruttura come pratiche di codice che si integrano perfettamente con i processi di sviluppo esistenti.

ACK riconcilia continuamente lo stato desiderato delle AWS risorse con il loro stato effettivo, correggendo le deviazioni e garantendo la coerenza nell'intera infrastruttura. Questa riconciliazione continua significa che le out-of-band modifiche imperative alle AWS risorse vengono ripristinate automaticamente in modo che corrispondano alla configurazione dichiarata, mantenendo l'integrità dell'infrastruttura sotto forma di codice. È possibile configurare ACK per gestire le risorse su più AWS account e regioni, abilitando architetture multi-account complesse senza strumenti aggiuntivi.

Per le organizzazioni che migrano da altri strumenti di gestione dell'infrastruttura, ACK supporta l'adozione delle risorse, permettendo di affidare AWS le risorse esistenti alla gestione ACK senza doverle ricreare. ACK fornisce anche risorse di sola lettura per l'osservazione AWS delle risorse senza accesso alle modifiche e annotazioni per conservare facoltativamente le AWS risorse anche quando la risorsa Kubernetes viene eliminata dal cluster.

Per saperne di più e iniziare a usare EKS Capability for ACK, consulta e. [Concetti ACK](ack-concepts.md) [Considerazioni ACK per EKS](ack-considerations.md)

## AWS Servizi supportati
<a name="supported_shared_aws_services"></a>

ACK supporta un'ampia gamma di AWS servizi, tra cui, a titolo esemplificativo ma non esaustivo:
+ Amazon EC2
+ Simple Storage Service (Amazon S3)
+ Amazon RDS
+ Amazon DynamoDB
+ Amazon ElastiCache
+ Amazon EKS
+ Amazon SQS
+ Amazon SNS
+  AWS Lambda
+  AWS IAM

Tutti i AWS servizi elencati come Generally Available upstream sono supportati da EKS Capability for ACK. Per ulteriori informazioni, consulta l'[elenco completo dei AWS servizi supportati](https://aws-controllers-k8s.github.io/community/docs/community/services/).

## Integrazione con altre funzionalità gestite da EKS
<a name="_integration_with_other_eks_managed_capabilities"></a>

ACK si integra con altre funzionalità gestite da EKS.
+  **Argo CD**: utilizza Argo CD per gestire l'implementazione delle risorse ACK su più cluster, abilitando i flussi di GitOps lavoro per la tua infrastruttura. AWS 
  + ACK estende i vantaggi dell' GitOps abbinamento con ArgoCD, ma ACK non richiede l'integrazione con git.
+  **kro (Kube Resource Orchestrator)**: Usa kro per comporre risorse complesse a partire da risorse ACK, creando astrazioni di livello superiore che semplificano la gestione delle risorse.
  + Puoi creare risorse composite personalizzate con kro che definiscono sia le risorse che le risorse Kubernetes. AWS I membri del team possono utilizzare queste risorse personalizzate per distribuire rapidamente applicazioni complesse.

## Guida introduttiva a ACK
<a name="_getting_started_with_ack"></a>

Per iniziare a usare EKS Capability for ACK:

1. Crea e configura un ruolo di capacità IAM con le autorizzazioni necessarie affinché ACK gestisca AWS le risorse per tuo conto.

1.  [Crea una risorsa con funzionalità ACK](create-ack-capability.md) sul tuo cluster EKS tramite la AWS console, la AWS CLI o la tua infrastruttura preferita come strumento di codice.

1. Applica le risorse personalizzate Kubernetes al tuo cluster per iniziare a gestire le tue risorse in Kubernetes. AWS 

# Crea una funzionalità ACK
<a name="create-ack-capability"></a>

Questo capitolo spiega come creare una funzionalità ACK sul tuo cluster Amazon EKS.

## Prerequisiti
<a name="_prerequisites"></a>

Prima di creare una funzionalità ACK, assicurati di avere:
+ Cluster Amazon EKS
+ Un ruolo di capacità IAM con autorizzazioni per ACK per gestire le AWS risorse
+ Autorizzazioni IAM sufficienti per creare risorse di funzionalità sui cluster EKS
+ Lo strumento CLI appropriato installato e configurato o l'accesso alla console EKS

Per istruzioni sulla creazione dello IAM Capability Role, consulta[Funzionalità Amazon EKS, ruolo IAM](capability-role.md).

**Importante**  
ACK è una funzionalità di gestione dell'infrastruttura che consente di creare, modificare ed eliminare AWS risorse. Si tratta di una funzionalità amministrativa che deve essere controllata con attenzione. Chiunque sia autorizzato a creare risorse Kubernetes nel tuo cluster può creare risorse in modo efficace tramite ACK, fatte salve AWS le autorizzazioni IAM Capability Role. Il ruolo IAM Capability che fornisci determina quali AWS risorse ACK può creare e gestire. Per indicazioni sulla creazione di un ruolo appropriato con autorizzazioni con privilegi minimi, consulta e. [Funzionalità Amazon EKS, ruolo IAM](capability-role.md) [Considerazioni sulla sicurezza per EKS Capabilities](capabilities-security.md)

## Scegli il tuo strumento
<a name="_choose_your_tool"></a>

È possibile creare una funzionalità ACK utilizzando Console di gestione AWS, AWS CLI o eksctl:
+  [Creare una funzionalità ACK utilizzando la console](ack-create-console.md)- Usa la console per un'esperienza guidata
+  [Crea una funzionalità ACK utilizzando la AWS CLI](ack-create-cli.md)- Usa la AWS CLI per lo scripting e l'automazione
+  [Crea una funzionalità ACK usando eksctl](ack-create-eksctl.md)- Usa eksctl per un'esperienza nativa di Kubernetes

## Cosa succede quando si crea una funzionalità ACK
<a name="_what_happens_when_you_create_an_ack_capability"></a>

Quando crei una funzionalità ACK:

1. EKS crea il servizio di funzionalità ACK e lo configura per monitorare e gestire le risorse nel cluster

1. Le definizioni di risorse personalizzate (CRDs) sono installate nel cluster

1. Viene creata automaticamente una voce di accesso per il tuo IAM Capability Role con policy di accesso specifiche per ciascuna funzionalità che concedono le autorizzazioni Kubernetes di base (vedi) [Considerazioni sulla sicurezza per EKS Capabilities](capabilities-security.md)

1. La funzionalità presuppone lo IAM Capability Role fornito dall'utente

1. ACK inizia a controllare le proprie risorse personalizzate nel cluster

1. Lo stato della capacità cambia da `CREATING` a `ACTIVE` 

Una volta attivo, è possibile creare risorse ACK personalizzate nel cluster per gestire AWS le risorse.

**Nota**  
La voce di accesso creata automaticamente include la voce `AmazonEKSACKPolicy` che concede le autorizzazioni ACK per la gestione AWS delle risorse. Alcune risorse ACK che fanno riferimento ai segreti di Kubernetes (come i database RDS con password) richiedono politiche di accesso aggiuntive. Per ulteriori informazioni sulle voci di accesso e su come configurare autorizzazioni aggiuntive, consulta. [Considerazioni sulla sicurezza per EKS Capabilities](capabilities-security.md)

## Fasi successive
<a name="_next_steps"></a>

Dopo aver creato la funzionalità ACK:
+  [Concetti ACK](ack-concepts.md)- Comprendi i concetti di ACK e inizia a usare le AWS risorse
+  [Concetti ACK](ack-concepts.md)- Scopri la riconciliazione, le esportazioni sul campo e i modelli di adozione delle risorse
+  [Configurare le autorizzazioni ACK](ack-permissions.md)- Configura le autorizzazioni IAM e i modelli multi-account

# Creare una funzionalità ACK utilizzando la console
<a name="ack-create-console"></a>

Questo argomento descrive come creare una funzionalità AWS Controllers for Kubernetes (ACK) utilizzando. Console di gestione AWS

## Crea la funzionalità ACK
<a name="_create_the_ack_capability"></a>

1. Apri la console Amazon EKS a https://console.aws.amazon.com/eks/ home\$1/clusters.

1. Seleziona il nome del cluster per aprire la pagina dei dettagli del cluster.

1. Scegli la scheda **Funzionalità**.

1. Nella barra di navigazione a sinistra, scegli ** AWS Controllers for Kubernetes** (ACK).

1. Scegli la funzionalità **Crea AWS controller per Kubernetes**.

1. **Per IAM Capability Role:**
   + Se disponi già di un IAM Capability Role, selezionalo dal menu a discesa
   + Se devi creare un ruolo, scegli **Crea ruolo di amministratore** 

     Questo apre la console IAM in una nuova scheda con la policy di fiducia precompilata e la policy `AdministratorAccess` gestita. Se preferisci, puoi deselezionare questa policy e aggiungere altre autorizzazioni.

     Dopo aver creato il ruolo, torna alla console EKS e il ruolo verrà selezionato automaticamente.
**Importante**  
La `AdministratorAccess` politica suggerita concede ampie autorizzazioni e ha lo scopo di semplificare l'avvio. Per uso in produzione, sostituiscila con una politica personalizzata che conceda solo le autorizzazioni necessarie per i AWS servizi specifici che intendi gestire con ACK. Per indicazioni sulla creazione di politiche con privilegi minimi, consulta e. [Configurare le autorizzazioni ACK](ack-permissions.md) [Considerazioni sulla sicurezza per EKS Capabilities](capabilities-security.md)

1. Scegli **Create** (Crea).

Inizia il processo di creazione delle capacità.

## Verifica che la funzionalità sia attiva
<a name="_verify_the_capability_is_active"></a>

1. Nella scheda **Funzionalità**, visualizza lo stato della capacità ACK.

1. Attendi che lo stato cambi da `CREATING` a`ACTIVE`.

1. Una volta attiva, la funzionalità è pronta per l'uso.

Per informazioni sullo stato delle funzionalità e sulla risoluzione dei problemi, vedere[Lavorare con le risorse di capacità](working-with-capabilities.md).

## Verifica che siano disponibili risorse personalizzate
<a name="_verify_custom_resources_are_available"></a>

Dopo che la funzionalità è attiva, verifica che le risorse personalizzate ACK siano disponibili nel cluster.

 **Utilizzo della console** 

1. Accedi al tuo cluster nella console Amazon EKS

1. Scegli la scheda **Risorse**

1. Scegli **Estensioni** 

1. Scegliere **CustomResourceDefinitions** 

Dovresti vedere una serie di AWS risorse CRDs elencate.

 **Usare kubectl** 

```
kubectl api-resources | grep services.k8s.aws
```

Dovresti vedere un certo numero di risorse APIs elencate. AWS 

**Nota**  
La funzionalità di AWS Controllers for Kubernetes installerà una serie di risorse CRDs per una varietà di risorse. AWS 

## Fasi successive
<a name="_next_steps"></a>
+  [Concetti ACK](ack-concepts.md)- Comprendi i concetti di ACK e inizia
+  [Configurare le autorizzazioni ACK](ack-permissions.md)- Configura le autorizzazioni IAM per altri servizi AWS 
+  [Lavorare con le risorse di capacità](working-with-capabilities.md)- Gestisci la tua risorsa di funzionalità ACK

# Crea una funzionalità ACK utilizzando la AWS CLI
<a name="ack-create-cli"></a>

Questo argomento descrive come creare una funzionalità AWS Controllers for Kubernetes (ACK) utilizzando la CLI. AWS 

## Prerequisiti
<a name="_prerequisites"></a>
+  ** AWS CLI**: versione `2.12.3` o successiva. Per verificare la tua versione, `aws --version` esegui. Per ulteriori informazioni, consulta la Guida per l'utente all'[installazione](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) nell'interfaccia a riga di AWS comando.
+  **`kubectl`**— Uno strumento da riga di comando per lavorare con i cluster Kubernetes. Per ulteriori informazioni, consulta [Impostazione di `kubectl` e `eksctl`](install-kubectl.md).

## Fase 1: creazione di un ruolo IAM Capability
<a name="_step_1_create_an_iam_capability_role"></a>

Crea un file di policy di fiducia:

```
cat > ack-trust-policy.json << 'EOF'
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "capabilities.eks.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession"
      ]
    }
  ]
}
EOF
```

Crea il ruolo IAM:

```
aws iam create-role \
  --role-name ACKCapabilityRole \
  --assume-role-policy-document file://ack-trust-policy.json
```

Allega la policy `AdministratorAccess` gestita al ruolo:

```
aws iam attach-role-policy \
  --role-name ACKCapabilityRole \
  --policy-arn arn:aws:iam::aws:policy/AdministratorAccess
```

**Importante**  
La `AdministratorAccess` politica suggerita concede ampie autorizzazioni e ha lo scopo di semplificare l'avvio. Per uso in produzione, sostituiscila con una politica personalizzata che conceda solo le autorizzazioni necessarie per i AWS servizi specifici che intendi gestire con ACK. Per indicazioni sulla creazione di politiche con privilegi minimi, consulta e. [Configurare le autorizzazioni ACK](ack-permissions.md) [Considerazioni sulla sicurezza per EKS Capabilities](capabilities-security.md)

## Fase 2: Creare la funzionalità ACK
<a name="_step_2_create_the_ack_capability"></a>

Crea la risorsa di funzionalità ACK sul tuo cluster. Sostituiscila *region-code* con la AWS regione in cui si trova il cluster e sostituiscila *my-cluster* con il nome del cluster.

```
aws eks create-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-ack \
  --type ACK \
  --role-arn arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):role/ACKCapabilityRole \
  --delete-propagation-policy RETAIN
```

Il comando viene restituito immediatamente, ma la funzionalità impiega del tempo per diventare attiva poiché EKS crea l'infrastruttura e i componenti di funzionalità richiesti. EKS installerà le Kubernetes Custom Resource Definitions relative a questa funzionalità nel cluster non appena viene creata.

**Nota**  
Se ricevi un errore che indica che il cluster non esiste o non disponi delle autorizzazioni, verifica:  
Il nome del cluster è corretto
La tua AWS CLI è configurata per la regione corretta
Disponi delle autorizzazioni IAM richieste

## Fase 3: Verifica che la funzionalità sia attiva
<a name="_step_3_verify_the_capability_is_active"></a>

Attendi che la funzionalità diventi attiva. Sostituiscilo *region-code* con la AWS regione in cui si trova il cluster e sostituiscilo *my-cluster* con il nome del cluster.

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-ack \
  --query 'capability.status' \
  --output text
```

La funzionalità è pronta quando viene visualizzato lo stato`ACTIVE`. Non continuare con il passaggio successivo fino a quando lo stato non sarà raggiunto`ACTIVE`.

Puoi anche visualizzare i dettagli completi delle funzionalità:

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-ack
```

## Fase 4: Verifica della disponibilità di risorse personalizzate
<a name="_step_4_verify_custom_resources_are_available"></a>

Dopo che la funzionalità è attiva, verifica che le risorse personalizzate ACK siano disponibili nel cluster:

```
kubectl api-resources | grep services.k8s.aws
```

Dovresti vedere un certo numero di AWS risorse APIs elencate.

**Nota**  
La funzionalità di AWS Controllers for Kubernetes installerà una serie di risorse CRDs per una varietà di risorse. AWS 

## Fasi successive
<a name="_next_steps"></a>
+  [Concetti ACK](ack-concepts.md)- Comprendi i concetti di ACK e inizia
+  [Configurare le autorizzazioni ACK](ack-permissions.md)- Configura le autorizzazioni IAM per altri servizi AWS 
+  [Lavorare con le risorse di capacità](working-with-capabilities.md)- Gestisci la tua risorsa di funzionalità ACK

# Crea una funzionalità ACK usando eksctl
<a name="ack-create-eksctl"></a>

Questo argomento descrive come creare una funzionalità AWS Controllers for Kubernetes (ACK) usando eksctl.

**Nota**  
I passaggi seguenti richiedono la versione eksctl o successiva. `0.220.0` Per verificare la tua versione, esegui. `eksctl version`

## Fase 1: Creare un ruolo di capacità IAM
<a name="_step_1_create_an_iam_capability_role"></a>

Crea un file di policy di fiducia:

```
cat > ack-trust-policy.json << 'EOF'
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "capabilities.eks.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession"
      ]
    }
  ]
}
EOF
```

Crea il ruolo IAM:

```
aws iam create-role \
  --role-name ACKCapabilityRole \
  --assume-role-policy-document file://ack-trust-policy.json
```

Allega la policy `AdministratorAccess` gestita al ruolo:

```
aws iam attach-role-policy \
  --role-name ACKCapabilityRole \
  --policy-arn arn:aws:iam::aws:policy/AdministratorAccess
```

**Importante**  
La `AdministratorAccess` politica suggerita concede ampie autorizzazioni e ha lo scopo di semplificare l'avvio. Per uso in produzione, sostituiscila con una politica personalizzata che conceda solo le autorizzazioni necessarie per i AWS servizi specifici che intendi gestire con ACK. Per indicazioni sulla creazione di politiche con privilegi minimi, consulta e. [Configurare le autorizzazioni ACK](ack-permissions.md) [Considerazioni sulla sicurezza per EKS Capabilities](capabilities-security.md)

**Importante**  
Questa politica concede le autorizzazioni per la gestione dei bucket S3 con`"Resource": "*"`, che consente le operazioni su tutti i bucket S3.  
Per uso in produzione: \$1 Limita il `Resource` campo a bucket ARNs o modelli di nomi specifici \$1 Usa le chiavi di condizione IAM per limitare l'accesso tramite tag di risorsa \$1 Concedi solo le autorizzazioni minime necessarie per il tuo caso d'uso  
Per altri AWS servizi, consulta. [Configurare le autorizzazioni ACK](ack-permissions.md)

Collegare la policy al ruolo:

```
aws iam attach-role-policy \
  --role-name ACKCapabilityRole \
  --policy-arn arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):policy/ACKS3Policy
```

## Fase 2: Creare la funzionalità ACK
<a name="_step_2_create_the_ack_capability"></a>

Crea la funzionalità ACK usando eksctl. Sostituiscilo *region-code* con la AWS regione in cui si trova il cluster e *my-cluster* sostituiscilo con il nome del cluster.

```
eksctl create capability \
  --cluster [.replaceable]`my-cluster` \
  --region [.replaceable]`region-code` \
  --name ack \
  --type ACK \
  --role-arn arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):role/ACKCapabilityRole \
  --ack-service-controllers s3
```

**Nota**  
La `--ack-service-controllers` bandiera è facoltativa. Se omesso, ACK abilita tutti i controller disponibili. Per prestazioni e sicurezza migliori, valuta la possibilità di abilitare solo i controller di cui hai bisogno. Puoi specificare più controller: `--ack-service-controllers s3,rds,dynamodb` 

Il comando viene restituito immediatamente, ma la funzionalità impiega del tempo per diventare attiva.

## Fase 3: Verificare che la funzionalità sia attiva
<a name="_step_3_verify_the_capability_is_active"></a>

Verifica lo stato della capacità:

```
eksctl get capability \
  --cluster [.replaceable]`my-cluster` \
  --region [.replaceable]`region-code` \
  --name ack
```

La funzionalità è pronta quando viene visualizzato lo stato`ACTIVE`.

## Fase 4: Verifica della disponibilità di risorse personalizzate
<a name="_step_4_verify_custom_resources_are_available"></a>

Dopo che la funzionalità è attiva, verifica che le risorse personalizzate ACK siano disponibili nel cluster:

```
kubectl api-resources | grep services.k8s.aws
```

Dovresti vedere un certo numero di AWS risorse APIs elencate.

**Nota**  
La funzionalità di AWS Controllers for Kubernetes installerà una serie di risorse CRDs per una varietà di risorse. AWS 

## Fasi successive
<a name="_next_steps"></a>
+  [Concetti ACK](ack-concepts.md)- Comprendi i concetti di ACK e inizia
+  [Configurare le autorizzazioni ACK](ack-permissions.md)- Configura le autorizzazioni IAM per altri servizi AWS 
+  [Lavorare con le risorse di capacità](working-with-capabilities.md)- Gestisci la tua risorsa di funzionalità ACK

# Concetti ACK
<a name="ack-concepts"></a>

ACK gestisce AWS le risorse tramite Kubernetes APIs riconciliando continuamente lo stato desiderato nei manifesti con lo stato effettivo in cui si trovano. AWS Quando crei o aggiorni una risorsa personalizzata Kubernetes, ACK effettua le chiamate AWS API necessarie per creare o modificare la AWS risorsa corrispondente, quindi la monitora per rilevare eventuali variazioni e aggiorna lo stato di Kubernetes in modo che rifletta lo stato corrente. Questo approccio consente di gestire l'infrastruttura utilizzando strumenti e flussi di lavoro Kubernetes familiari, mantenendo al contempo la coerenza tra il cluster e. AWS

Questo argomento spiega i concetti fondamentali alla base del modo in cui ACK gestisce AWS le risorse tramite Kubernetes. APIs

## Guida introduttiva a ACK
<a name="_getting_started_with_ack"></a>

Dopo aver creato la funzionalità ACK (vedi[Crea una funzionalità ACK](create-ack-capability.md)), puoi iniziare a gestire AWS le risorse utilizzando i manifest Kubernetes nel tuo cluster.

Ad esempio, crea questo manifesto del bucket S3 in, scegliendo il tuo nome di bucket `bucket.yaml` univoco.

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: my-test-bucket
  namespace: default
spec:
  name: my-unique-bucket-name-12345
```

Applica il manifesto:

```
kubectl apply -f bucket.yaml
```

Controlla lo stato:

```
kubectl get bucket my-test-bucket
kubectl describe bucket my-test-bucket
```

Verifica che il bucket sia stato creato in AWS:

```
aws s3 ls | grep my-unique-bucket-name-12345
```

Elimina la risorsa Kubernetes:

```
kubectl delete bucket my-test-bucket
```

Verifica che il bucket sia stato eliminato da: AWS

```
aws s3 ls | grep my-unique-bucket-name-12345
```

Il bucket non dovrebbe più apparire nell'elenco, a dimostrazione del fatto che ACK gestisce l'intero ciclo di vita delle risorse. AWS 

Per ulteriori informazioni su come iniziare a usare ACK, consulta [Getting](https://aws-controllers-k8s.github.io/community/docs/user-docs/getting-started/) Started with ACK.

## Ciclo di vita delle risorse e riconciliazione
<a name="_resource_lifecycle_and_reconciliation"></a>

ACK utilizza un ciclo di riconciliazione continuo per garantire che le AWS risorse corrispondano allo stato desiderato definito nei manifesti di Kubernetes.

 **Come funziona la riconciliazione:**

1. Crei o aggiorni una risorsa personalizzata Kubernetes (ad esempio, un bucket S3)

1. ACK rileva la modifica e confronta lo stato desiderato con lo stato effettivo in AWS 

1. Se sono diversi, ACK effettua chiamate AWS API per riconciliare la differenza

1. ACK aggiorna lo stato delle risorse in Kubernetes in modo che rifletta lo stato corrente

1. Il ciclo si ripete continuamente, in genere ogni poche ore

La riconciliazione viene attivata quando si crea una nuova risorsa Kubernetes, si aggiorna una risorsa esistente o quando ACK rileva una deviazione `spec` dovuta a modifiche manuali apportate all'esterno di ACK. AWS Inoltre, ACK esegue una riconciliazione periodica con un periodo di risincronizzazione di 10 ore. Le modifiche alle risorse Kubernetes innescano la riconciliazione immediata, mentre il rilevamento passivo della deriva delle modifiche alle risorse upstream avviene durante la risincronizzazione periodica. AWS 

Quando si esegue l'esempio introduttivo riportato sopra, ACK esegue questi passaggi:

1. Controlla se il bucket esiste in AWS 

1. In caso contrario, chiama `s3:CreateBucket` 

1. Aggiorna lo stato di Kubernetes con l'ARN e lo stato del bucket

1. Continua il monitoraggio della deriva

Per saperne di più su come funziona ACK, consulta ACK [Reconciliation](https://aws-controllers-k8s.github.io/community/docs/user-docs/reconciliation/).

## Condizioni di status
<a name="_status_conditions"></a>

Le risorse ACK utilizzano le condizioni di stato per comunicare il proprio stato. La comprensione di queste condizioni consente di risolvere i problemi e comprendere lo stato delle risorse.
+  **Pronta**: indica che la risorsa è pronta per essere consumata (condizione Kubernetes standardizzata).
+  **ACK. ResourceSynced**: Indica che le specifiche della risorsa corrispondono allo stato della AWS risorsa.
+  **ack.Terminal**: indica che si è verificato un errore irreversibile.
+  **ACK.Adopted**: indica che la risorsa è stata adottata da una risorsa esistente anziché creata nuova. AWS 
+  **ACK.Recoverable: indica un errore recuperabile** che può essere risolto senza aggiornare le specifiche.
+  **ACK.advisory: fornisce informazioni consultive sulla risorsa.**
+  **ACK. LateInitialized**: Indica se l'inizializzazione tardiva dei campi è completa.
+  **ACK. ReferencesResolved**: Indica se tutti `AWSResourceReference` i campi sono stati risolti.
+  **ACK. IAMRoleSelezionato**: indica se è stato selezionato un IAMRole selettore per gestire questa risorsa.

Verifica lo stato della risorsa:

```
# Check if resource is ready
kubectl get bucket my-bucket -o jsonpath='{.status.conditions[?(@.type=="Ready")].status}'

# Check for terminal errors
kubectl get bucket my-bucket -o jsonpath='{.status.conditions[?(@.type=="ACK.Terminal")]}'
```

Esempio di stato:

```
status:
  conditions:
  - type: Ready
    status: "True"
    lastTransitionTime: "2024-01-15T10:30:00Z"
  - type: ACK.ResourceSynced
    status: "True"
    lastTransitionTime: "2024-01-15T10:30:00Z"
  - type: ACK.Terminal
    status: "True"
  ackResourceMetadata:
    arn: arn:aws:s3:::my-unique-bucket-name
    ownerAccountID: "111122223333"
    region: us-west-2
```

Per ulteriori informazioni sullo stato e le condizioni ACK, consulta [le Condizioni ACK](https://aws-controllers-k8s.github.io/community/docs/user-docs/conditions/).

## Politiche di cancellazione
<a name="_deletion_policies"></a>

La politica di eliminazione di ACK controlla cosa succede alle AWS risorse quando elimini la risorsa Kubernetes.

 **Elimina (impostazione predefinita)** 

La AWS risorsa viene eliminata quando elimini la risorsa Kubernetes: questo è il comportamento predefinito.

```
# No annotation needed - this is the default
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: temp-bucket
spec:
  name: temporary-bucket
```

L'eliminazione di questa risorsa elimina il bucket S3. AWS

 **Mantenimento** 

La AWS risorsa viene conservata quando elimini la risorsa Kubernetes:

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: important-bucket
  annotations:
    services.k8s.aws/deletion-policy: "retain"
spec:
  name: production-data-bucket
```

L'eliminazione di questa risorsa la rimuove da Kubernetes ma lascia il bucket S3 attivo. AWS

La `retain` policy è utile per i database di produzione che dovrebbero durare più a lungo della risorsa Kubernetes, per le risorse condivise utilizzate da più applicazioni, per le risorse con dati importanti che non devono essere eliminati accidentalmente o per la gestione temporanea di ACK in cui si adotta una risorsa, la si configura e poi la si rimette alla gestione manuale.

[Per ulteriori informazioni sulla politica di eliminazione ACK, consulta ACK Deletion Policy.](https://aws-controllers-k8s.github.io/community/docs/user-docs/deletion-policy/)

## Adozione delle risorse
<a name="_resource_adoption"></a>

L'adozione consente di affidare AWS le risorse esistenti alla gestione ACK senza doverle ricreare.

Quando usare l'adozione:
+ Migrazione dell'infrastruttura esistente alla gestione ACK
+ Ripristino di risorse orfane in caso di eliminazione accidentale di AWS risorse in Kubernetes
+ Importazione di risorse create da altri strumenti (, Terraform) CloudFormation

Come funziona l'adozione:

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: existing-bucket
  annotations:
    services.k8s.aws/adoption-policy: "adopt-or-create"
spec:
  name: my-existing-bucket-name
```

Quando crei questa risorsa:

1. ACK verifica se esiste un bucket con quel nome in AWS 

1. Se trovato, ACK lo adotta (nessuna chiamata API da creare)

1. ACK legge la configurazione corrente da AWS 

1. ACK aggiorna lo stato di Kubernetes in modo che rifletta lo stato effettivo

1. Gli aggiornamenti futuri riconciliano normalmente la risorsa

Una volta adottate, le risorse vengono gestite come qualsiasi altra risorsa ACK e l'eliminazione della risorsa Kubernetes comporterà l'eliminazione della risorsa, a meno che non si utilizzi la politica AWS di eliminazione. `retain`

Quando si adottano risorse, la AWS risorsa deve già esistere e ACK necessita delle autorizzazioni di lettura per scoprirla. La `adopt-or-create` politica adotta la risorsa se esiste o la crea se non esiste. Ciò è utile quando si desidera un flusso di lavoro dichiarativo che funzioni indipendentemente dall'esistenza o meno della risorsa.

Per ulteriori informazioni sull'adozione delle risorse ACK, consulta [ACK Resource Adoption](https://aws-controllers-k8s.github.io/community/docs/user-docs/adopted-resource/).

## Risorse tra account e regioni
<a name="_cross_account_and_cross_region_resources"></a>

ACK può gestire le risorse in diversi AWS account e regioni da un singolo cluster.

 **Annotazioni di risorse interregionali** 

È possibile specificare la regione di una AWS risorsa utilizzando un'annotazione:

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: eu-bucket
  annotations:
    services.k8s.aws/region: eu-west-1
spec:
  name: my-eu-bucket
```

Puoi anche specificare la regione di tutte le AWS risorse create in un determinato namespace:

 **Annotazioni dello spazio dei nomi** 

Imposta una regione predefinita per tutte le risorse in un namespace:

```
apiVersion: v1
kind: Namespace
metadata:
  name: production
  annotations:
    services.k8s.aws/default-region: us-west-2
```

Le risorse create in questo namespace utilizzano questa regione a meno che non vengano sovrascritte da un'annotazione a livello di risorsa.

 **Più account** 

Usa IAM Role Selectors per mappare ruoli IAM specifici ai namespace:

```
apiVersion: services.k8s.aws/v1alpha1
kind: IAMRoleSelector
metadata:
  name: target-account-config
spec:
  arn: arn:aws:iam::444455556666:role/ACKTargetAccountRole
  namespaceSelector:
    names:
      - production
```

Le risorse create nello spazio dei nomi mappato utilizzano automaticamente il ruolo specificato.

Per ulteriori informazioni sugli IAM Role Selectors, consulta [ACK](https://aws-controllers-k8s.github.io/docs/guides/cross-account) Cross-Account Resource Management. Per i dettagli sulla configurazione tra account, consulta. [Configurare le autorizzazioni ACK](ack-permissions.md)

## Gestione degli errori e comportamento dei nuovi tentativi
<a name="_error_handling_and_retry_behavior"></a>

ACK gestisce automaticamente gli errori transitori e riprova le operazioni non riuscite.

Strategia di riprova:
+ Gli errori transitori (limitazione della velocità, problemi temporanei di servizio, autorizzazioni insufficienti) attivano nuovi tentativi automatici
+ Il backoff esponenziale impedisce il sovraccarico AWS APIs
+ Il numero massimo di tentativi di riprova varia in base al tipo di errore
+ Gli errori permanenti (parametri non validi, conflitti tra nomi di risorse) non riprovano

Controlla lo stato delle risorse per i dettagli degli errori utilizzando: `kubectl describe`

```
kubectl describe bucket my-bucket
```

Cerca le condizioni di stato con messaggi di errore, gli eventi che mostrano i recenti tentativi di riconciliazione e il `message` campo nelle condizioni di stato che spiegano gli errori. Gli errori più comuni includono autorizzazioni IAM insufficienti, conflitti tra i nomi delle risorse, valori di configurazione non validi nelle AWS quote di servizio e il `spec` superamento delle quote di servizio. AWS 

Per la risoluzione degli errori più comuni, consulta. [Risolvi i problemi relativi alle funzionalità ACK](ack-troubleshooting.md)

## Composizione delle risorse con kro
<a name="_resource_composition_with_kro"></a>

Per comporre e connettere più risorse ACK insieme, usa EKS Capability for kro (Kube Resource Orchestrator). kro fornisce un modo dichiarativo per definire gruppi di risorse, passando la configurazione tra le risorse per gestire semplicemente modelli di infrastruttura complessi.

Per esempi dettagliati di creazione di composizioni di risorse personalizzate con risorse ACK, vedi [concetti kro](kro-concepts.md) 

## Fasi successive
<a name="_next_steps"></a>
+  [Considerazioni ACK per EKS](ack-considerations.md)- Modelli e strategie di integrazione specifici per EKS

# Configurare le autorizzazioni ACK
<a name="ack-permissions"></a>

ACK richiede le autorizzazioni IAM per creare e gestire AWS risorse per tuo conto. Questo argomento spiega come IAM collabora con ACK e fornisce indicazioni sulla configurazione delle autorizzazioni per diversi casi d'uso.

## Come funziona IAM con ACK
<a name="_how_iam_works_with_ack"></a>

ACK utilizza i ruoli IAM per autenticarsi con le tue risorse AWS ed eseguire azioni sulle tue risorse. Esistono due modi per fornire le autorizzazioni a ACK:

 **Ruolo di capacità**: il ruolo IAM fornito durante la creazione della funzionalità ACK. Questo ruolo viene utilizzato di default per tutte le operazioni ACK.

 **Selettori di ruolo IAM**: ruoli IAM aggiuntivi che possono essere mappati su namespace o risorse specifici. Questi ruoli hanno la precedenza sul ruolo di capacità per le risorse che rientrano nel loro ambito.

Quando ACK deve creare o gestire una risorsa, determina quale ruolo IAM utilizzare:

1. Controlla se un IAMRole selettore corrisponde allo spazio dei nomi della risorsa

1. Se viene trovata una corrispondenza, assumi quel ruolo IAM

1. Altrimenti, usa il ruolo Capability

Questo approccio consente una gestione flessibile delle autorizzazioni, da semplici configurazioni a ruolo singolo a configurazioni complesse con più account e più team.

## Guida introduttiva: configurazione semplice delle autorizzazioni
<a name="_getting_started_simple_permission_setup"></a>

Per casi di sviluppo, test o semplici casi d'uso, puoi aggiungere tutte le autorizzazioni di servizio necessarie direttamente al Capability Role.

Questo approccio funziona bene quando:
+ Stai iniziando con ACK
+ Tutte le risorse si trovano nello stesso AWS account
+ Un unico team gestisce tutte le risorse ACK
+ Ti fidi che tutti gli utenti ACK abbiano le stesse autorizzazioni

## Best practice di produzione: IAM Role Selectors
<a name="_production_best_practice_iam_role_selectors"></a>

Per gli ambienti di produzione, utilizza IAM Role Selectors per implementare l'accesso con privilegi minimi e l'isolamento a livello di namespace.

Quando si utilizza IAM Role Selectors, il Capability Role necessita solo delle autorizzazioni per assumere i ruoli specifici del servizio. `sts:AssumeRole` `sts:TagSession` Non è necessario aggiungere alcuna autorizzazione di AWS servizio (come S3 o RDS) al Capability Role stesso: tali autorizzazioni vengono concesse ai singoli ruoli IAM assunti dal Capability Role.

 **Scelta tra modelli di autorizzazione:**

Utilizza **le autorizzazioni dirette** (aggiungendo le autorizzazioni di servizio al ruolo Capability) quando:
+ Stai iniziando e desideri la configurazione più semplice
+ Tutte le risorse si trovano nello stesso account del cluster
+ Hai requisiti di autorizzazione amministrativi a livello di cluster
+ Tutti i team possono condividere le stesse autorizzazioni

Usa **IAM Role Selectors quando**:
+ Gestione delle risorse su più account AWS 
+ Team o namespace diversi richiedono autorizzazioni diverse
+ È necessario un controllo granulare degli accessi per namespace
+ Vuoi seguire le pratiche di sicurezza con privilegi minimi

Puoi iniziare con autorizzazioni dirette e migrare a IAM Role Selectors in un secondo momento, man mano che le tue esigenze crescono.

 **Perché utilizzare IAM Role Selectors in produzione:** 
+  **Privilegio minimo**: ogni namespace ottiene solo le autorizzazioni di cui ha bisogno
+  **Isolamento del team**: il team A non può utilizzare accidentalmente le autorizzazioni del team B
+  **Controllo più semplice**: mappatura chiara di quale namespace utilizza quale ruolo
+  **Supporto per più account**: necessario per la gestione delle risorse in più account
+  **Separazione delle preoccupazioni**: servizi o ambienti diversi utilizzano ruoli diversi

### Configurazione di base di IAM Role Selector
<a name="_basic_iam_role_selector_setup"></a>

 **Fase 1: Creare un ruolo IAM specifico per il servizio** 

Crea un ruolo IAM con autorizzazioni per servizi specifici: AWS 

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:*"
      ],
      "Resource": "*"
    }
  ]
}
```

Configura la policy di fiducia per consentire al Capability Role di assumerla:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/ACKCapabilityRole"
      },
      "Action": ["sts:AssumeRole", "sts:TagSession"]
    }
  ]
}
```

 **Fase 2: concedere AssumeRole l'autorizzazione a Capability Role** 

Aggiungi l'autorizzazione al ruolo di capacità per assumere il ruolo specifico del servizio:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["sts:AssumeRole", "sts:TagSession"],
      "Resource": "arn:aws:iam::111122223333:role/ACK-S3-Role"
    }
  ]
}
```

 **Fase 3: Creare un selettore IAMRole** 

Mappa il ruolo IAM su un namespace:

```
apiVersion: services.k8s.aws/v1alpha1
kind: IAMRoleSelector
metadata:
  name: s3-namespace-config
spec:
  arn: arn:aws:iam::111122223333:role/ACK-S3-Role
  namespaceSelector:
    names:
      - s3-resources
```

 **Fase 4: Creare risorse nello spazio dei nomi mappato** 

Le risorse nello spazio dei `s3-resources` nomi utilizzano automaticamente il ruolo specificato:

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: my-bucket
  namespace: s3-resources
spec:
  name: my-production-bucket
```

## Gestione di più account
<a name="_multi_account_management"></a>

Usa IAM Role Selectors per gestire le risorse su più AWS account.

 **Fase 1: Creare un ruolo IAM per più account** 

Nell'account di destinazione (444455556666), crea un ruolo che si fidi del ruolo di capacità dell'account di origine:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/ACKCapabilityRole"
      },
      "Action": ["sts:AssumeRole", "sts:TagSession"]
    }
  ]
}
```

Assegna autorizzazioni specifiche del servizio a questo ruolo.

 **Passaggio 2: concedere l'autorizzazione AssumeRole ** 

Nell'account di origine (111122223333), consenti al ruolo Capability di assumere il ruolo dell'account di destinazione:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["sts:AssumeRole", "sts:TagSession"],
      "Resource": "arn:aws:iam::444455556666:role/ACKTargetAccountRole"
    }
  ]
}
```

 **Fase 3: Creare un selettore IAMRole** 

Mappa il ruolo tra account diversi su un namespace:

```
apiVersion: services.k8s.aws/v1alpha1
kind: IAMRoleSelector
metadata:
  name: production-account-config
spec:
  arn: arn:aws:iam::444455556666:role/ACKTargetAccountRole
  namespaceSelector:
    names:
      - production
```

 **Fase 4: Creare risorse** 

Le risorse nel `production` namespace vengono create nell'account di destinazione:

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: my-bucket
  namespace: production
spec:
  name: my-cross-account-bucket
```

## Tag di sessione
<a name="_session_tags"></a>

La funzionalità EKS ACK imposta automaticamente i tag di sessione su tutte le richieste AWS API. Questi tag consentono il controllo e la verifica granulari degli accessi identificando l'origine di ogni richiesta.

### Tag di sessione disponibili
<a name="_available_session_tags"></a>

I seguenti tag di sessione sono inclusi in ogni chiamata AWS API effettuata da ACK:


| Chiave del tag | Description | 
| --- | --- | 
|   `eks:eks-capability-arn`   |  L'ARN della capacità EKS che effettua la richiesta  | 
|   `eks:kubernetes-namespace`   |  Lo spazio dei nomi Kubernetes della risorsa gestita  | 
|   `eks:kubernetes-api-group`   |  Il gruppo di API Kubernetes della risorsa (ad esempio,) `s3.services.k8s.aws`  | 

### Utilizzo dei tag di sessione per il controllo degli accessi
<a name="_using_session_tags_for_access_control"></a>

Puoi utilizzare questi tag di sessione nelle condizioni delle policy IAM per limitare le risorse che ACK può gestire. Ciò fornisce un ulteriore livello di sicurezza oltre ai selettori di ruolo IAM basati su namespace.

 **Esempio: limita in base allo spazio dei nomi** 

Consenti a ACK di creare bucket S3 solo quando la richiesta proviene dal namespace: `production`

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:CreateBucket",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalTag/eks:kubernetes-namespace": "production"
        }
      }
    }
  ]
}
```

 **Esempio: limita per capacità** 

Consenti azioni solo da una funzionalità ACK specifica:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalTag/eks:eks-capability-arn": "arn:aws:eks:us-west-2:111122223333:capability/my-cluster/ack/my-ack"
        }
      }
    }
  ]
}
```

**Nota**  
I tag di sessione sono diversi da ACK autogestiti, che non imposta questi tag per impostazione predefinita. Ciò consente un controllo degli accessi più granulare con la funzionalità gestita.

## Modelli avanzati di IAM Role Selector
<a name="_advanced_iam_role_selector_patterns"></a>

[Per una configurazione avanzata che include selettori di etichette, mappatura dei ruoli specifici delle risorse ed esempi aggiuntivi, consulta la documentazione ACK IRSA.](https://aws-controllers-k8s.github.io/community/docs/user-docs/irsa/)

## Fasi successive
<a name="_next_steps"></a>
+  [Concetti ACK](ack-concepts.md)- Comprendi i concetti e il ciclo di vita delle risorse di ACK
+  [Concetti ACK](ack-concepts.md)- Scopri le politiche di adozione ed eliminazione delle risorse
+  [Considerazioni sulla sicurezza per EKS Capabilities](capabilities-security.md)- Comprendi le migliori pratiche di sicurezza per quanto riguarda le funzionalità

# Considerazioni ACK per EKS
<a name="ack-considerations"></a>

Questo argomento tratta importanti considerazioni sull'utilizzo di EKS Capability for ACK, tra cui la configurazione IAM, i modelli multi-account e l'integrazione con altre funzionalità EKS.

## Modelli di configurazione IAM
<a name="_iam_configuration_patterns"></a>

La funzionalità ACK utilizza un IAM Capability Role con AWS cui eseguire l'autenticazione. Scegli il modello IAM giusto in base alle tue esigenze.

### Semplice: ruolo a capacità singola
<a name="_simple_single_capability_role"></a>

Per casi di sviluppo, test o semplici casi d'uso, concedi tutte le autorizzazioni necessarie direttamente al Capability Role.

 **Quando usare**:
+ Guida introduttiva a ACK
+ Implementazioni con un solo account
+ Tutte le risorse sono gestite da un unico team
+ Ambienti di sviluppo e test

 **Esempio**: aggiungi le autorizzazioni S3 e RDS al tuo Capability Role con condizioni di etichettatura delle risorse:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:*"],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:RequestedRegion": ["us-west-2", "us-east-1"]
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": ["rds:*"],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:RequestedRegion": ["us-west-2", "us-east-1"]
        },
      }
    }
  ]
}
```

Questo esempio limita le operazioni S3 e RDS a regioni specifiche e richiede che le risorse RDS abbiano un tag. `ManagedBy: ACK`

### Produzione: IAM Role Selectors
<a name="_production_iam_role_selectors"></a>

Per gli ambienti di produzione, utilizza IAM Role Selectors per implementare l'accesso con privilegi minimi e l'isolamento a livello di namespace.

 **Quando usare:**
+ Ambienti di produzione
+ Cluster con più team
+ Gestione delle risorse su più account
+ Requisiti di sicurezza con privilegi minimi
+ Servizi diversi richiedono autorizzazioni diverse

 **Vantaggi**:
+ Ogni namespace ottiene solo le autorizzazioni necessarie
+ Isolamento del team: il team A non può utilizzare le autorizzazioni del team B
+ Controllo e conformità più semplici
+ Necessario per la gestione delle risorse tra account

Per una configurazione dettagliata di IAM Role Selector, consulta. [Configurare le autorizzazioni ACK](ack-permissions.md)

## Integrazione con altre funzionalità EKS
<a name="_integration_with_other_eks_capabilities"></a>

### GitOps con Argo CD
<a name="_gitops_with_argo_cd"></a>

Usa il CD EKS Capability for Argo per distribuire risorse ACK dai repository Git, abilitando GitOps flussi di lavoro per la gestione dell'infrastruttura.

 **Considerazioni:**
+ Archivia le risorse ACK insieme ai manifesti delle applicazioni per end-to-end GitOps
+ Organizza per ambiente, servizio o tipo di risorsa in base alla struttura del tuo team
+ Usa la sincronizzazione automatica di Argo CD per una riconciliazione continua
+ Abilita la potatura per rimuovere automaticamente le risorse eliminate
+ Prendi in considerazione hub-and-spoke i modelli per la gestione dell'infrastruttura multicluster

GitOps fornisce audit trail, funzionalità di rollback e gestione dichiarativa dell'infrastruttura. Per ulteriori informazioni su Argo CD, vedere. [Lavorare con Argo CD](working-with-argocd.md)

### Composizione delle risorse con kro
<a name="_resource_composition_with_kro"></a>

Usa EKS Capability for kro (Kube Resource Orchestrator) per comporre più risorse ACK in astrazioni di livello superiore e personalizzate. APIs

 **Quando usare kro** con ACK:
+ Crea modelli riutilizzabili per stack di infrastruttura comuni (database \$1 backup \$1 monitoraggio)
+ Crea piattaforme self-service semplificate per i team applicativi APIs 
+ Gestisci le dipendenze delle risorse e passa i valori tra le risorse (funzione ARN a Lambda del bucket S3)
+ Standardizza le configurazioni dell'infrastruttura tra i team
+ Riduci la complessità nascondendo i dettagli di implementazione dietro risorse personalizzate

 **Modelli di esempio**:
+ Stack di applicazioni: bucket S3\$1coda SQS\$1configurazione delle notifiche
+ Configurazione del database: istanza RDS \$1 gruppo di parametri \$1 gruppo di sicurezza \$1 segreti
+ Rete: VPC \$1 sottoreti \$1 tabelle di routing \$1 gruppi di sicurezza

kro gestisce l'ordinamento delle dipendenze, la propagazione dello stato e la gestione del ciclo di vita per le risorse composte. Per ulteriori informazioni su kro, consulta. [concetti kro](kro-concepts.md)

## Organizzazione delle risorse
<a name="_organizing_your_resources"></a>

Organizza le risorse ACK utilizzando i namespace e i tag delle AWS risorse Kubernetes per migliorare la gestione, il controllo degli accessi e il monitoraggio dei costi.

### Organizzazione dei namespace
<a name="_namespace_organization"></a>

Usa gli spazi dei nomi Kubernetes per separare logicamente le risorse ACK per ambiente (produzione, gestione temporanea, sviluppo), team (piattaforma, dati, ML) o applicazione.

 **Vantaggi:**
+ RBAC con ambito namespace per il controllo degli accessi
+ Imposta le regioni predefinite per namespace utilizzando le annotazioni
+ Gestione e pulizia delle risorse più semplici
+ Separazione logica in linea con la struttura organizzativa

### Aggiunta di tag alle risorse
<a name="_resource_tagging"></a>

La funzionalità EKS ACK applica automaticamente i tag predefiniti a tutte le AWS risorse che crea. Questi tag differiscono dagli ACK autogestiti e offrono una tracciabilità avanzata.

 **Tag predefiniti applicati dalla funzionalità:**


| Tag Key | Description | 
| --- | --- | 
|   `eks:controller-version`   |  La versione del controller ACK  | 
|   `eks:kubernetes-namespace`   |  Lo spazio dei nomi Kubernetes della risorsa ACK  | 
|   `eks:kubernetes-resource-name`   |  Il nome della risorsa Kubernetes  | 
|   `eks:kubernetes-api-group`   |  Il gruppo di API Kubernetes (ad esempio,) `s3.services.k8s.aws`  | 
|   `eks:eks-capability-arn`   |  L'ARN della funzionalità EKS ACK  | 

**Nota**  
ACK autogestito utilizza diversi tag predefiniti: `services.k8s.aws/controller-version` e. `services.k8s.aws/namespace` I tag della funzionalità utilizzano il `eks:` prefisso per garantire la coerenza con altre funzionalità EKS.

 **Tag aggiuntivi consigliati:**

Aggiungi tag personalizzati per l'allocazione dei costi, il monitoraggio della proprietà e per scopi organizzativi:
+ Ambiente (produzione, allestimento, sviluppo)
+ Proprietà del team o del reparto
+ Centro di costo per l'allocazione della fatturazione
+ Nome dell'applicazione o del servizio

## Migrazione da altri Infrastructure-as-code strumenti
<a name="_migration_from_other_infrastructure_as_code_tools"></a>

Molte organizzazioni stanno trovando valore nella standardizzazione su Kubernetes oltre all'orchestrazione dei carichi di lavoro. La migrazione dell'infrastruttura e della gestione AWS delle risorse verso ACK consente di standardizzare la gestione dell'infrastruttura utilizzando Kubernetes insieme ai carichi di lavoro delle applicazioni. APIs 

 **Vantaggi della standardizzazione su Kubernetes per l'infrastruttura**:
+  **Un'unica fonte di verità**: gestisci sia le applicazioni che l'infrastruttura in Kubernetes, abilitando una pratica end-to-end GitOps 
+  **Strumenti unificati: i** team utilizzano le risorse e gli strumenti Kubernetes anziché apprendere più strumenti e framework
+  **Riconciliazione coerente: ACK riconcilia** continuamente le AWS risorse come fa Kubernetes per i carichi di lavoro, rilevando e correggendo le deviazioni rispetto agli strumenti imperativi
+  **Composizioni native**: con kro e ACK insieme, puoi fare riferimento alle risorse direttamente nelle applicazioni e nei manifesti delle risorse, passando stringhe di connessione e tra AWS le risorse ARNs 
+  **Operazioni semplificate**: un unico piano di controllo per implementazioni, rollback e osservabilità sull'intero sistema

ACK supporta l'adozione AWS delle risorse esistenti senza ricrearle, abilitando la migrazione senza tempi di inattività da Terraform o da CloudFormation risorse esterne al cluster.

 **Adotta una risorsa esistente**:

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: existing-bucket
  annotations:
    services.k8s.aws/adoption-policy: "adopt-or-create"
spec:
  name: my-existing-bucket-name
```

Una volta adottata, la risorsa viene gestita da ACK e può essere aggiornata tramite i manifesti di Kubernetes. È possibile migrare in modo incrementale, adottando le risorse necessarie e mantenendo gli strumenti IaC esistenti per altre risorse.

ACK supporta anche risorse di sola lettura. Per le risorse gestite da altri team o strumenti a cui desideri fare riferimento ma non modificare, combina l'adozione con la politica di `retain` eliminazione e concedi solo le autorizzazioni IAM di lettura. Ciò consente alle applicazioni di scoprire l'infrastruttura condivisa (ruoli IAMVPCs, chiavi KMS) tramite APIs Kubernetes senza rischiare modifiche.

Per ulteriori informazioni sull'adozione delle risorse, consulta. [Concetti ACK](ack-concepts.md)

## Politiche di eliminazione
<a name="_deletion_policies"></a>

Le politiche di eliminazione controllano cosa succede alle AWS risorse quando elimini la risorsa Kubernetes corrispondente. Scegli la politica giusta in base al ciclo di vita delle risorse e ai tuoi requisiti operativi.

### Elimina (impostazione predefinita)
<a name="_delete_default"></a>

La AWS risorsa viene eliminata quando elimini la risorsa Kubernetes. Ciò mantiene la coerenza tra il cluster e AWS garantisce che le risorse non si accumulino.

 **Quando usare delete**:
+ Ambienti di sviluppo e test in cui la pulizia è importante
+ Risorse temporanee legate al ciclo di vita delle applicazioni (database di test, bucket temporanei)
+ Risorse che non dovrebbero durare più a lungo dell'applicazione (code SQS, cluster) ElastiCache 
+ Ottimizzazione dei costi: ripulisci automaticamente le risorse inutilizzate
+ Ambienti gestiti GitOps in cui la rimozione delle risorse da Git dovrebbe eliminare l'infrastruttura

La politica di eliminazione predefinita è in linea con il modello dichiarativo di Kubernetes: ciò che è nel cluster corrisponde a ciò che esiste in. AWS

### Mantenimento
<a name="_retain"></a>

La AWS risorsa viene conservata quando elimini la risorsa Kubernetes. Ciò protegge i dati critici e consente alle risorse di sopravvivere più a lungo della loro rappresentazione in Kubernetes.

 **Quando usare Retain**:
+ Database di produzione con dati critici che devono sopravvivere alle modifiche dei cluster
+ Bucket di storage a lungo termine con requisiti di conformità o di controllo
+ Risorse condivise utilizzate da più applicazioni o team
+ Risorse in fase di migrazione verso diversi strumenti di gestione
+ Scenari di disaster recovery in cui si desidera preservare l'infrastruttura
+ Risorse con dipendenze complesse che richiedono uno smantellamento accurato

```
apiVersion: rds.services.k8s.aws/v1alpha1
kind: DBInstance
metadata:
  name: production-db
  annotations:
    services.k8s.aws/deletion-policy: "retain"
spec:
  dbInstanceIdentifier: prod-db
  # ... configuration
```

**Importante**  
Le risorse conservate continuano a comportare AWS costi e devono essere eliminate manualmente quando non sono più necessarie. AWS Utilizza l'etichettatura delle risorse per tenere traccia delle risorse conservate per la pulizia.

Per ulteriori informazioni sulle politiche di eliminazione, vedere. [Concetti ACK](ack-concepts.md)

## Documentazione upstream
<a name="_upstream_documentation"></a>

Per informazioni dettagliate sull'uso di ACK:
+  [Guida all'uso di ACK](https://aws-controllers-k8s.github.io/community/docs/user-docs/usage/) - Creazione e gestione delle risorse
+  [Riferimento all'API ACK](https://aws-controllers-k8s.github.io/community/reference/): documentazione API completa per tutti i servizi
+  [Documentazione ACK - Documentazione](https://aws-controllers-k8s.github.io/community/docs/) completa per l'utente

## Fasi successive
<a name="_next_steps"></a>
+  [Configurare le autorizzazioni ACK](ack-permissions.md)- Configura le autorizzazioni IAM e i modelli multiaccount
+  [Concetti ACK](ack-concepts.md)- Comprendi i concetti di ACK e il ciclo di vita delle risorse
+  [Risolvi i problemi relativi alle funzionalità ACK](ack-troubleshooting.md)- Risolvi i problemi ACK
+  [Lavorare con Argo CD](working-with-argocd.md)- Implementa le risorse ACK con GitOps
+  [concetti kro](kro-concepts.md)- Componi le risorse ACK in astrazioni di livello superiore

# Risolvi i problemi relativi alle funzionalità ACK
<a name="ack-troubleshooting"></a>

Questo argomento fornisce linee guida per la risoluzione dei problemi relativi a EKS Capability for ACK, compresi i controlli dello stato delle funzionalità, la verifica dello stato delle risorse e i problemi di autorizzazione IAM.

**Nota**  
Le funzionalità EKS sono completamente gestite e eseguite all'esterno del cluster. Non hai accesso ai log dei controller o ai namespace dei controller. La risoluzione dei problemi si concentra sullo stato delle funzionalità, sullo stato delle risorse e sulla configurazione IAM.

## Le funzionalità sono ATTIVE ma le risorse non vengono create
<a name="_capability_is_active_but_resources_arent_being_created"></a>

Se la tua funzionalità ACK mostra `ACTIVE` lo stato ma le risorse non vengono create AWS, controlla lo stato della capacità, lo stato delle risorse e le autorizzazioni IAM.

 **Verifica lo stato delle funzionalità:**

È possibile visualizzare i problemi relativi allo stato e allo stato delle funzionalità nella console EKS o utilizzando la AWS CLI.

 **Console**:

1. Apri la console Amazon EKS a https://console.aws.amazon.com/eks/ home\$1/clusters.

1. Seleziona il nome del cluster.

1. Scegli la scheda **Osservabilità**.

1. Scegli **Monitora cluster**.

1. Scegli la scheda **Capacità** per visualizzare lo stato e lo stato di tutte le funzionalità.

 ** AWS CLI:**

```
# View capability status and health
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-ack

# Look for issues in the health section
```

 Cause comuni:
+  **Autorizzazioni IAM mancanti**: al Capability Role mancano le autorizzazioni per il servizio AWS 
+  **Namespace errato**: risorse create nello spazio dei nomi senza un selettore appropriato IAMRole
+  **Specifiche della risorsa non valide: controlla le condizioni di stato delle risorse per verificare la presenza** di errori di convalida
+  **Limitazione delle API: AWS vengono raggiunti i limiti di velocità delle** API
+  Webhook di **ammissione: webhook** di ammissione che impediscono al controller di correggere lo stato delle risorse

 **Controlla lo stato delle risorse:**

```
# Describe the resource to see conditions and events
kubectl describe bucket my-bucket -n default

# Look for status conditions
kubectl get bucket my-bucket -n default -o jsonpath='{.status.conditions}'

# View resource events
kubectl get events --field-selector involvedObject.name=my-bucket -n default
```

 **Verifica le autorizzazioni IAM**:

```
# View the Capability Role's policies
aws iam list-attached-role-policies --role-name my-ack-capability-role
aws iam list-role-policies --role-name my-ack-capability-role

# Get specific policy details
aws iam get-role-policy --role-name my-ack-capability-role --policy-name policy-name
```

## Risorse create in AWS Kubernetes ma non visualizzate
<a name="resources_created_in_shared_aws_but_not_showing_in_kubernetes"></a>

ACK tiene traccia solo delle risorse create tramite i manifesti di Kubernetes. Per gestire le AWS risorse esistenti con ACK, utilizza la funzionalità di adozione.

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: existing-bucket
  annotations:
    services.k8s.aws/adoption-policy: "adopt-or-create"
spec:
  name: my-existing-bucket-name
```

Per ulteriori informazioni sull'adozione delle risorse, consulta[Concetti ACK](ack-concepts.md).

## Risorse per più account non create
<a name="_cross_account_resources_not_being_created"></a>

Se non vengono create risorse in un AWS account di destinazione quando utilizzi IAM Role Selectors, verifica la relazione di fiducia e la configurazione di IAMRole Selector.

 **Verifica la relazione di fiducia**:

```
# Check the trust policy in the target account role
aws iam get-role --role-name cross-account-ack-role --query 'Role.AssumeRolePolicyDocument'
```

La politica di fiducia deve consentire al ruolo di capacità dell'account di origine di assumerla.

 **Conferma la configurazione IAMRole del selettore**:

```
# List IAMRoleSelectors (cluster-scoped)
kubectl get iamroleselector

# Describe specific selector
kubectl describe iamroleselector my-selector
```

 **Verifica l'allineamento dello spazio dei nomi:**

IAMRoleI selettori sono risorse con ambito cluster ma hanno come target namespace specifici. Assicurati che le tue risorse ACK si trovino in uno spazio dei nomi che corrisponda al selettore dello spazio dei nomi di Selector: IAMRole

```
# Check resource namespace
kubectl get bucket my-cross-account-bucket -n production

# List all IAMRoleSelectors (cluster-scoped)
kubectl get iamroleselector

# Check which namespace the selector targets
kubectl get iamroleselector my-selector -o jsonpath='{.spec.namespaceSelector}'
```

 ** IAMRoleControlla** la condizione selezionata:

Verifica che il IAMRole selettore sia stato abbinato correttamente alla tua risorsa controllando la `ACK.IAMRoleSelected` condizione:

```
# Check if IAMRoleSelector was matched
kubectl get bucket my-cross-account-bucket -n production -o jsonpath='{.status.conditions[?(@.type=="ACK.IAMRoleSelected")]}'
```

Se la condizione è presente `False` o manca, il IAMRole selettore dello spazio dei nomi del selettore non corrisponde allo spazio dei nomi della risorsa. Verifica che il selettore corrisponda alle etichette dello spazio dei nomi della risorsa. `namespaceSelector`

 **Verifica le autorizzazioni di Capability** Role:

I requisiti `sts:AssumeRole` e le `sts:TagSession` autorizzazioni del ruolo Capability Role per il ruolo dell'account di destinazione:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["sts:AssumeRole", "sts:TagSession"],
      "Resource": "arn:aws:iam::[.replaceable]`444455556666`:role/[.replaceable]`cross-account-ack-role`"
    }
  ]
}
```

Per una configurazione dettagliata tra account, consulta. [Configurare le autorizzazioni ACK](ack-permissions.md)

## Fasi successive
<a name="_next_steps"></a>
+  [Considerazioni ACK per EKS](ack-considerations.md)- Considerazioni e best practice relative a ACK
+  [Configurare le autorizzazioni ACK](ack-permissions.md)- Configura le autorizzazioni IAM e i modelli multiaccount
+  [Concetti ACK](ack-concepts.md)- Comprendi i concetti di ACK e il ciclo di vita delle risorse
+  [Risoluzione dei problemi delle funzionalità EKS](capabilities-troubleshooting.md)- Guida generale alla risoluzione dei problemi relativi alle funzionalità

# Confronto tra la funzionalità EKS per ACK e l'ACK autogestito
<a name="ack-comparison"></a>

EKS Capability for ACK offre le stesse funzionalità dei controller ACK autogestiti, ma con vantaggi operativi significativi. Per un confronto generale tra EKS Capabilities e soluzioni autogestite, vedi. [Considerazioni sulle funzionalità EKS](capabilities-considerations.md) Questo argomento si concentra sulle differenze specifiche di ACK.

## Differenze rispetto all'ACK upstream
<a name="_differences_from_upstream_ack"></a>

EKS Capability for ACK si basa sui controller ACK upstream ma si differenzia nell'integrazione IAM.

 **IAM Capability** Role: la funzionalità utilizza un ruolo IAM dedicato con una policy di fiducia che consente il `capabilities.eks.amazonaws.com` service principal, non l'IRSA (IAM Roles for Service Accounts). Puoi collegare le policy IAM direttamente al Capability Role senza la necessità di creare o annotare gli account di servizio Kubernetes o configurare i provider OIDC. Una best practice per i casi d'uso in produzione consiste nel configurare le autorizzazioni di servizio utilizzando. `IAMRoleSelector` Per ulteriori dettagli, consulta [Configurare le autorizzazioni ACK](ack-permissions.md).

 **Tag di sessione**: la funzionalità gestita imposta automaticamente i tag di sessione su tutte le richieste AWS API, abilitando il controllo e il controllo granulari degli accessi. I tag includono`eks:eks-capability-arn`, e. `eks:kubernetes-namespace` `eks:kubernetes-api-group` Ciò differisce dall'ACK autogestito, che non imposta questi tag per impostazione predefinita. [Configurare le autorizzazioni ACK](ack-permissions.md)Per ulteriori informazioni sull'utilizzo dei tag di sessione nelle policy IAM, consulta la sezione.

 **Tag delle risorse**: la funzionalità applica tag predefiniti diversi alle AWS risorse rispetto a ACK autogestiti. La funzionalità utilizza tag con `eks:` prefisso (ad esempio`eks:kubernetes-namespace`,`eks:eks-capability-arn`) anziché i `services.k8s.aws/` tag utilizzati dall'ACK autogestito. Consulta [Considerazioni ACK per EKS](ack-considerations.md) l'elenco completo dei tag di risorsa predefiniti.

 **Compatibilità delle risorse**: le risorse personalizzate ACK funzionano in modo identico a quelle di ACK upstream senza modifiche ai file YAML delle risorse ACK. La funzionalità utilizza lo stesso Kubernetes APIs e CRDs quindi gli strumenti funzionano allo stesso modo. `kubectl` Sono supportati tutti i controller e le risorse GA dell'UPstream ACK.

[Per la documentazione completa di ACK e le guide specifiche per i servizi, consulta la documentazione ACK.](https://aws-controllers-k8s.github.io/community/)

## Percorso di migrazione
<a name="_migration_path"></a>

È possibile migrare da ACK autogestito alla funzionalità gestita senza tempi di inattività:

1. Aggiorna il controller ACK autogestito `kube-system` per utilizzarlo per i contratti di locazione elettorali per i leader, ad esempio:

   ```
   helm upgrade --install ack-s3-controller \
     oci://public.ecr.aws/aws-controllers-k8s/s3-chart \
     --namespace ack-system \
     --set leaderElection.namespace=kube-system
   ```

   In questo modo il contratto di locazione del controllore viene spostato in avanti`kube-system`, permettendo alla capacità gestita di coordinarsi con esso.

1. Crea la funzionalità ACK sul tuo cluster (vedi[Crea una funzionalità ACK](create-ack-capability.md))

1. La funzionalità gestita riconosce le AWS risorse esistenti gestite da ACK e si occupa della riconciliazione

1. Ridimensiona o rimuovi gradualmente le implementazioni di controller autogestiti:

   ```
   helm uninstall ack-s3-controller --namespace ack-system
   ```

Questo approccio consente a entrambi i controller di coesistere in modo sicuro durante la migrazione. La funzionalità gestita adotta automaticamente le risorse precedentemente gestite da controller autogestiti, garantendo una riconciliazione continua senza conflitti.

## Fasi successive
<a name="_next_steps"></a>
+  [Crea una funzionalità ACK](create-ack-capability.md)- Creazione di una risorsa con funzionalità ACK
+  [Concetti ACK](ack-concepts.md)- Comprendi i concetti e il ciclo di vita delle risorse ACK
+  [Configurare le autorizzazioni ACK](ack-permissions.md)- Configura IAM e autorizzazioni

# Implementazione continua con Argo CD
<a name="argocd"></a>

Argo CD è uno strumento dichiarativo e di distribuzione GitOps continua per Kubernetes. Con Argo CD, puoi automatizzare l'implementazione e la gestione del ciclo di vita delle tue applicazioni su più cluster e ambienti. Argo CD supporta diversi tipi di sorgenti tra cui repository Git, registri Helm (HTTP e OCI) e immagini OCI, offrendo flessibilità alle organizzazioni con diversi requisiti di sicurezza e conformità.

Con EKS Capabilities, Argo CD è completamente gestito da AWS, eliminando la necessità di installare, mantenere e scalare i controller Argo CD e le loro dipendenze dai cluster.

## Come funziona Argo CD
<a name="_how_argo_cd_works"></a>

Argo CD segue GitOps lo schema, in cui la fonte dell'applicazione (repository Git, registro Helm o immagine OCI) è la fonte di verità per definire lo stato dell'applicazione desiderato. Quando si crea una `Application` risorsa Argo CD, si specifica l'origine contenente i manifesti dell'applicazione e il cluster e lo spazio dei nomi Kubernetes di destinazione. Argo CD monitora continuamente sia la sorgente che lo stato live nel cluster, sincronizzando automaticamente qualsiasi modifica per garantire che lo stato del cluster corrisponda allo stato desiderato.

**Nota**  
Con EKS Capability for Argo CD, il software Argo CD viene eseguito nel piano di AWS controllo, non sui nodi di lavoro. Ciò significa che i nodi di lavoro non hanno bisogno dell'accesso diretto ai repository Git o ai registri Helm: la funzionalità gestisce l'accesso all'origine dall'account. AWS 

Argo CD fornisce tre tipi di risorse principali:
+  **Applicazione**: definisce una distribuzione da un repository Git a un cluster di destinazione
+  **ApplicationSet**: genera più applicazioni da modelli per distribuzioni multi-cluster
+  **AppProject**: Fornisce il raggruppamento logico e il controllo degli accessi per le applicazioni

 **Esempio: creazione di un'applicazione Argo CD** 

L'esempio seguente mostra come creare una risorsa Argo CD`Application`:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: guestbook
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/argoproj/argocd-example-apps.git
    targetRevision: HEAD
    path: guestbook
  destination:
    name: in-cluster
    namespace: guestbook
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
```

**Nota**  
Usalo `destination.name` con il nome del cluster che hai usato durante la registrazione del cluster (come `in-cluster` per il cluster locale). Il `destination.server` campo funziona anche con il cluster EKS ARNs, ma si consiglia di utilizzare i nomi dei cluster per una migliore leggibilità.

## Vantaggi di Argo CD
<a name="_benefits_of_argo_cd"></a>

Argo CD implementa un GitOps flusso di lavoro in cui si definiscono le configurazioni delle applicazioni nei repository Git e Argo CD sincronizza automaticamente le applicazioni in modo che corrispondano allo stato desiderato. Questo approccio incentrato su Git fornisce un audit trail completo di tutte le modifiche, consente facili rollback e si integra naturalmente con i processi di revisione e approvazione del codice esistenti. Argo CD rileva e riconcilia automaticamente la deriva tra lo stato desiderato in Git e lo stato effettivo nei cluster, assicurando che le distribuzioni rimangano coerenti con la configurazione dichiarata.

Con Argo CD, è possibile distribuire e gestire applicazioni su più cluster da una singola istanza Argo CD, semplificando le operazioni in ambienti multi-cluster e multiregione. L'interfaccia utente di Argo CD offre funzionalità di visualizzazione e monitoraggio, che consentono di visualizzare lo stato di implementazione, l'integrità e la cronologia delle applicazioni. L'interfaccia utente si integra con AWS Identity Center (precedentemente AWS SSO) per un'autenticazione e un'autorizzazione senza interruzioni, consentendoti di controllare l'accesso utilizzando l'infrastruttura di gestione delle identità esistente.

Come parte di EKS Managed Capabilities, Argo CD è completamente gestito da AWS, eliminando la necessità di installare, configurare e mantenere l'infrastruttura Argo CD. AWS gestisce la scalabilità, l'applicazione di patch e la gestione operativa, permettendo ai team di concentrarsi sulla distribuzione delle applicazioni piuttosto che sulla manutenzione degli strumenti.

## Integrazione con Identity Center AWS
<a name="integration_with_shared_aws_identity_center"></a>

EKS Managed Capabilities fornisce l'integrazione diretta tra Argo CD e AWS Identity Center, consentendo l'autenticazione e l'autorizzazione senza interruzioni per gli utenti. Quando abiliti la funzionalità Argo CD, puoi configurare l'integrazione di AWS Identity Center per mappare i gruppi e gli utenti di Identity Center ai ruoli RBAC di Argo CD, consentendoti di controllare chi può accedere e gestire le applicazioni in Argo CD.

## Integrazione con altre funzionalità gestite da EKS
<a name="_integration_with_other_eks_managed_capabilities"></a>

Argo CD si integra con altre funzionalità gestite da EKS.
+  ** AWS Controller for Kubernetes (ACK)**: utilizza Argo CD per gestire l'implementazione delle risorse ACK su più cluster, abilitando i flussi di lavoro per la tua infrastruttura. GitOps AWS 
+  **kro (Kube Resource Orchestrator)**: usa Argo CD per distribuire composizioni kro su più cluster, abilitando una composizione coerente delle risorse in tutto il tuo ambiente Kubernetes.

## Guida introduttiva ad Argo CD
<a name="_getting_started_with_argo_cd"></a>

Per iniziare a usare il CD EKS Capability for Argo:

1. Crea e configura un IAM Capability Role con le autorizzazioni necessarie per consentire ad Argo CD di accedere ai tuoi sorgenti e gestire le applicazioni.

1.  [Crea una risorsa con funzionalità Argo CD](create-argocd-capability.md) sul tuo cluster EKS tramite la AWS console, la AWS CLI o la tua infrastruttura preferita come strumento di codice.

1. Configura l'accesso al repository e registra i cluster per la distribuzione delle applicazioni.

1. Crea risorse applicative per distribuire le tue applicazioni dalle tue fonti dichiarative.

# Crea una funzionalità Argo CD
<a name="create-argocd-capability"></a>

Questo argomento spiega come creare una funzionalità Argo CD sul tuo cluster Amazon EKS.

## Prerequisiti
<a name="_prerequisites"></a>

Prima di creare una funzionalità Argo CD, assicurati di avere:
+ Un cluster Amazon EKS esistente che esegue una versione di Kubernetes supportata (sono supportate tutte le versioni con supporto standard ed esteso)
+  ** AWS Identity Center configurato**: necessario per l'autenticazione Argo CD (gli utenti locali non sono supportati)
+ Un ruolo di capacità IAM con autorizzazioni per Argo CD
+ Autorizzazioni IAM sufficienti per creare risorse di funzionalità sui cluster EKS
+  `kubectl`configurato per comunicare con il cluster
+ (Opzionale) L'Argo CD CLI è stata installata per una più semplice gestione di cluster e repository
+ (Per CLI/EksCtl) Lo strumento CLI appropriato installato e configurato

Per istruzioni sulla creazione dello IAM Capability Role, consulta. [Funzionalità Amazon EKS, ruolo IAM](capability-role.md) Per la configurazione di Identity Center, consulta [Guida introduttiva a AWS Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html).

**Importante**  
Il ruolo di capacità IAM fornito determina a quali AWS risorse Argo CD può accedere. Ciò include l'accesso al repository Git tramite CodeConnections e i segreti in Secrets Manager. Per indicazioni sulla creazione di un ruolo appropriato con autorizzazioni con privilegi minimi, consulta e. [Funzionalità Amazon EKS, ruolo IAM](capability-role.md) [Considerazioni sulla sicurezza per EKS Capabilities](capabilities-security.md)

## Scegli il tuo strumento
<a name="_choose_your_tool"></a>

È possibile creare una funzionalità Argo CD utilizzando la Console di gestione AWS AWS CLI o eksctl:
+  [Crea una funzionalità Argo CD utilizzando la console](argocd-create-console.md)- Usa la console per un'esperienza guidata
+  [Crea una funzionalità Argo CD utilizzando la CLI AWS](argocd-create-cli.md)- Usa la AWS CLI per lo scripting e l'automazione
+  [Crea una funzionalità Argo CD usando eksctl](argocd-create-eksctl.md)- Usa eksctl per un'esperienza nativa di Kubernetes

## Cosa succede quando si crea una funzionalità Argo CD
<a name="_what_happens_when_you_create_an_argo_cd_capability"></a>

Quando create una funzionalità Argo CD:

1. EKS crea il servizio di funzionalità Argo CD nel piano di controllo AWS 

1. Le definizioni di risorse personalizzate (CRDs) sono installate nel cluster

1. Viene creata automaticamente una voce di accesso per il tuo IAM Capability Role con policy di accesso specifiche per ciascuna funzionalità che concedono le autorizzazioni Kubernetes di base (vedi) [Considerazioni sulla sicurezza per EKS Capabilities](capabilities-security.md)

1. Argo CD inizia a cercare le sue risorse personalizzate (Applicazioni,,) ApplicationSets AppProjects

1. Lo stato della funzionalità cambia da a `CREATING` `ACTIVE` 

1. L'interfaccia utente di Argo CD diventa accessibile tramite il relativo URL

Una volta attiva, potete creare applicazioni Argo CD nel cluster da distribuire dalle vostre fonti dichiarative.

**Nota**  
La voce di accesso creata automaticamente non concede le autorizzazioni per distribuire applicazioni nei cluster. Per distribuire le applicazioni, è necessario configurare autorizzazioni Kubernetes RBAC aggiuntive per ogni cluster di destinazione. Vedi [Registra i cluster di destinazione](argocd-register-clusters.md) per i dettagli sulla registrazione dei cluster e sulla configurazione dell'accesso.

## Fasi successive
<a name="_next_steps"></a>

Dopo aver creato la funzionalità Argo CD:
+  [Concetti di Argo CD](argocd-concepts.md)- Scopri GitOps i principi, le politiche di sincronizzazione e i modelli multicluster
+  [Lavorare con Argo CD](working-with-argocd.md)- Configura l'accesso al repository, registra i cluster di destinazione e crea applicazioni
+  [Considerazioni su Argo CD](argocd-considerations.md)- Esplora i modelli di architettura multicluster e la configurazione avanzata

# Crea una funzionalità Argo CD utilizzando la console
<a name="argocd-create-console"></a>

Questo argomento descrive come creare una funzionalità Argo CD utilizzando. Console di gestione AWS

## Prerequisiti
<a name="_prerequisites"></a>
+  ** AWS Identity Center configurato**: Argo CD richiede AWS Identity Center per l'autenticazione. Gli utenti locali non sono supportati. Se non hai configurato AWS Identity Center, consulta [Guida introduttiva a AWS Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html) per creare un'istanza di Identity Center e [Aggiungi utenti](https://docs.aws.amazon.com/singlesignon/latest/userguide/addusers.html) e [Aggiungi gruppi](https://docs.aws.amazon.com/singlesignon/latest/userguide/addgroups.html) per creare utenti e gruppi per l'accesso ad Argo CD.

## Crea la funzionalità Argo CD
<a name="_create_the_argo_cd_capability"></a>

1. Apri la console Amazon EKS a https://console.aws.amazon.com/eks/ home\$1/clusters.

1. Seleziona il nome del cluster per aprire la pagina dei dettagli del cluster.

1. Scegli la scheda **Funzionalità**.

1. Nella barra di navigazione a sinistra, scegli **Argo CD**.

1. Scegli la **funzionalità Create Argo CD**.

1. Per **IAM Capability Role**:
   + Se disponi già di un IAM Capability Role, selezionalo dal menu a discesa
   + Se devi creare un ruolo, scegli **Crea ruolo Argo CD** 

     Questo apre la console IAM in una nuova scheda con policy di fiducia precompilate e accesso completo in lettura a Secrets Manager. Per impostazione predefinita, non vengono aggiunte altre autorizzazioni, ma è possibile aggiungerle se necessario. Se prevedi di utilizzare CodeCommit repository o altri AWS servizi, aggiungi le autorizzazioni appropriate prima di creare il ruolo.

     Dopo aver creato il ruolo, torna alla console EKS e il ruolo verrà selezionato automaticamente.
**Nota**  
Se prevedi di utilizzare le integrazioni opzionali con AWS Secrets Manager o AWS CodeConnections, dovrai aggiungere le autorizzazioni al ruolo. Per esempi di policy IAM e linee guida alla configurazione, consulta [Gestisci i segreti delle applicazioni con AWS Secrets Manager](integration-secrets-manager.md) e. [Connect ai repository Git con AWS CodeConnections](integration-codeconnections.md)

1. Configura AWS l'integrazione con Identity Center:

   1. Seleziona **Abilita AWS l'integrazione con Identity Center**.

   1. Scegli la tua istanza di Identity Center dal menu a discesa.

   1. Configura le mappature dei ruoli per RBAC assegnando utenti o gruppi ai ruoli di Argo CD (ADMIN, EDITOR o VIEWER)

1. Scegli **Create** (Crea).

Inizia il processo di creazione delle funzionalità.

## Verifica che la funzionalità sia attiva
<a name="_verify_the_capability_is_active"></a>

1. Nella scheda **Funzionalità**, visualizza lo stato delle funzionalità di Argo CD.

1. Attendi che lo stato cambi da `CREATING` a`ACTIVE`.

1. Una volta attiva, la funzionalità è pronta per l'uso.

Per informazioni sullo stato delle funzionalità e sulla risoluzione dei problemi, vedere[Lavorare con le risorse di capacità](working-with-capabilities.md).

## Accedere all'interfaccia utente di Argo CD
<a name="_access_the_argo_cd_ui"></a>

Dopo che la funzionalità è attiva, puoi accedere all'interfaccia utente di Argo CD:

1. Nella pagina delle funzionalità di Argo CD, scegliete **Open Argo** CD UI.

1. L'interfaccia utente di Argo CD si apre in una nuova scheda del browser.

1. Ora puoi creare applicazioni e gestire le distribuzioni tramite l'interfaccia utente.

## Fasi successive
<a name="_next_steps"></a>
+  [Lavorare con Argo CD](working-with-argocd.md)- Configura gli archivi, registra i cluster e crea applicazioni
+  [Considerazioni su Argo CD](argocd-considerations.md)- Architettura multicluster e configurazione avanzata
+  [Lavorare con le risorse di capacità](working-with-capabilities.md)- Gestite le risorse relative alle funzionalità di Argo CD

# Crea una funzionalità Argo CD utilizzando la CLI AWS
<a name="argocd-create-cli"></a>

Questo argomento descrive come creare una funzionalità Argo CD utilizzando la AWS CLI.

## Prerequisiti
<a name="_prerequisites"></a>
+  ** AWS CLI**: versione `2.12.3` o successiva. Per verificare la tua versione, `aws --version` esegui. Per ulteriori informazioni, consulta la Guida per l'utente all'[installazione](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) nell'interfaccia a riga di AWS comando.
+  **`kubectl`**— Uno strumento da riga di comando per lavorare con i cluster Kubernetes. Per ulteriori informazioni, consulta [Impostazione di `kubectl` e `eksctl`](install-kubectl.md).
+  ** AWS Identity Center configurato**: Argo CD richiede AWS Identity Center per l'autenticazione. Gli utenti locali non sono supportati. Se non hai configurato AWS Identity Center, consulta [Guida introduttiva a AWS Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html) per creare un'istanza di Identity Center e [Aggiungi utenti](https://docs.aws.amazon.com/singlesignon/latest/userguide/addusers.html) e [Aggiungi gruppi](https://docs.aws.amazon.com/singlesignon/latest/userguide/addgroups.html) per creare utenti e gruppi per l'accesso ad Argo CD.

## Fase 1: Creare un ruolo di capacità IAM
<a name="_step_1_create_an_iam_capability_role"></a>

Crea un file di policy di fiducia:

```
cat > argocd-trust-policy.json << 'EOF'
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "capabilities.eks.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession"
      ]
    }
  ]
}
EOF
```

Crea il ruolo IAM:

```
aws iam create-role \
  --role-name ArgoCDCapabilityRole \
  --assume-role-policy-document file://argocd-trust-policy.json
```

**Nota**  
Se prevedi di utilizzare le integrazioni opzionali con AWS Secrets Manager o AWS CodeConnections, dovrai aggiungere le autorizzazioni al ruolo. Per esempi di policy IAM e indicazioni sulla configurazione, consulta [Gestisci i segreti delle applicazioni con AWS Secrets Manager](integration-secrets-manager.md) e. [Connect ai repository Git con AWS CodeConnections](integration-codeconnections.md)

## Fase 2: Creare la funzionalità Argo CD
<a name="_step_2_create_the_argo_cd_capability"></a>

Crea la risorsa di funzionalità Argo CD sul tuo cluster.

Innanzitutto, imposta le variabili di ambiente per la configurazione del tuo Identity Center:

```
# Get your Identity Center instance ARN (replace region if your IDC instance is in a different region)
export IDC_INSTANCE_ARN=$(aws sso-admin list-instances --region [.replaceable]`region` --query 'Instances[0].InstanceArn' --output text)

# Get a user ID for RBAC mapping (replace with your username and region if needed)
export IDC_USER_ID=$(aws identitystore list-users \
  --region [.replaceable]`region` \
  --identity-store-id $(aws sso-admin list-instances --region [.replaceable]`region` --query 'Instances[0].IdentityStoreId' --output text) \
  --query 'Users[?UserName==`your-username`].UserId' --output text)

echo "IDC_INSTANCE_ARN=$IDC_INSTANCE_ARN"
echo "IDC_USER_ID=$IDC_USER_ID"
```

Crea la funzionalità con l'integrazione di Identity Center. Sostituisci *region-code* con la AWS regione in cui si trova il cluster, *my-cluster* con il nome del cluster e *idc-region-code* con il codice regionale in cui è stato configurato lo IAM Identity Center:

```
aws eks create-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-argocd \
  --type ARGOCD \
  --role-arn arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):role/ArgoCDCapabilityRole \
  --delete-propagation-policy RETAIN \
  --configuration '{
    "argoCd": {
      "awsIdc": {
        "idcInstanceArn": "'$IDC_INSTANCE_ARN'",
        "idcRegion": "'[.replaceable]`idc-region-code`'"
      },
      "rbacRoleMappings": [{
        "role": "ADMIN",
        "identities": [{
          "id": "'$IDC_USER_ID'",
          "type": "SSO_USER"
        }]
      }]
    }
  }'
```

Il comando viene restituito immediatamente, ma la funzionalità impiega del tempo per diventare attiva poiché EKS crea l'infrastruttura e i componenti di funzionalità richiesti. EKS installerà le Kubernetes Custom Resource Definitions relative a questa funzionalità nel cluster non appena viene creata.

**Nota**  
Se ricevi un errore che indica che il cluster non esiste o non disponi delle autorizzazioni, verifica:  
Il nome del cluster è corretto
La tua AWS CLI è configurata per la regione corretta
Disponi delle autorizzazioni IAM richieste

## Fase 3: Verifica che la funzionalità sia attiva
<a name="_step_3_verify_the_capability_is_active"></a>

Attendi che la funzionalità diventi attiva. Sostituiscilo *region-code* con la AWS regione in cui si trova il cluster e *my-cluster* con il nome del cluster.

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-argocd \
  --query 'capability.status' \
  --output text
```

La funzionalità è pronta quando viene visualizzato lo stato`ACTIVE`. Non continuare con il passaggio successivo fino a quando lo stato non sarà raggiunto`ACTIVE`.

Puoi anche visualizzare i dettagli completi delle funzionalità:

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-argocd
```

## Fase 4: Verifica della disponibilità di risorse personalizzate
<a name="_step_4_verify_custom_resources_are_available"></a>

Dopo che la funzionalità è attiva, verificate che le risorse personalizzate di Argo CD siano disponibili nel cluster:

```
kubectl api-resources | grep argoproj.io
```

Dovresti vedere i tipi `Application` di `ApplicationSet` risorse elencati.

## Fasi successive
<a name="_next_steps"></a>
+  [Lavorare con Argo CD](working-with-argocd.md)- Configura i repository, registra i cluster e crea applicazioni
+  [Considerazioni su Argo CD](argocd-considerations.md)- Architettura multicluster e configurazione avanzata
+  [Lavorare con le risorse di capacità](working-with-capabilities.md)- Gestisci la tua risorsa di funzionalità Argo CD

# Crea una funzionalità Argo CD usando eksctl
<a name="argocd-create-eksctl"></a>

Questo argomento descrive come creare una funzionalità Argo CD usando eksctl.

**Nota**  
I seguenti passaggi richiedono la versione eksctl o successiva. `0.220.0` Per verificare la tua versione, esegui. `eksctl version`

## Fase 1: Creare un ruolo di capacità IAM
<a name="_step_1_create_an_iam_capability_role"></a>

Crea un file di policy di fiducia:

```
cat > argocd-trust-policy.json << 'EOF'
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "capabilities.eks.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession"
      ]
    }
  ]
}
EOF
```

Crea il ruolo IAM:

```
aws iam create-role \
  --role-name ArgoCDCapabilityRole \
  --assume-role-policy-document file://argocd-trust-policy.json
```

**Nota**  
Per questa configurazione di base, non sono necessarie politiche IAM aggiuntive. Se prevedi di utilizzare Secrets Manager per le credenziali del repository oppure CodeConnections, dovrai aggiungere le autorizzazioni al ruolo. Per esempi di policy IAM e linee guida alla configurazione, consulta e. [Gestisci i segreti delle applicazioni con AWS Secrets Manager](integration-secrets-manager.md) [Connect ai repository Git con AWS CodeConnections](integration-codeconnections.md)

## Fase 2: Ottieni la configurazione del tuo AWS Identity Center
<a name="step_2_get_your_shared_aws_identity_center_configuration"></a>

Ottieni l'ARN e l'ID utente dell'istanza di Identity Center per la configurazione RBAC:

```
# Get your Identity Center instance ARN
aws sso-admin list-instances --query 'Instances[0].InstanceArn' --output text

# Get a user ID for admin access (replace 'your-username' with your Identity Center username)
aws identitystore list-users \
  --identity-store-id $(aws sso-admin list-instances --query 'Instances[0].IdentityStoreId' --output text) \
  --query 'Users[?UserName==`your-username`].UserId' --output text
```

Prendi nota di questi valori: ti serviranno nel passaggio successivo.

## Fase 3: Creare un file di configurazione eksctl
<a name="_step_3_create_an_eksctl_configuration_file"></a>

Crea un archivio denominato `argocd-capability.yaml` con i seguenti contenuti. Sostituisci i valori segnaposto con il nome del cluster, la regione del cluster, l'ARN del ruolo IAM, l'ARN dell'istanza di Identity Center, la regione dell'Identity Center e l'ID utente:

```
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: my-cluster
  region: cluster-region-code

capabilities:
  - name: my-argocd
    type: ARGOCD
    roleArn: arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole
    deletePropagationPolicy: RETAIN
    configuration:
      argocd:
        awsIdc:
          idcInstanceArn: arn:aws:sso:::instance/ssoins-123abc
          idcRegion: idc-region-code
        rbacRoleMappings:
          - role: ADMIN
            identities:
              - id: 38414300-1041-708a-01af-5422d6091e34
                type: SSO_USER
```

**Nota**  
È possibile aggiungere più utenti o gruppi alle mappature RBAC. Per i gruppi, usa `type: SSO_GROUP` e fornisci l'ID del gruppo. I ruoli disponibili sono `ADMIN``EDITOR`, e`VIEWER`.

## Fase 4: Creare la funzionalità Argo CD
<a name="_step_4_create_the_argo_cd_capability"></a>

Applica il file di configurazione:

```
eksctl create capability -f argocd-capability.yaml
```

Il comando viene restituito immediatamente, ma la funzionalità impiega del tempo per diventare attiva.

## Fase 5: Verificare che la funzionalità sia attiva
<a name="_step_5_verify_the_capability_is_active"></a>

Verifica lo stato della capacità. Sostituiscilo *region-code* con la AWS regione in cui si trova il cluster e sostituiscilo *my-cluster* con il nome del cluster.

```
eksctl get capability \
  --region region-code \
  --cluster my-cluster \
  --name my-argocd
```

La funzionalità è pronta quando viene visualizzato lo stato`ACTIVE`.

## Fase 6: Verifica della disponibilità di risorse personalizzate
<a name="_step_6_verify_custom_resources_are_available"></a>

Dopo che la funzionalità è attiva, verificate che le risorse personalizzate di Argo CD siano disponibili nel cluster:

```
kubectl api-resources | grep argoproj.io
```

Dovresti vedere i tipi `Application` di `ApplicationSet` risorse elencati.

## Fasi successive
<a name="_next_steps"></a>
+  [Lavorare con Argo CD](working-with-argocd.md)- Scopri come creare e gestire applicazioni Argo CD
+  [Considerazioni su Argo CD](argocd-considerations.md)- Configura SSO e accesso multicluster
+  [Lavorare con le risorse di capacità](working-with-capabilities.md)- Gestisci la tua risorsa di funzionalità Argo CD

# Concetti di Argo CD
<a name="argocd-concepts"></a>

Argo CD implementa GitOps trattando Git come l'unica fonte di verità per le implementazioni delle applicazioni. Questo argomento illustra un esempio pratico, quindi spiega i concetti fondamentali da comprendere quando si lavora con il CD EKS Capability for Argo.

## Guida introduttiva ad Argo CD
<a name="_getting_started_with_argo_cd"></a>

Dopo aver creato la funzionalità Argo CD (vedi[Crea una funzionalità Argo CD](create-argocd-capability.md)), puoi iniziare a distribuire le applicazioni. Questo esempio illustra la registrazione di un cluster e la creazione di un'applicazione.

### Fase 1: configurazione
<a name="_step_1_set_up"></a>

 **Registra il tuo cluster** (richiesto)

Registra il cluster in cui desideri distribuire le applicazioni. Per questo esempio, registreremo lo stesso cluster su cui è in esecuzione Argo CD (potete usare il nome `in-cluster` per motivi di compatibilità con la maggior parte degli esempi di Argo CD):

```
# Get your cluster ARN
CLUSTER_ARN=$(aws eks describe-cluster \
  --name my-cluster \
  --query 'cluster.arn' \
  --output text)

# Register the cluster using Argo CD CLI
argocd cluster add $CLUSTER_ARN \
  --aws-cluster-name $CLUSTER_ARN \
  --name in-cluster \
  --project default
```

**Nota**  
Per informazioni sulla configurazione dell'Argo CD CLI per funzionare con la funzionalità Argo CD in EKS, vedere. [Utilizzo dell'Argo CD CLI con funzionalità gestite](argocd-comparison.md#argocd-cli-configuration)

In alternativa, registra il cluster utilizzando un Kubernetes Secret (vedi per i dettagli). [Registra i cluster di destinazione](argocd-register-clusters.md)

 **Configura l'accesso al repository (opzionale)**

Questo esempio utilizza un GitHub archivio pubblico, quindi non è richiesta alcuna configurazione del repository. Per gli archivi privati, configura l'accesso utilizzando AWS Secrets Manager o Kubernetes Secrets (vedi [Configurare l'accesso al repository](argocd-configure-repositories.md) per i dettagli). CodeConnections

Per AWS i servizi (grafici ECR for Helm e CodeCommit) CodeConnections, puoi farvi riferimento direttamente nelle risorse dell'applicazione senza creare un repository. Il Capability Role deve disporre delle autorizzazioni IAM richieste. Per informazioni dettagliate, vedi [Configurare l'accesso al repository](argocd-configure-repositories.md).

### Fase 2: crea un'applicazione
<a name="_step_2_create_an_application"></a>

Crea questo manifesto dell'applicazione in`my-app.yaml`:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: guestbook
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/argoproj/argocd-example-apps.git
    targetRevision: HEAD
    path: guestbook
  destination:
    name: in-cluster
    namespace: guestbook
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
    - CreateNamespace=true
```

Applica l'applicazione:

```
kubectl apply -f my-app.yaml
```

Dopo aver applicato questa applicazione, Argo CD: 1. Sincronizza l'applicazione da Git al tuo cluster (distribuzione iniziale) 2. Monitora il repository Git per le modifiche 3. Sincronizza automaticamente le modifiche successive al cluster 4. Rileva e corregge qualsiasi deriva dallo stato desiderato 5. Fornisce lo stato di salute e la cronologia di sincronizzazione nell'interfaccia utente

Visualizza lo stato dell'applicazione:

```
kubectl get application guestbook -n argocd
```

È inoltre possibile visualizzare l'applicazione utilizzando la CLI di Argo CD o l'interfaccia utente di Argo CD (accessibile dalla console EKS nella scheda Capacità del cluster).

**Nota**  
Quando si utilizza l'Argo CD CLI con la funzionalità gestita, specificare le applicazioni con il prefisso dello spazio dei nomi:. `argocd app get argocd/guestbook`

**Nota**  
Usa il nome del cluster in `destination.name` (il nome che hai usato durante la registrazione del cluster). La funzionalità gestita non supporta l'impostazione predefinita locale all'interno del cluster ()`kubernetes.default.svc`.

## Concetti principali
<a name="_core_concepts"></a>

### GitOps principi e tipi di fonti
<a name="_gitops_principles_and_source_types"></a>

Argo CD implementa GitOps, in cui la fonte dell'applicazione è l'unica fonte attendibile per le implementazioni:
+  **Dichiarativo**: lo stato desiderato viene dichiarato utilizzando i manifesti YAML, i grafici Helm o gli overlay Kustomize
+  **Versionato: ogni modifica viene tracciata con un audit trail completo**
+  **Automatizzato**: Argo CD monitora continuamente le sorgenti e sincronizza automaticamente le modifiche
+  **Riparazione automatica:** rileva e corregge lo scostamento tra lo stato desiderato e quello effettivo del cluster

 **Tipi di sorgenti supportati:**
+  **Archivi Git** - GitHub GitLab, Bitbucket, CodeCommit (HTTPS, SSH o) CodeConnections
+  Registri **Helm: registri** HTTP (simili) e registri OCI (simili) `https://aws.github.io/eks-charts` `public.ecr.aws`
+  **Immagini OCI: immagini** dei contenitori contenenti manifesti o grafici Helm (come) `oci://registry-1.docker.io/user/my-app`

Questa flessibilità consente alle organizzazioni di scegliere fonti che soddisfino i propri requisiti di sicurezza e conformità. Ad esempio, le organizzazioni che limitano l'accesso a Git dai cluster possono utilizzare ECR per i grafici Helm o le immagini OCI.

Per ulteriori informazioni, consultate [Application Sources nella documentazione](https://argo-cd.readthedocs.io/en/stable/user-guide/application-sources/) del CD Argo.

### Sincronizzazione e riconciliazione
<a name="_sync_and_reconciliation"></a>

Argo CD monitora continuamente le sorgenti e i cluster per rilevare e correggere le differenze:

1. Esamina le fonti delle modifiche (impostazione predefinita: ogni 6 minuti)

1. Confronta lo stato desiderato con lo stato del cluster

1. Contrassegna le applicazioni come o `Synced` `OutOfSync` 

1. Sincronizza automaticamente le modifiche (se configurate) o attende l'approvazione manuale

1. Monitora lo stato delle risorse dopo la sincronizzazione

 **Le onde di sincronizzazione controllano** l'ordine di creazione delle risorse utilizzando le annotazioni:

```
metadata:
  annotations:
    argocd.argoproj.io/sync-wave: "0"  # Default if not specified
```

Le risorse vengono applicate in ordine ondulatorio (partendo dai numeri più bassi, inclusi i numeri negativi come`-1`). Wave `0` è l'impostazione predefinita se non specificata. Ciò consente di creare dipendenze come i namespace (wave) prima delle distribuzioni (wave`-1`) prima dei servizi (wave`0`). `1`

 **La riparazione automatica annulla automaticamente le modifiche manuali:**

```
spec:
  syncPolicy:
    automated:
      selfHeal: true
```

**Nota**  
La funzionalità gestita utilizza il tracciamento delle risorse basato sulle annotazioni (non basato su etichette) per una migliore compatibilità con le convenzioni Kubernetes e altri strumenti.

[Per informazioni dettagliate sulle fasi di sincronizzazione, gli hook e i pattern avanzati, consulta la documentazione di sincronizzazione con Argo CD.](https://argo-cd.readthedocs.io/en/stable/user-guide/sync-waves/)

### Integrità dell'applicazione
<a name="_application_health"></a>

Argo CD monitora lo stato di tutte le risorse dell'applicazione:

 **Stati di salute** ****: \$1 Integro: tutte le risorse funzionano come previsto \$1 In corso di **avanzamento** - Risorse in fase di creazione o aggiornamento \$1 **Degradate** - Alcune risorse non integre (pod bloccati, processi non riusciti) \$1 **Sospesa - Applicazione intenzionalmente sospesa** \$1 Mancante - Risorse definite in Git non presenti nel cluster****

Argo CD include controlli di integrità integrati per le risorse Kubernetes più comuni (implementazioni, lavori, ecc.) e supporta controlli di integrità personalizzati per. StatefulSets CRDs

Lo stato dell'applicazione è determinato da tutte le sue risorse: se una risorsa lo è, l'applicazione sì. `Degraded` `Degraded`

Per ulteriori informazioni, consultate [Resource Health](https://argo-cd.readthedocs.io/en/stable/operator-manual/health/) nella documentazione del CD Argo.

### Schemi multicluster
<a name="_multi_cluster_patterns"></a>

Argo CD supporta due modelli di implementazione principali:

 **H ub-and-spoke** - Esegui Argo CD su un cluster di gestione dedicato che viene distribuito su più cluster di carichi di lavoro: \$1 Controllo e visibilità centralizzati \$1 Policy coerenti su tutti i cluster \$1 Un'istanza Argo CD da gestire \$1 Chiara separazione tra piano di controllo e carichi di lavoro

 Per **cluster**: esegui Argo CD su ogni cluster, gestendo solo le applicazioni del cluster: \$1 Separazione del cluster (un errore non influisce sugli altri) \$1 Rete più semplice (nessuna comunicazione tra cluster) \$1 Configurazione iniziale più semplice (nessuna registrazione del cluster)

Scegliete tra hub-and-spoke i team di piattaforma che gestiscono più cluster o per i team indipendenti per i cluster o quando i cluster devono essere completamente isolati.

Per una configurazione multi-cluster dettagliata, consulta. [Considerazioni su Argo CD](argocd-considerations.md)

### Progetti
<a name="_projects"></a>

I progetti forniscono il raggruppamento logico e il controllo degli accessi per le applicazioni:
+  **Restrizioni all'origine**: limita i repository Git che possono essere utilizzati
+  **Restrizioni sulla destinazione**: limita i cluster e i namespace a cui è possibile rivolgersi
+  **Restrizioni alle risorse**: limita i tipi di risorse Kubernetes che possono essere distribuiti
+  **Integrazione RBAC**: mappa i progetti all'utente e al gruppo di Identity Center AWS IDs

Le applicazioni appartengono a un singolo progetto. Se non specificato, usano il `default` progetto, che di default non ha restrizioni. Per uso in produzione, modificate il `default` progetto per limitare l'accesso e creare nuovi progetti con le restrizioni appropriate.

Per la configurazione del progetto e i modelli RBAC, vedere. [Configurare le autorizzazioni di Argo CD](argocd-permissions.md)

### Opzioni di sincronizzazione
<a name="_sync_options"></a>

Ottimizza il comportamento di sincronizzazione con opzioni comuni:
+  `CreateNamespace=true`- Crea automaticamente lo spazio dei nomi di destinazione
+  `ServerSideApply=true`- Utilizza server-side apply per una migliore risoluzione dei conflitti
+  `SkipDryRunOnMissingResource=true`- Salta il dry run quando CRDs non esistono ancora (utile per le istanze kro)

```
spec:
  syncPolicy:
    syncOptions:
    - CreateNamespace=true
    - ServerSideApply=true
    - SkipDryRunOnMissingResource=true
```

Per un elenco completo delle opzioni di sincronizzazione, consultate la documentazione sulle opzioni di sincronizzazione di [Argo CD](https://argo-cd.readthedocs.io/en/stable/user-guide/sync-options/).

## Fasi successive
<a name="_next_steps"></a>
+  [Configurare l'accesso al repository](argocd-configure-repositories.md)- Configura l'accesso al repository Git
+  [Registra i cluster di destinazione](argocd-register-clusters.md)- Registra i cluster di destinazione per la distribuzione
+  [Crea applicazioni](argocd-create-application.md)- Crea la tua prima applicazione
+  [Considerazioni su Argo CD](argocd-considerations.md)- Modelli specifici di EKS, integrazione con Identity Center e configurazione multicluster
+  Documentazione [su Argo CD - Documentazione](https://argo-cd.readthedocs.io/en/stable/) completa su Argo CD, inclusi hook di sincronizzazione, controlli di integrità e modelli avanzati

# Configurare le autorizzazioni di Argo CD
<a name="argocd-permissions"></a>

La funzionalità gestita da Argo CD si integra con AWS Identity Center per l'autenticazione e utilizza ruoli RBAC integrati per l'autorizzazione. Questo argomento spiega come configurare le autorizzazioni per utenti e team.

## Come funzionano le autorizzazioni con Argo CD
<a name="_how_permissions_work_with_argo_cd"></a>

La funzionalità Argo CD utilizza AWS Identity Center per l'autenticazione e fornisce tre ruoli RBAC integrati per l'autorizzazione.

Quando un utente accede ad Argo CD:

1. Si autenticano tramite AWS Identity Center (che può essere collegato al vostro provider di identità aziendale)

1.  AWS Identity Center fornisce informazioni su utenti e gruppi su Argo CD

1. Argo CD associa utenti e gruppi ai ruoli RBAC in base alla configurazione

1. Gli utenti vedono solo le applicazioni e le risorse a cui hanno il permesso di accedere

## Ruoli RBAC integrati
<a name="_built_in_rbac_roles"></a>

La funzionalità Argo CD offre tre ruoli integrati che è possibile associare agli utenti e ai gruppi di AWS Identity Center. Si tratta di **ruoli con ambito globale** che controllano l'accesso alle risorse di Argo CD come progetti, cluster e repository.

**Importante**  
I ruoli globali controllano l'accesso ad Argo CD stesso, non a risorse relative al progetto come le Applicazioni. Gli utenti di EDITOR e VIEWER non possono visualizzare o gestire le applicazioni per impostazione predefinita: hanno bisogno di ruoli di progetto per accedere alle risorse relative al progetto. [Ruoli del progetto e accesso all'ambito del progetto](#project-roles)Per i dettagli sulla concessione dell'accesso alle applicazioni e ad altre risorse relative al progetto, consulta la sezione.

 **AMMINISTRATORE** 

Accesso completo a tutte le risorse e le impostazioni di Argo CD:
+ Crea, aggiorna ed elimina applicazioni e ApplicationSets in qualsiasi progetto
+ Gestisci la configurazione di Argo CD
+ Registra e gestisci i cluster di destinazione della distribuzione
+ Configura l'accesso al repository
+ Crea e gestisci progetti
+ Visualizza lo stato e la cronologia di tutte le candidature
+ Elenca e accedi a tutti i cluster e gli archivi

 **EDITOR** 

Può aggiornare i progetti e configurare i ruoli del progetto, ma non può modificare le impostazioni globali di Argo CD:
+ Aggiorna progetti esistenti (non può creare o eliminare progetti)
+ Configura i ruoli e le autorizzazioni del progetto
+ Visualizza chiavi e certificati GPG
+ Impossibile modificare la configurazione globale di Argo CD
+ Non è possibile gestire direttamente cluster o repository
+ Non è possibile visualizzare o gestire le applicazioni senza ruoli di progetto

 **VISUALIZZATORE** 

Accesso in sola lettura alle risorse del CD Argo:
+ Visualizza le configurazioni del progetto
+ Elenca tutti i progetti (inclusi i progetti a cui l'utente non è assegnato)
+ Visualizza chiavi e certificati GPG
+ Impossibile elencare cluster o repository
+ Impossibile apportare modifiche
+ Non è possibile visualizzare o gestire le applicazioni senza ruoli di progetto

**Nota**  
Per concedere agli utenti EDITOR o VIEWER l'accesso alle applicazioni, un ADMIN o EDITOR deve creare ruoli di progetto che associano i gruppi di Identity Center a autorizzazioni specifiche all'interno di un progetto.

## Ruoli del progetto e accesso all'ambito del progetto
<a name="project-roles"></a>

I ruoli globali (ADMIN, EDITOR, VIEWER) controllano l'accesso allo stesso Argo CD. I ruoli del progetto controllano l'accesso alle risorse e alle funzionalità all'interno di un progetto specifico, tra cui:
+  **Risorse**: applicazioni ApplicationSets, credenziali del repository, credenziali del cluster
+  **Funzionalità**: accesso ai log, accesso esecutivo ai pod delle applicazioni

 **Comprensione del modello di autorizzazione a due livelli**:
+  **Ambito globale**: i ruoli predefiniti determinano cosa possono fare gli utenti con progetti, cluster, repository e impostazioni del CD Argo
+  **Ambito del progetto**: i ruoli del progetto determinano ciò che gli utenti possono fare con le risorse e le funzionalità all'interno di un progetto specifico

Ciò significa che:
+ Gli utenti ADMIN possono accedere a tutte le risorse e le funzionalità del progetto senza configurazioni aggiuntive
+ Agli utenti EDITOR e VIEWER devono essere concessi ruoli di progetto per accedere alle risorse e alle funzionalità del progetto
+ Gli utenti di EDITOR possono creare ruoli di progetto per concedere a se stessi e ad altri l'accesso all'interno di progetti che possono aggiornare

 **Esempio di flusso di lavoro**:

1. Un ADMIN associa un gruppo Identity Center al ruolo EDITOR a livello globale

1. Un AMMINISTRATORE crea un progetto per un team

1. L'EDITOR configura i ruoli del progetto all'interno di quel progetto per concedere ai membri del team l'accesso alle risorse relative al progetto

1. I membri del team (che possono avere il ruolo globale VIEWER) possono ora visualizzare e gestire le applicazioni in quel progetto in base alle autorizzazioni relative al ruolo di progetto

Per i dettagli sulla configurazione dei ruoli del progetto, consulta. [Controllo degli accessi basato su progetti](#_project_based_access_control)

## Configurare le mappature dei ruoli
<a name="_configure_role_mappings"></a>

Associa gli utenti e i gruppi di AWS Identity Center ai ruoli di Argo CD durante la creazione o l'aggiornamento della funzionalità.

 **Esempio di mappatura dei ruoli:**

```
{
  "rbacRoleMapping": {		 	 	 
    "ADMIN": ["AdminGroup", "alice@example.com"],
    "EDITOR": ["DeveloperGroup", "DevOpsTeam"],
    "VIEWER": ["ReadOnlyGroup", "bob@example.com"]
  }
}
```

**Nota**  
I nomi dei ruoli fanno distinzione tra maiuscole e minuscole e devono essere maiuscole (ADMIN, EDITOR, VIEWER).

**Importante**  
L'integrazione di EKS Capabilities con AWS Identity Center supporta fino a 1.000 identità per funzionalità Argo CD. Un'identità può essere un utente o un gruppo.

 **Aggiorna le mappature dei ruoli**:

```
aws eks update-capability \
  --region us-east-1 \
  --cluster-name cluster \
  --capability-name capname \
  --endpoint "https://eks.ap-northeast-2.amazonaws.com" \
  --role-arn "arn:aws:iam::[.replaceable]111122223333:role/[.replaceable]`EKSCapabilityRole`" \
  --configuration '{
    "argoCd": {
      "rbacRoleMappings": {
        "addOrUpdateRoleMappings": [
          {
            "role": "ADMIN",
            "identities": [
              { "id": "686103e0-f051-7068-b225-e6392b959d9e", "type": "SSO_USER" }
            ]
          }
        ]
      }
    }
  }'
```

## Utilizzo dell'account amministratore
<a name="_admin_account_usage"></a>

L'account amministratore è progettato per la configurazione iniziale e le attività amministrative come la registrazione di cluster e la configurazione dei repository.

 **Quando l'account amministratore è appropriato**:
+ Configurazione e configurazione delle funzionalità iniziali
+ Sviluppo individuale o dimostrazioni rapide
+ Attività amministrative (registrazione del cluster, configurazione del repository, creazione di progetti)

 **Procedure consigliate per l'account amministratore**:
+ Non affidare i token dell'account al controllo delle versioni
+ Ruota immediatamente i token se esposti
+ Limita l'utilizzo dei token dell'account alle attività di configurazione e amministrative
+ Imposta tempi di scadenza brevi (massimo 12 ore)
+ È possibile creare solo 5 token di account alla volta

 **Quando utilizzare invece l'accesso basato su progetti**:
+ Ambienti di sviluppo condivisi con più utenti
+ Qualsiasi ambiente che assomigli alla produzione
+ Quando hai bisogno di audit trail che indichino chi ha eseguito le azioni
+ Quando è necessario imporre restrizioni sulle risorse o limiti di accesso

Per ambienti di produzione e scenari multiutente, utilizza il controllo degli accessi basato su progetti con ruoli RBAC dedicati mappati ai gruppi di Identity Center. AWS 

## Controllo degli accessi basato su progetti
<a name="_project_based_access_control"></a>

Usa Argo CD Projects (AppProject) per fornire un controllo granulare degli accessi e l'isolamento delle risorse per i team.

**Importante**  
Prima di assegnare utenti o gruppi a ruoli specifici del progetto, è necessario mapparli a un ruolo globale di Argo CD (ADMIN, EDITOR o VIEWER) nella configurazione delle funzionalità. Gli utenti non possono accedere ad Argo CD senza una mappatura globale dei ruoli, anche se sono assegnati a ruoli di progetto.  
Prendi in considerazione la possibilità di associare gli utenti al ruolo VIEWER a livello globale, quindi concedi autorizzazioni aggiuntive tramite ruoli specifici del progetto. Ciò fornisce un accesso di base e consente al contempo un controllo granulare a livello di progetto.

I progetti forniscono:
+  **Restrizioni all'origine**: limita i repository Git che possono essere utilizzati
+  **Restrizioni sulla destinazione**: limita i cluster e i namespace a cui è possibile rivolgersi
+  **Restrizioni sulle risorse**: limita i tipi di risorse Kubernetes che possono essere distribuiti
+  **Integrazione RBAC**: mappa i progetti ai gruppi di AWS Identity Center o ai ruoli di Argo CD

 **Esempio di progetto per** l'isolamento del team:

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: team-a
  namespace: argocd
spec:
  description: Team A applications

  # Required: Specify which namespaces this project watches for Applications
  sourceNamespaces:
  - argocd

  # Source restrictions
  sourceRepos:
  - https://github.com/myorg/team-a-apps

  # Destination restrictions
  destinations:
  - namespace: team-a-*
    server: arn:aws:eks:us-west-2:111122223333:cluster/production

  # Resource restrictions
  clusterResourceWhitelist:
  - group: ''
    kind: Namespace
  namespaceResourceWhitelist:
  - group: 'apps'
    kind: Deployment
  - group: ''
    kind: Service
  - group: ''
    kind: ConfigMap
```

### Namespace di origine
<a name="_source_namespaces"></a>

Quando si utilizza la funzionalità EKS Argo CD, il `spec.sourceNamespaces` campo è obbligatorio nelle definizioni. AppProject Questo campo specifica quale spazio dei nomi può contenere applicazioni o ApplicationSets che fanno riferimento a questo progetto.

**Importante**  
La funzionalità EKS Argo CD supporta solo un singolo spazio dei nomi per le applicazioni e, in genere, lo spazio ApplicationSets dei nomi specificato durante la creazione della funzionalità. `argocd` Ciò differisce dal CD open source Argo che supporta più namespace.

 **AppProject configurazione** 

Tutti AppProjects devono includere lo spazio dei nomi configurato della funzionalità in: `sourceNamespaces`

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: team-a-project
  namespace: argocd
spec:
  description: Applications for Team A

  # Required: Specify the capability's configured namespace (configuration.argoCd.namespace)
  sourceNamespaces:
    - argocd  # Must match your capability's namespace configuration

  # Source repositories this project can deploy from
  sourceRepos:
    - 'https://github.com/my-org/team-a-*'

  # Destination restrictions
  destinations:
    - namespace: 'team-a-*'
      server: arn:aws:eks:us-west-2:111122223333:cluster/my-cluster
```

**Nota**  
Se ometti lo spazio dei nomi della funzionalità da`sourceNamespaces`, le applicazioni o ApplicationSets in tale spazio dei nomi non possono fare riferimento a questo progetto, con conseguenti errori di distribuzione.

 **Assegna** utenti ai progetti:

I ruoli di progetto garantiscono agli utenti EDITOR e VIEWER l'accesso alle risorse del progetto (applicazioni ApplicationSets, repository e credenziali del cluster) e alle funzionalità (log, exec). Senza ruoli di progetto, questi utenti non possono accedere a queste risorse anche se dispongono di un accesso globale ai ruoli.

Gli utenti ADMIN hanno accesso a tutte le applicazioni senza bisogno di ruoli di progetto.

 **Esempio: concessione dell'accesso all'applicazione ai membri del team** 

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: team-a
  namespace: argocd
spec:
  # ... project configuration ...

  sourceNamespaces:
  - argocd

  # Project roles grant Application-level access
  roles:
  - name: developer
    description: Team A developers - can manage Applications
    policies:
    - p, proj:team-a:developer, applications, *, team-a/*, allow
    - p, proj:team-a:developer, clusters, get, *, allow  # See cluster names in UI
    groups:
    - 686103e0-f051-7068-b225-e6392b959d9e  # Identity Center group ID

  - name: viewer
    description: Team A viewers - read-only Application access
    policies:
    - p, proj:team-a:viewer, applications, get, team-a/*, allow
    - p, proj:team-a:viewer, clusters, get, *, allow  # See cluster names in UI
    groups:
    - 786203e0-f051-7068-b225-e6392b959d9f  # Identity Center group ID
```

**Nota**  
Includi ruoli `clusters, get, *, allow` nel progetto per consentire agli utenti di visualizzare i nomi dei cluster nell'interfaccia utente. Senza questa autorizzazione, il cluster di destinazione viene visualizzato come «sconosciuto».

 **Comprensione delle politiche relative ai ruoli del progetto**:

Il formato della politica è: `p, proj:<project>:<role>, <resource>, <action>, <object>, <allow/deny>` 

 **Politiche relative alle risorse**:
+  `applications, , team-a/, allow`- Accesso completo a tutte le applicazioni del progetto team-a
+  `applications, get, team-a/*, allow`- Accesso in sola lettura alle applicazioni
+  `applications, sync, team-a/*, allow`- Può sincronizzare le applicazioni ma non creare/eliminare
+  `applications, delete, team-a/*, allow`- Può eliminare le applicazioni (usare con cautela)
+  `applicationsets, , team-a/, allow`- Accesso completo a ApplicationSets
+  `repositories, *, *, allow`- Accesso alle credenziali del repository
+  `clusters, *, *, allow`- Accesso alle credenziali del cluster

 **Politiche di capacità**:
+  `logs, , team-a/, allow`- Accesso ai registri delle applicazioni
+  `exec, , team-a/, allow`- Accesso esecutivo ai pod delle applicazioni

**Nota**  
Gli utenti di EDITOR possono creare ruoli di progetto per concedere a se stessi e ad altri le autorizzazioni all'interno dei progetti che possono aggiornare. Ciò consente ai responsabili del team di controllare l'accesso alle risorse relative al progetto per il proprio team senza richiedere l'intervento dell'AMMINISTRATORE.

**Nota**  
Utilizza il gruppo Identity Center IDs (non i nomi dei gruppi) nel campo. `groups` È inoltre possibile utilizzare l'utente Identity Center IDs per l'accesso dei singoli utenti. Trovali IDs nella console di AWS Identity Center o utilizzando la AWS CLI.

## Schemi di autorizzazione comuni
<a name="_common_permission_patterns"></a>

 **Modello 1: team di amministrazione con accesso completo** 

```
{
  "rbacRoleMapping": {		 	 	 
    "ADMIN": ["PlatformTeam", "SRETeam"]
  }
}
```

Gli utenti ADMIN possono visualizzare e gestire tutte le risorse relative al progetto senza configurazioni aggiuntive.

 **Schema 2: i responsabili del team gestiscono i progetti, gli sviluppatori accedono tramite i ruoli di progetto** 

```
{
  "rbacRoleMapping": {		 	 	 
    "ADMIN": ["PlatformTeam"],
    "EDITOR": ["TeamLeads"],
    "VIEWER": ["AllDevelopers"]
  }
}
```

1. ADMIN crea progetti per ogni team

1. I team leader (EDITOR) configurano i ruoli del progetto per garantire ai propri sviluppatori l'accesso alle risorse del progetto (applicazioni ApplicationSets, credenziali) e alle funzionalità (log, exec)

1. Gli sviluppatori (VIEWER) possono accedere solo alle risorse e alle funzionalità consentite dai rispettivi ruoli di progetto

 **Modello 3: accesso basato sul team con ruoli di progetto** 

1. ADMIN crea progetti e mappa i leader del team al ruolo di EDITOR a livello globale

1. I team leader (EDITOR) assegnano ai membri del team i ruoli di progetto all'interno dei loro progetti

1. Ai membri del team è richiesto solo il ruolo globale di VIEWER: i ruoli di progetto forniscono l'accesso alle risorse e alle funzionalità del progetto

```
{
  "rbacRoleMapping": {		 	 	 
    "ADMIN": ["PlatformTeam"],
    "EDITOR": ["TeamLeads"],
    "VIEWER": ["AllDevelopers"]
  }
}
```

## Best practice
<a name="_best_practices"></a>

 **Utilizza i gruppi anziché i singoli utenti: associa i gruppi di** AWS Identity Center ai ruoli di Argo CD anziché ai singoli utenti per una gestione più semplice.

 **Inizia con il privilegio minimo**: inizia con l'accesso VIEWER e concedi EDITOR o ADMIN secondo necessità.

 **Usa i progetti per l'isolamento del team**: crea ambienti separati AppProjects per team o ambienti diversi per far rispettare i limiti.

 **Sfrutta la federazione di Identity Center**: configura AWS Identity Center per la federazione con il tuo provider di identità aziendale per una gestione centralizzata degli utenti.

 Revisioni **periodiche degli accessi**: rivedi periodicamente le mappature dei ruoli e le assegnazioni dei progetti per garantire livelli di accesso appropriati.

 **Limita l'accesso al cluster**: ricorda che Argo CD RBAC controlla l'accesso alle risorse e alle operazioni di Argo CD, ma non corrisponde a Kubernetes RBAC. Gli utenti con accesso ad Argo CD possono distribuire applicazioni nei cluster a cui Argo CD ha accesso. Limita i cluster a cui Argo CD può accedere e utilizza le restrizioni sulla destinazione del progetto per controllare dove possono essere distribuite le applicazioni.

## AWS autorizzazioni di servizio
<a name="shared_aws_service_permissions"></a>

Per utilizzare AWS i servizi direttamente nelle risorse dell'applicazione (senza creare risorse di repository), collega le autorizzazioni IAM richieste al Capability Role.

 Grafici **ECR for Helm**:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ecr:GetAuthorizationToken",
        "ecr:BatchCheckLayerAvailability",
        "ecr:GetDownloadUrlForLayer",
        "ecr:BatchGetImage"
      ],
      "Resource": "*"
    }
  ]
}
```

 **CodeCommit archivi:**

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codecommit:GitPull"
      ],
      "Resource": "arn:aws:codecommit:region:account-id:repository-name"
    }
  ]
}
```

 **CodeConnections (GitHub GitLab, Bitbucket**):

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codeconnections:UseConnection"
      ],
      "Resource": "arn:aws:codeconnections:region:account-id:connection/connection-id"
    }
  ]
}
```

[Configurare l'accesso al repository](argocd-configure-repositories.md)Per i dettagli sull'utilizzo di queste integrazioni, consulta la pagina.

## Fasi successive
<a name="_next_steps"></a>
+  [Lavorare con Argo CD](working-with-argocd.md)- Scopri come creare applicazioni e gestire le distribuzioni
+  [Concetti di Argo CD](argocd-concepts.md)- Comprendi i concetti di Argo CD, inclusi i progetti
+  [Considerazioni sulla sicurezza per EKS Capabilities](capabilities-security.md)- Esamina le migliori pratiche di sicurezza per quanto riguarda le funzionalità

# Lavorare con Argo CD
<a name="working-with-argocd"></a>

Con Argo CD, definisci le applicazioni nei repository Git e Argo CD le sincronizza automaticamente con i tuoi cluster Kubernetes. Ciò consente l'implementazione di applicazioni dichiarative e controllate dalla versione con rilevamento automatico delle deviazioni.

## Prerequisiti
<a name="_prerequisites"></a>

Prima di lavorare con Argo CD, è necessario:
+ È stato creato un cluster EKS con funzionalità Argo CD (vedi) [Crea una funzionalità Argo CD](create-argocd-capability.md)
+ Un repository Git contenente i manifesti di Kubernetes
+  `kubectl`configurato per comunicare con il tuo cluster

## Attività comuni
<a name="_common_tasks"></a>

I seguenti argomenti illustrano le attività più comuni di Argo CD:

 **[Configurare l'accesso al repository](argocd-configure-repositories.md)**- Configura Argo CD per accedere ai tuoi repository Git usando AWS Secrets Manager o AWS CodeConnections Kubernetes Secrets.

 **[Registra i cluster di destinazione](argocd-register-clusters.md)**- Registra i cluster di destinazione in cui Argo CD distribuirà le applicazioni.

 **[Lavorare con Argo CD Projects](argocd-projects.md)**- Organizza le applicazioni e applica i limiti di sicurezza utilizzando Projects per ambienti multi-tenant.

 **[Crea applicazioni](argocd-create-application.md)**- Crea applicazioni che vengono distribuite dai repository Git con politiche di sincronizzazione automatizzate o manuali.

 **[Usa ApplicationSets](argocd-applicationsets.md)**- ApplicationSets Utilizzatelo per distribuire applicazioni in più ambienti o cluster utilizzando modelli e generatori.

## Accedi all'interfaccia utente di Argo CD
<a name="_access_the_argo_cd_ui"></a>

Accedi all'interfaccia utente di Argo CD tramite la console EKS:

1. Apri la console Amazon EKS

1. Seleziona il tuo cluster

1. Scegli la scheda **Funzionalità**

1. Scegli **Argo CD** 

1. Scegli **Open Argo CD UI** 

L'interfaccia utente fornisce la topologia visiva dell'applicazione, lo stato e la cronologia della sincronizzazione, lo stato e gli eventi delle risorse, i controlli di sincronizzazione manuale e la gestione delle applicazioni.

## Documentazione upstream
<a name="_upstream_documentation"></a>

Per informazioni dettagliate sulle funzionalità di Argo CD:
+  [Documentazione Argo CD - Guida utente](https://argo-cd.readthedocs.io/) completa
+  [Specifiche dell'applicazione: riferimento](https://argo-cd.readthedocs.io/en/stable/user-guide/application-specification/) completo all'API dell'applicazione
+  [ApplicationSet Guida](https://argo-cd.readthedocs.io/en/stable/user-guide/application-set/): ApplicationSet modelli ed esempi
+  [Argo CD GitHub](https://github.com/argoproj/argo-cd) - Codice sorgente ed esempi

# Configurare l'accesso al repository
<a name="argocd-configure-repositories"></a>

Prima di distribuire le applicazioni, configura Argo CD per accedere ai tuoi repository Git e ai registri cartografici Helm. Argo CD supporta diversi metodi di autenticazione per GitHub, GitLab Bitbucket ed ECR. AWS CodeCommit AWS 

**Nota**  
Per le integrazioni dirette dei AWS servizi (grafici ECR Helm, CodeCommit repository e CodeConnections), è possibile farvi riferimento direttamente nelle risorse dell'applicazione senza creare configurazioni di repository. Il Capability Role deve disporre delle autorizzazioni IAM richieste. Per informazioni dettagliate, vedi [Configurare le autorizzazioni di Argo CD](argocd-permissions.md).

## Prerequisiti
<a name="_prerequisites"></a>
+ È stato creato un cluster EKS con funzionalità Argo CD
+ Archivi Git contenenti manifesti di Kubernetes
+  `kubectl`configurato per comunicare con il tuo cluster

**Nota**  
 AWS CodeConnections può connettersi a server Git situati nel AWS Cloud o in locale. Per ulteriori informazioni, consulta [AWS CodeConnections](https://docs.aws.amazon.com/codeconnections/latest/userguide/welcome.html).

## Metodi di autenticazione
<a name="_authentication_methods"></a>


| Metodo | Caso d'uso | Autorizzazioni IAM richieste | 
| --- | --- | --- | 
|   **Integrazione diretta con i servizi AWS **   | 
|  CodeCommit  |  Integrazione diretta con i AWS CodeCommit repository Git. Non è necessaria alcuna configurazione del repository.  |   `codecommit:GitPull`   | 
|  CodeConnections  |  Connect o Bitbucket con autenticazione gestita. GitHub GitLab Richiede la configurazione della connessione.  |   `codeconnections:UseConnection`   | 
|  Artefatti ECR OCI  |  Integrazione diretta con AWS ECR per grafici e immagini manifest OCI Helm. Non è necessaria alcuna configurazione del repository.  |   `arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly`   | 
|   **Configurazione del repository con credenziali**   | 
|   AWS Secrets Manager (nome utente/token)  |  Memorizza token o password di accesso personali. Abilita la rotazione delle credenziali senza accesso a Kubernetes.  |   `arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess`   | 
|   AWS Secrets Manager (chiave SSH)  |  Usa l'autenticazione tramite chiave SSH. Abilita la rotazione delle credenziali senza accesso a Kubernetes.  |   `arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess`   | 
|   AWS Secrets Manager (GitHub App)  |  GitHub Autenticazione dell'app con chiave privata. Abilita la rotazione delle credenziali senza accesso a Kubernetes.  |   `arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess`   | 
|  Kubernetes Secret  |  Metodo Argo CD standard che utilizza segreti all'interno del cluster  |  Nessuna (autorizzazioni gestite da EKS Access Entry con Kubernetes RBAC)  | 

## AWS Accesso diretto ai servizi
<a name="direct_access_to_shared_aws_services"></a>

Per quanto riguarda AWS i servizi, è possibile farvi riferimento direttamente nelle risorse dell'applicazione senza creare configurazioni del repository. Il Capability Role deve disporre delle autorizzazioni IAM richieste.

### CodeCommit repository
<a name="_codecommit_repositories"></a>

Fai riferimento ai CodeCommit repository direttamente nelle applicazioni:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app
  namespace: argocd
spec:
  source:
    repoURL: https://git-codecommit.region.amazonaws.com/v1/repos/repository-name
    targetRevision: main
    path: kubernetes/manifests
```

Autorizzazioni necessarie per il ruolo di capacità:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codecommit:GitPull",
      "Resource": "arn:aws:codecommit:region:account-id:repository-name"
    }
  ]
}
```

### CodeConnections
<a name="_codeconnections"></a>

Reference GitHub o GitLab tramite Bitbucket repository. CodeConnections Il formato dell'URL del repository è derivato dall'ARN della CodeConnections connessione.

Il formato dell'URL del repository è:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app
  namespace: argocd
spec:
  source:
    repoURL: https://codeconnections.region.amazonaws.com/git-http/account-id/region/connection-id/owner/repository.git
    targetRevision: main
    path: kubernetes/manifests
```

Autorizzazioni necessarie per il ruolo di capacità:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codeconnections:UseConnection",
      "Resource": "arn:aws:codeconnections:region:account-id:connection/connection-id"
    }
  ]
}
```

### Grafici ECR Helm
<a name="_ecr_helm_charts"></a>

ECR memorizza i grafici Helm come artefatti OCI. Argo CD supporta due modi per farvi riferimento:

 **Formato Helm** (consigliato per i grafici Helm):

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app-helm
  namespace: argocd
spec:
  source:
    repoURL: account-id.dkr.ecr.region.amazonaws.com/repository-name
    targetRevision: chart-version
    chart: chart-name
    helm:
      valueFiles:
        - values.yaml
```

Nota: non includere il `oci://` prefisso quando si utilizza il formato Helm. Usa il `chart` campo per specificare il nome del grafico.

 **Formato OCI** (per artefatti OCI con manifesti Kubernetes):

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app-oci
  namespace: argocd
spec:
  source:
    repoURL: oci://account-id.dkr.ecr.region.amazonaws.com/repository-name
    targetRevision: artifact-version
    path: path-to-manifests
```

Nota: includi il prefisso quando usi il formato OCI. `oci://` Usa il `path` campo invece di. `chart`

Autorizzazioni Capability Role richieste: allega la policy gestita:

```
arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly
```

Questa politica include le autorizzazioni ECR necessarie:`ecr:GetAuthorizationToken`,, `ecr:BatchGetImage` e. `ecr:GetDownloadUrlForLayer`

## Utilizzo di AWS Secrets Manager
<a name="using_shared_aws_secrets_manager"></a>

Archivia le credenziali del repository in Secrets Manager e fai riferimento ad esse nelle configurazioni di Argo CD Repository. L'utilizzo di Secrets Manager consente la rotazione automatica delle credenziali senza richiedere l'accesso RBAC a Kubernetes: le credenziali possono essere ruotate utilizzando le autorizzazioni IAM verso Secrets Manager e Argo CD legge automaticamente i valori aggiornati.

**Nota**  
Per il riutilizzo delle credenziali su più repository (ad esempio, tutti gli archivi di un'organizzazione), utilizza i modelli di credenziali di repository con. GitHub `argocd.argoproj.io/secret-type: repo-creds` Ciò offre un'esperienza utente migliore rispetto alla creazione di segreti di repository individuali. Per ulteriori informazioni, consultate [Repository Credentials nella documentazione](https://argo-cd.readthedocs.io/en/stable/operator-manual/argocd-repo-creds-yaml/) di Argo CD.

### Autenticazione con nome utente e token
<a name="_username_and_token_authentication"></a>

Per gli archivi HTTPS con token di accesso o password personali:

 **Crea il segreto in Secrets Manager**:

```
aws secretsmanager create-secret \
  --name argocd/my-repo \
  --description "GitHub credentials for Argo CD" \
  --secret-string '{"username":"your-username","token":"your-personal-access-token"}'
```

 **Campi opzionali del certificato client TLS** (per server Git privati):

```
aws secretsmanager create-secret \
  --name argocd/my-private-repo \
  --secret-string '{
    "username":"your-username",
    "token":"your-token",
    "tlsClientCertData":"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLgotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t",
    "tlsClientCertKey":"LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCi4uLgotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0t"
  }'
```

**Nota**  
I `tlsClientCertKey` valori `tlsClientCertData` and devono essere codificati in base 64.

 **Crea un Repository Secret facendo riferimento a Secrets** Manager:

```
apiVersion: v1
kind: Secret
metadata:
  name: my-repo
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  type: git
  url: https://github.com/your-org/your-repo
  secretArn: arn:aws:secretsmanager:us-west-2:111122223333:secret:argocd/my-repo-AbCdEf
  project: default
```

### autenticazione con chiave SSH
<a name="_ssh_key_authentication"></a>

Per l'accesso Git basato su SSH, memorizza la chiave privata come testo semplice (non JSON):

 **Crea il segreto con la chiave privata SSH**:

```
aws secretsmanager create-secret \
  --name argocd/my-repo-ssh \
  --description "SSH key for Argo CD" \
  --secret-string "-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
...
-----END OPENSSH PRIVATE KEY-----"
```

 **Crea un repository segreto per SSH**:

```
apiVersion: v1
kind: Secret
metadata:
  name: my-repo-ssh
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  type: git
  url: git@github.com:your-org/your-repo.git
  secretArn: arn:aws:secretsmanager:us-west-2:111122223333:secret:argocd/my-repo-ssh-AbCdEf
  project: default
```

### GitHub Autenticazione dell'app
<a name="_github_app_authentication"></a>

Per GitHub l'autenticazione dell'app con una chiave privata:

 **Crea il segreto con le credenziali GitHub dell'app**:

```
aws secretsmanager create-secret \
  --name argocd/github-app \
  --description "GitHub App credentials for Argo CD" \
  --secret-string '{
    "githubAppPrivateKeySecret":"LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQouLi4KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0=",
    "githubAppID":"123456",
    "githubAppInstallationID":"12345678"
  }'
```

**Nota**  
Il `githubAppPrivateKeySecret` valore deve essere codificato in base64.

 **Campo opzionale** per Enterprise: GitHub 

```
aws secretsmanager create-secret \
  --name argocd/github-enterprise-app \
  --secret-string '{
    "githubAppPrivateKeySecret":"LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQouLi4KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0=",
    "githubAppID":"123456",
    "githubAppInstallationID":"12345678",
    "githubAppEnterpriseBaseUrl":"https://github.example.com/api/v3"
  }'
```

 **Crea un repository segreto per GitHub l'app**:

```
apiVersion: v1
kind: Secret
metadata:
  name: my-repo-github-app
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  type: git
  url: https://github.com/your-org/your-repo
  secretArn: arn:aws:secretsmanager:us-west-2:111122223333:secret:argocd/github-app-AbCdEf
  project: default
```

### Modelli di credenziali di repository
<a name="_repository_credential_templates"></a>

Per il riutilizzo delle credenziali su più repository (ad esempio, tutti gli archivi di GitHub un'organizzazione o di un utente), utilizza i modelli di credenziali di repository con. `argocd.argoproj.io/secret-type: repo-creds` Ciò offre una migliore esperienza utente rispetto alla creazione di segreti di repository individuali per ogni repository.

 **Crea un modello di credenziali di repository:**

```
apiVersion: v1
kind: Secret
metadata:
  name: github-org-creds
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repo-creds
stringData:
  type: git
  url: https://github.com/your-org
  secretArn: arn:aws:secretsmanager:us-west-2:111122223333:secret:argocd/github-org-AbCdEf
```

Questo modello di credenziali si applica a tutti gli archivi che corrispondono al prefisso URL. `https://github.com/your-org` È quindi possibile fare riferimento a qualsiasi repository di questa organizzazione in Applicazioni senza creare segreti aggiuntivi.

Per ulteriori informazioni, consultate [Repository Credentials nella documentazione](https://argo-cd.readthedocs.io/en/stable/operator-manual/argocd-repo-creds-yaml/) del CD Argo.

**Importante**  
Assicurati che al tuo IAM Capability Role sia `arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess` associata la policy gestita o autorizzazioni equivalenti, incluse `secretsmanager:GetSecretValue` le autorizzazioni di decrittografia KMS. Vedi per la configurazione delle policy IAM[Considerazioni su Argo CD](argocd-considerations.md).

## Usando AWS CodeConnections
<a name="using_shared_aws_codeconnections"></a>

Per CodeConnections l'integrazione, vedi[Connect ai repository Git con AWS CodeConnections](integration-codeconnections.md).

CodeConnections fornisce l'autenticazione gestita per GitHub e Bitbucket senza memorizzare le credenziali. GitLab

## Utilizzo di Kubernetes Secrets
<a name="_using_kubernetes_secrets"></a>

Archivia le credenziali direttamente in Kubernetes utilizzando il metodo Argo CD standard.

 **Per HTTPS** con token di accesso personale:

```
apiVersion: v1
kind: Secret
metadata:
  name: my-repo
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  type: git
  url: https://github.com/your-org/your-repo
  username: your-username
  password: your-personal-access-token
```

 **Per SSH:**

```
apiVersion: v1
kind: Secret
metadata:
  name: my-repo-ssh
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  type: git
  url: git@github.com:your-org/your-repo.git
  sshPrivateKey: |
    -----BEGIN OPENSSH PRIVATE KEY-----
    ... your private key ...
    -----END OPENSSH PRIVATE KEY-----
```

## CodeCommit repository
<a name="_codecommit_repositories_2"></a>

Per AWS CodeCommit, concedi le CodeCommit autorizzazioni a IAM Capability Role ()`codecommit:GitPull`.

Configura il repository:

```
apiVersion: v1
kind: Secret
metadata:
  name: codecommit-repo
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  type: git
  url: https://git-codecommit.us-west-2.amazonaws.com/v1/repos/my-repo
  project: default
```

Per una configurazione dettagliata delle policy IAM, consulta[Considerazioni su Argo CD](argocd-considerations.md).

## Verifica la connessione al repository
<a name="_verify_repository_connection"></a>

Controlla lo stato della connessione tramite l'interfaccia utente di Argo CD in Impostazioni → Repository. L'interfaccia utente mostra lo stato della connessione e gli eventuali errori di autenticazione.

I Repository Secrets non includono informazioni sullo stato.

## Risorse aggiuntive
<a name="_additional_resources"></a>
+  [Registra i cluster di destinazione](argocd-register-clusters.md)- Registra i cluster di destinazione per le distribuzioni
+  [Crea applicazioni](argocd-create-application.md)- Crea la tua prima applicazione
+  [Considerazioni su Argo CD](argocd-considerations.md)- Autorizzazioni IAM e configurazione di sicurezza
+  [Archivi privati: riferimento alla configurazione del repository](https://argo-cd.readthedocs.io/en/stable/user-guide/private-repositories/) upstream

# Registra i cluster di destinazione
<a name="argocd-register-clusters"></a>

Registra i cluster per consentire ad Argo CD di distribuire applicazioni su di essi. È possibile registrare lo stesso cluster su cui è in esecuzione Argo CD (cluster locale) o cluster remoti in account o regioni diversi. Una volta registrato, un cluster rimarrà in uno stato di connessione sconosciuto fino a quando non si crea un'applicazione all'interno di quel cluster. Per creare un'applicazione Argo CD dopo la registrazione del cluster, consulta[Crea applicazioni](argocd-create-application.md).

## Prerequisiti
<a name="_prerequisites"></a>
+ È stato creato un cluster EKS con funzionalità Argo CD
+  `kubectl`configurato per comunicare con il cluster
+ Per i cluster remoti: autorizzazioni IAM e voci di accesso appropriate

## Registra il cluster locale
<a name="_register_the_local_cluster"></a>

Per distribuire le applicazioni nello stesso cluster su cui è in esecuzione Argo CD, registratelo come obiettivo di distribuzione.

**Importante**  
La funzionalità Argo CD non registra automaticamente il cluster locale. È necessario registrarlo in modo esplicito per distribuire le applicazioni nello stesso cluster. È possibile utilizzare il nome del cluster `in-cluster` per motivi di compatibilità con la maggior parte degli esempi di Argo CD online.

**Nota**  
Un EKS Access Entry viene creato automaticamente per il cluster locale con l'Argo CD Capability Role, ma per impostazione predefinita non vengono concesse autorizzazioni RBAC per Kubernetes. Ciò segue il principio del privilegio minimo: è necessario configurare in modo esplicito le autorizzazioni richieste da Argo CD in base al caso d'uso. Ad esempio, se si utilizza questo cluster solo come hub Argo CD per gestire cluster remoti, non sono necessarie autorizzazioni di distribuzione locale. Per le opzioni di configurazione, consulta la sezione relativa ai requisiti RBAC di Access Entry di seguito.

 **Utilizzo dell'Argo CD CLI:**

```
argocd cluster add <cluster-context-name> \
  --aws-cluster-name arn:aws:eks:us-west-2:111122223333:cluster/my-cluster \
  --name local-cluster
```

 **Utilizzo di un segreto Kubernetes:**

```
apiVersion: v1
kind: Secret
metadata:
  name: local-cluster
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: cluster
stringData:
  name: local-cluster
  server: arn:aws:eks:us-west-2:111122223333:cluster/my-cluster
  project: default
```

Applica la configurazione:

```
kubectl apply -f local-cluster.yaml
```

**Nota**  
Utilizza l'ARN del cluster EKS nel `server` campo, non l'URL del server API Kubernetes. La funzionalità gestita richiede ARNs l'identificazione dei cluster. L'impostazione predefinita non `kubernetes.default.svc` è supportata.

## Registra cluster remoti
<a name="_register_remote_clusters"></a>

Per eseguire la distribuzione su cluster remoti:

 **Fase 1: Creare la voce di accesso sul cluster remoto** 

Sostituisci *region-code* con la AWS regione in cui si trova il cluster remoto, sostituisci *remote-cluster* con il nome del cluster remoto e sostituisci l'ARN con il tuo ruolo di funzionalità Argo CD ARN.

```
aws eks create-access-entry \
  --region region-code \
  --cluster-name remote-cluster \
  --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \
  --type STANDARD
```

 **Fase 2: Associare una politica di accesso alle autorizzazioni RBAC di Kubernetes** 

L'Access Entry richiede le autorizzazioni RBAC di Kubernetes per Argo CD per distribuire le applicazioni. Per iniziare rapidamente, puoi utilizzare: `AmazonEKSClusterAdminPolicy`

```
aws eks associate-access-policy \
  --region region-code \
  --cluster-name remote-cluster \
  --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \
  --access-scope type=cluster
```

**Importante**  
`AmazonEKSClusterAdminPolicy`Fornisce l'accesso completo all'amministratore del cluster (equivalente a`system:masters`). È utile per iniziare, ma non deve essere utilizzato in produzione. Per gli ambienti di produzione, utilizza autorizzazioni più restrittive associando l'Access Entry a gruppi Kubernetes personalizzati e creando ruoli o associazioni appropriati. ClusterRole Consulta la sezione sulla configurazione di produzione di seguito per la configurazione con privilegi minimi.

 **Fase 3: Registrare il cluster in Argo CD** 

 **Utilizzo dell'Argo CD CLI:**

```
argocd cluster add <cluster-context-name> \
  --aws-cluster-name arn:aws:eks:us-west-2:111122223333:cluster/remote-cluster \
  --name remote-cluster
```

 **Utilizzo di un segreto Kubernetes:**

```
apiVersion: v1
kind: Secret
metadata:
  name: remote-cluster
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: cluster
stringData:
  name: remote-cluster
  server: arn:aws:eks:us-west-2:111122223333:cluster/remote-cluster
  project: default
```

Applica la configurazione:

```
kubectl apply -f remote-cluster.yaml
```

## Cluster tra account
<a name="_cross_account_clusters"></a>

Per eseguire la distribuzione su cluster con account diversi: AWS 

1. Nell'account di destinazione, creare un Access Entry sul cluster EKS di destinazione utilizzando l'ARN Argo CD IAM Capability Role dall'account di origine come principale

1. Associa una politica di accesso alle autorizzazioni Kubernetes RBAC appropriate

1. Registra il cluster in Argo CD utilizzando il relativo ARN del cluster EKS

Non è richiesta la creazione di ruoli IAM aggiuntivi o la configurazione delle policy di fiducia: EKS Access Entries gestisce l'accesso tra account.

Il formato ARN del cluster include la regione, quindi le distribuzioni interregionali utilizzano lo stesso processo delle distribuzioni nella stessa regione.

## Verifica la registrazione del cluster
<a name="_verify_cluster_registration"></a>

Visualizza i cluster registrati:

```
kubectl get secrets -n argocd -l argocd.argoproj.io/secret-type=cluster
```

Oppure controlla lo stato del cluster nell'interfaccia utente di Argo CD in Impostazioni → Cluster.

## Cluster privati
<a name="_private_clusters"></a>

La funzionalità Argo CD fornisce un accesso trasparente a cluster EKS completamente privati senza richiedere peering VPC o configurazioni di rete specializzate.

 AWS gestisce automaticamente la connettività tra la funzionalità Argo CD e i cluster remoti privati.

È sufficiente registrare il cluster privato utilizzando la relativa ARN: non è richiesta alcuna configurazione di rete aggiuntiva.

## Accedi ai requisiti RBAC di ingresso
<a name="_access_entry_rbac_requirements"></a>

Quando si crea una funzionalità Argo CD, viene creata automaticamente una voce EKS Access Entry per il ruolo Capability, ma per impostazione predefinita non vengono concesse autorizzazioni RBAC per Kubernetes. Questa progettazione intenzionale segue il principio del privilegio minimo: casi d'uso diversi richiedono autorizzazioni diverse.

Ad esempio: \$1 Se si utilizza il cluster solo come hub Argo CD per gestire cluster remoti, non sono necessarie autorizzazioni di distribuzione locale\$1 Se si distribuiscono applicazioni localmente, è necessario l'accesso in lettura a livello di cluster e l'accesso in scrittura a namespace specifici \$1 Se è necessario creare, sono necessarie autorizzazioni di amministratore del cluster aggiuntive CRDs

È necessario configurare in modo esplicito le autorizzazioni richieste da Argo CD in base alle proprie esigenze.

### Autorizzazioni minime per Argo CD
<a name="_minimum_permissions_for_argo_cd"></a>

Argo CD necessita di due tipi di autorizzazioni per funzionare senza errori:

 **Autorizzazioni di lettura (a livello di cluster)**: Argo CD deve essere in grado di leggere tutti i tipi di risorse e le definizioni di risorse personalizzate (CRDs) in tutto il cluster per:
+ Scoperta delle risorse e controlli dello stato
+ Rilevamento della deriva tra lo stato desiderato e quello effettivo
+ Convalida delle risorse prima della distribuzione

 **Autorizzazioni di scrittura (specifiche dello spazio dei nomi)**: Argo CD richiede le autorizzazioni di creazione, aggiornamento ed eliminazione per le risorse definite in Applicazioni:
+ Implementa i carichi di lavoro delle applicazioni (implementazioni, servizi, ecc.) ConfigMaps
+ Applica risorse personalizzate (CRDs specifiche per le tue applicazioni)
+ Gestisci il ciclo di vita delle applicazioni

### Configurazione rapida
<a name="_quick_setup"></a>

Per iniziare rapidamente, in ambienti di test o sviluppo, utilizza: `AmazonEKSClusterAdminPolicy`

```
aws eks associate-access-policy \
  --region region-code \
  --cluster-name my-cluster \
  --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \
  --access-scope type=cluster
```

**Importante**  
`AmazonEKSClusterAdminPolicy`Fornisce l'accesso completo all'amministratore del cluster (equivalente a`system:masters`), inclusa la possibilità di creare CRDs, modificare risorse a livello di cluster e distribuirle in qualsiasi spazio dei nomi. Questa funzionalità è utile per lo sviluppo, POCs ma non deve essere utilizzata in produzione. Per la produzione, utilizzate la configurazione con privilegi minimi riportata di seguito.

### Configurazione di produzione con privilegi minimi
<a name="_production_setup_with_least_privilege"></a>

Per gli ambienti di produzione, crea un RBAC Kubernetes personalizzato che garantisca:
+ Accesso in lettura a livello di cluster a tutte le risorse (per il rilevamento e i controlli di integrità)
+ Accesso in scrittura specifico per lo spazio dei nomi (per le distribuzioni)

 **Fase 1: Associare Access Entry a un gruppo Kubernetes personalizzato** 

```
aws eks associate-access-policy \
  --region region-code \
  --cluster-name my-cluster \
  --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSEditPolicy \
  --access-scope type=namespace,namespaces=app-namespace
```

 **Fase 2: ClusterRole Creazione per l'accesso in lettura** 

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: argocd-read-all
rules:
# Read access to all resources for discovery and health checks
- apiGroups: ["*"]
  resources: ["*"]
  verbs: ["get", "list", "watch"]
```

 **Fase 3: Creazione di un ruolo per l'accesso in scrittura ai namespace delle applicazioni** 

```
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: argocd-deploy
  namespace: app-namespace
rules:
# Full access to deploy application resources
- apiGroups: ["*"]
  resources: ["*"]
  verbs: ["*"]
```

 **Fase 4: Associare i ruoli al gruppo Kubernetes** 

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: argocd-read-all
subjects:
- kind: Group
  name: eks-access-entry:arn:aws:iam::111122223333:role/ArgoCDCapabilityRole
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: argocd-read-all
  apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: argocd-deploy
  namespace: app-namespace
subjects:
- kind: Group
  name: eks-access-entry:arn:aws:iam::111122223333:role/ArgoCDCapabilityRole
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: argocd-deploy
  apiGroup: rbac.authorization.k8s.io
```

**Nota**  
Il formato del nome del gruppo per Access Entries è `eks-access-entry:` seguito dall'ARN principale. Ripetere l'operazione RoleBinding per ogni namespace in cui Argo CD deve distribuire le applicazioni.

**Importante**  
Argo CD deve essere in grado di leggere tutti i tipi di risorse del cluster a fini di verifica e individuazione dello stato, anche se viene distribuito solo su namespace specifici. Senza accesso in lettura a livello di cluster, Argo CD mostrerà errori durante il controllo dello stato delle applicazioni.

## Limita l'accesso ai cluster con Projects
<a name="_restrict_cluster_access_with_projects"></a>

Usa Projects per controllare in quali cluster e namespace le applicazioni possono essere distribuite configurando i cluster e i namespace di destinazione consentiti in: `spec.destinations`

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: production
  namespace: argocd
spec:
  destinations:
  - server: arn:aws:eks:us-west-2:111122223333:cluster/prod-cluster
    namespace: '*'
  - server: arn:aws:eks:eu-west-1:111122223333:cluster/prod-eu-cluster
    namespace: '*'
  sourceRepos:
  - 'https://github.com/example/production-apps'
```

Per informazioni dettagliate, vedi [Lavorare con Argo CD Projects](argocd-projects.md).

## Risorse aggiuntive
<a name="_additional_resources"></a>
+  [Lavorare con Argo CD Projects](argocd-projects.md)- Organizza le applicazioni e applica i limiti di sicurezza
+  [Crea applicazioni](argocd-create-application.md)- Implementa la tua prima applicazione
+  [Usa ApplicationSets](argocd-applicationsets.md)- Esegui la distribuzione su più cluster con ApplicationSets
+  [Considerazioni su Argo CD](argocd-considerations.md)- Modelli multi-cluster e configurazione tra più account
+  [Configurazione dichiarativa del cluster - Riferimento alla configurazione del cluster](https://argo-cd.readthedocs.io/en/stable/operator-manual/declarative-setup/#clusters) upstream

# Lavorare con Argo CD Projects
<a name="argocd-projects"></a>

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
<a name="_when_to_use_projects"></a>

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
<a name="_default_project"></a>

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](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/#the-default-project) nella documentazione di Argo CD.

## Creazione di un progetto
<a name="_create_a_project"></a>

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
<a name="_project_configuration"></a>

### Archivi di origine
<a name="_source_repositories"></a>

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](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/#managing-projects) nella documentazione di Argo CD.

### Restrizioni sulla destinazione
<a name="_destination_restrictions"></a>

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](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/#managing-projects) nella documentazione del CD Argo.

### Restrizioni sulle risorse
<a name="_resource_restrictions"></a>

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
<a name="_assign_applications_to_projects"></a>

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
<a name="_project_roles_and_rbac"></a>

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](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/#project-roles) nella documentazione di Argo CD.

## Schemi comuni
<a name="_common_patterns"></a>

### Progetti basati sull'ambiente
<a name="_environment_based_projects"></a>

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
<a name="_team_based_projects"></a>

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
<a name="_multi_cluster_projects"></a>

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
<a name="_best_practices"></a>

 **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 esempio`team-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
<a name="_additional_resources"></a>
+  [Configurare le autorizzazioni di Argo CD](argocd-permissions.md)- Configurazione dell'integrazione tra RBAC e Identity Center
+  [Crea applicazioni](argocd-create-application.md)- Crea applicazioni all'interno dei progetti
+  [Usa ApplicationSets](argocd-applicationsets.md)- Utilizzabile ApplicationSets con Projects per implementazioni multi-cluster
+  [Documentazione sui progetti Argo CD](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/) - Riferimento completo a upstream

# Crea applicazioni
<a name="argocd-create-application"></a>

Le applicazioni rappresentano distribuzioni nei cluster di destinazione. Ogni applicazione definisce una fonte (repository Git) e una destinazione (cluster e namespace). Una volta applicato, Argo CD creerà le risorse specificate dai manifest nel repository Git nello spazio dei nomi del cluster. Le applicazioni spesso specificano le distribuzioni dei carichi di lavoro, ma possono gestire qualsiasi risorsa Kubernetes disponibile nel cluster di destinazione.

## Prerequisiti
<a name="_prerequisites"></a>
+ È stato creato un cluster EKS con funzionalità Argo CD
+ Accesso al repository configurato (vedi) [Configurare l'accesso al repository](argocd-configure-repositories.md)
+ Cluster di destinazione registrato (vedi[Registra i cluster di destinazione](argocd-register-clusters.md))
+  `kubectl`configurato per comunicare con il cluster

## Crea un'applicazione di base
<a name="_create_a_basic_application"></a>

Definisci un'applicazione che viene distribuita da un repository Git:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: guestbook
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/argoproj/argocd-example-apps
    targetRevision: HEAD
    path: guestbook
  destination:
    name: in-cluster
    namespace: default
```

**Nota**  
Usalo `destination.name` con il nome del cluster che hai usato durante la registrazione del cluster (come `in-cluster` per il cluster locale). Il `destination.server` campo funziona anche con il cluster EKS ARNs, ma si consiglia di utilizzare i nomi dei cluster per una migliore leggibilità.

Applica l'applicazione:

```
kubectl apply -f application.yaml
```

Visualizza lo stato dell'applicazione:

```
kubectl get application guestbook -n argocd
```

## Configurazione dell'origine
<a name="_source_configuration"></a>

 **Archivio Git**:

```
spec:
  source:
    repoURL: https://github.com/example/my-app
    targetRevision: main
    path: kubernetes/manifests
```

 **Tag o commit Git specifici**:

```
spec:
  source:
    targetRevision: v1.2.0  # or commit SHA
```

 **Diagramma di Helm**:

```
spec:
  source:
    repoURL: https://github.com/example/helm-charts
    targetRevision: main
    path: charts/my-app
    helm:
      valueFiles:
      - values.yaml
      parameters:
      - name: image.tag
        value: v1.2.0
```

 **Grafico Helm con valori dal repository Git esterno (modello** multi-source):

```
spec:
  sources:
  - repoURL: https://github.com/example/helm-charts
    targetRevision: main
    path: charts/my-app
    helm:
      valueFiles:
      - $values/environments/production/values.yaml
  - repoURL: https://github.com/example/config-repo
    targetRevision: main
    ref: values
```

Per ulteriori informazioni, consultate [Helm Value Files from External Git Repository](https://argo-cd.readthedocs.io/en/stable/user-guide/multiple_sources/#helm-value-files-from-external-git-repository) nella documentazione del CD Argo.

 **Diagramma Helm tratto da ECR:**

```
spec:
  source:
    repoURL: oci://account-id.dkr.ecr.region.amazonaws.com/repository-name
    targetRevision: chart-version
    chart: chart-name
```

Se il Capability Role dispone delle autorizzazioni ECR richieste, il repository viene utilizzato direttamente e non è richiesta alcuna configurazione del repository. Per informazioni dettagliate, vedi [Configurare l'accesso al repository](argocd-configure-repositories.md).

 **Repository Git da CodeCommit**:

```
spec:
  source:
    repoURL: https://git-codecommit.region.amazonaws.com/v1/repos/repository-name
    targetRevision: main
    path: kubernetes/manifests
```

Se il Capability Role dispone delle CodeCommit autorizzazioni richieste, il repository viene utilizzato direttamente e non è richiesta alcuna configurazione del repository. Per informazioni dettagliate, vedi [Configurare l'accesso al repository](argocd-configure-repositories.md).

 **Repository Git da CodeConnections**:

```
spec:
  source:
    repoURL: https://codeconnections.region.amazonaws.com/git-http/account-id/region/connection-id/owner/repository.git
    targetRevision: main
    path: kubernetes/manifests
```

Il formato dell'URL del repository è derivato dall'ARN della CodeConnections connessione. Se il Capability Role dispone delle CodeConnections autorizzazioni richieste ed è configurata una connessione, il repository viene utilizzato direttamente e non è richiesta alcuna configurazione del repository. Per informazioni dettagliate, vedi [Configurare l'accesso al repository](argocd-configure-repositories.md).

 **Personalizza:**

```
spec:
  source:
    repoURL: https://github.com/example/kustomize-app
    targetRevision: main
    path: overlays/production
    kustomize:
      namePrefix: prod-
```

## Politiche di sincronizzazione
<a name="_sync_policies"></a>

Controlla il modo in cui Argo CD sincronizza le applicazioni.

 **Sincronizzazione manuale (impostazione predefinita)**:

Le applicazioni richiedono l'approvazione manuale per la sincronizzazione:

```
spec:
  syncPolicy: {}  # No automated sync
```

Attiva manualmente la sincronizzazione:

```
kubectl patch application guestbook -n argocd \
  --type merge \
  --patch '{"operation": {"initiatedBy": {"username": "admin"}, "sync": {}}}'
```

 **Sincronizzazione automatica**:

Le applicazioni si sincronizzano automaticamente quando vengono rilevate modifiche a Git:

```
spec:
  syncPolicy:
    automated: {}
```

 **Autoriparazione:**

Ripristina automaticamente le modifiche manuali al cluster:

```
spec:
  syncPolicy:
    automated:
      selfHeal: true
```

Se abilitato, Argo CD ripristina qualsiasi modifica manuale apportata direttamente al cluster, assicurando che Git rimanga la fonte della verità.

 **Potatura:**

Elimina automaticamente le risorse rimosse da Git:

```
spec:
  syncPolicy:
    automated:
      prune: true
```

**avvertimento**  
Il pruning eliminerà le risorse dal cluster. Usare con cautela negli ambienti di produzione.

 **Sincronizzazione automatica combinata**:

```
spec:
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
    - CreateNamespace=true
```

 **Riprova la configurazione**:

Configura il comportamento dei tentativi di ripetizione per le sincronizzazioni non riuscite:

```
spec:
  syncPolicy:
    retry:
      limit: 5  # Number of failed sync attempts; unlimited if less than 0
      backoff:
        duration: 5s  # Amount to back off (default unit: seconds, also supports "2m", "1h")
        factor: 2  # Factor to multiply the base duration after each failed retry
        maxDuration: 3m  # Maximum amount of time allowed for the backoff strategy
```

Ciò è particolarmente utile per le risorse che dipendono dal fatto di CRDs essere state create per prime o quando si lavora con istanze kro in cui il CRD potrebbe non essere immediatamente disponibile.

## Opzioni di sincronizzazione
<a name="_sync_options"></a>

Configurazione di sincronizzazione aggiuntiva:

 **Crea lo spazio dei nomi se non esiste**:

```
spec:
  syncPolicy:
    syncOptions:
    - CreateNamespace=true
```

 **Salta la corsa a secco per** le risorse mancanti:

Utile quando si applicano risorse che dipendono da CRDs ciò che non esistono ancora (come le istanze kro):

```
spec:
  syncPolicy:
    syncOptions:
    - SkipDryRunOnMissingResource=true
```

Questo può essere applicato anche a risorse specifiche utilizzando un'etichetta sulla risorsa stessa.

 **Convalida le risorse prima di applicarle**:

```
spec:
  syncPolicy:
    syncOptions:
    - Validate=true
```

 **Applica solo non sincronizzato**:

```
spec:
  syncPolicy:
    syncOptions:
    - ApplyOutOfSyncOnly=true
```

## Funzionalità di sincronizzazione avanzate
<a name="_advanced_sync_features"></a>

Argo CD supporta funzionalità di sincronizzazione avanzate per implementazioni complesse:
+  **Sync waves**: controlla l'ordine di creazione delle risorse con le annotazioni `argocd.argoproj.io/sync-wave`
+  **Sync hooks**: esegui i lavori prima o dopo la sincronizzazione con `argocd.argoproj.io/hook` le annotazioni (PreSync,,) PostSync SyncFail
+  **Valutazione dello stato delle risorse**: controlli di integrità personalizzati per le risorse specifiche dell'applicazione

Per i dettagli, consultate [Sync Waves](https://argo-cd.readthedocs.io/en/stable/user-guide/sync-waves/) e [Resource Hooks nella documentazione](https://argo-cd.readthedocs.io/en/stable/user-guide/resource_hooks/) del CD Argo.

## Ignora le differenze
<a name="_ignore_differences"></a>

Impedisci ad Argo CD di sincronizzare campi specifici gestiti da altri controller (come HPA che gestisce le repliche):

```
spec:
  ignoreDifferences:
  - group: apps
    kind: Deployment
    jsonPointers:
    - /spec/replicas
```

Per i dettagli sugli schemi di ignoramento e sulle esclusioni dei campi, consultate [Diffing](https://argo-cd.readthedocs.io/en/stable/user-guide/diffing/) Customization nella documentazione del CD Argo.

## Implementazione multiambiente
<a name="_multi_environment_deployment"></a>

Implementa la stessa applicazione in più ambienti:

 **Sviluppo**:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app-dev
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/example/my-app
    targetRevision: develop
    path: overlays/development
  destination:
    name: dev-cluster
    namespace: my-app
```

 **Produzione**:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app-prod
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/example/my-app
    targetRevision: main
    path: overlays/production
  destination:
    name: prod-cluster
    namespace: my-app
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
```

## Monitora e gestisci le applicazioni
<a name="_monitor_and_manage_applications"></a>

 **Visualizza lo stato dell'applicazione**:

```
kubectl get application my-app -n argocd
```

 **Accedi all'interfaccia utente di Argo CD:**

Apri l'interfaccia utente di Argo CD tramite la console EKS per visualizzare la topologia dell'applicazione, lo stato di sincronizzazione, lo stato delle risorse e la cronologia di distribuzione. Vedi [Lavorare con Argo CD](working-with-argocd.md) per le istruzioni di accesso all'interfaccia utente.

 **Applicazioni di rollback**:

Ripristina una revisione precedente utilizzando l'interfaccia utente di Argo CD, l'Argo CD CLI o aggiornando le specifiche `targetRevision` dell'applicazione a un commit o tag Git precedente.

Utilizzo dell'Argo CD CLI:

```
argocd app rollback argocd/my-app <revision-id>
```

**Nota**  
Quando si utilizza l'Argo CD CLI con la funzionalità gestita, specificare le applicazioni con il prefisso dello spazio dei nomi:. `namespace/appname`

Per ulteriori informazioni, consulta il rollback dell'[app argocd](https://argo-cd.readthedocs.io/en/stable/user-guide/commands/argocd_app_rollback/) nella documentazione di Argo CD.

## Risorse aggiuntive
<a name="_additional_resources"></a>
+  [Lavorare con Argo CD Projects](argocd-projects.md)- Organizza le applicazioni con Projects per ambienti multi-tenant
+  [Usa ApplicationSets](argocd-applicationsets.md)- Implementa su più cluster con modelli
+  [Specifiche dell'applicazione: riferimento](https://argo-cd.readthedocs.io/en/stable/user-guide/application-specification/) completo all'API dell'applicazione
+  [Opzioni di sincronizzazione](https://argo-cd.readthedocs.io/en/stable/user-guide/sync-options/): configurazione di sincronizzazione avanzata

# Usa ApplicationSets
<a name="argocd-applicationsets"></a>

ApplicationSets genera più applicazioni da modelli, consentendoti di distribuire la stessa applicazione su più cluster, ambienti o namespace con un'unica definizione di risorsa.

## Prerequisiti
<a name="_prerequisites"></a>
+ È stato creato un cluster EKS con funzionalità Argo CD
+ Accesso al repository configurato (vedi) [Configurare l'accesso al repository](argocd-configure-repositories.md)
+  `kubectl`configurato per comunicare con il cluster

**Nota**  
Non sono necessari cluster di destinazione multipli per ApplicationSets. È possibile utilizzare generatori diversi dal generatore di cluster (come i generatori list, git o matrix) per distribuire applicazioni senza cluster remoti.

## Come funziona ApplicationSets
<a name="_how_applicationsets_work"></a>

ApplicationSets utilizzate i generatori per produrre parametri, quindi applicate tali parametri a un modello di applicazione. Ogni set di parametri generati crea un'applicazione.

Generatori comuni per le implementazioni EKS:
+  **Generatore di elenchi**: definisce in modo esplicito cluster e parametri per ogni ambiente
+  **Generatore di cluster**: implementa automaticamente su tutti i cluster registrati
+  **Generatore Git**: genera applicazioni dalla struttura del repository
+  **Generatore di matrici**: combina generatori per implementazioni multidimensionali
+  Generatore di **fusione: unisce i parametri di più generatori**

[Per un riferimento completo al generatore, consultate la Documentazione. ApplicationSet ](https://argo-cd.readthedocs.io/en/stable/user-guide/application-set/)

## Generatore di elenchi
<a name="_list_generator"></a>

Esegui la distribuzione su più cluster con configurazione esplicita:

```
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: guestbook-all-clusters
  namespace: argocd
spec:
  generators:
  - list:
      elements:
      - environment: dev
        replicas: "2"
      - environment: staging
        replicas: "3"
      - environment: prod
        replicas: "5"
  template:
    metadata:
      name: 'guestbook-{{environment}}'
    spec:
      project: default
      source:
        repoURL: https://github.com/example/guestbook
        targetRevision: HEAD
        path: 'overlays/{{environment}}'
      destination:
        name: '{{environment}}-cluster'
        namespace: guestbook
      syncPolicy:
        automated:
          prune: true
          selfHeal: true
```

**Nota**  
Utilizzalo `destination.name` con i nomi dei cluster per una migliore leggibilità. ARNs Se necessario, il `destination.server` campo funziona anche con il cluster EKS.

Questo crea tre applicazioni: `guestbook-dev``guestbook-staging`, e`guestbook-prod`.

## Generatore di cluster
<a name="_cluster_generator"></a>

Implementa automaticamente su tutti i cluster registrati:

```
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: cluster-addons
  namespace: argocd
spec:
  generators:
  - clusters: {}
  template:
    metadata:
      name: '{{name}}-addons'
    spec:
      project: default
      source:
        repoURL: https://github.com/example/cluster-addons
        targetRevision: HEAD
        path: addons
      destination:
        server: '{{server}}'
        namespace: kube-system
      syncPolicy:
        automated:
          prune: true
          selfHeal: true
```

Questo crea automaticamente un'applicazione per ogni cluster registrato.

 **Cluster di filtri:**

Utilizza `matchLabels` per includere cluster specifici o `matchExpressions` per escludere cluster:

```
spec:
  generators:
  - clusters:
      selector:
        matchLabels:
          environment: production
        matchExpressions:
        - key: skip-appset
          operator: DoesNotExist
```

## Generatori Git
<a name="_git_generators"></a>

I generatori Git creano applicazioni basate sulla struttura del repository:
+  **Generatore di directory**: distribuisci ogni directory come applicazione separata (utile per i microservizi)
+  **Generatore di file**: genera applicazioni da file di parametri (utile per le implementazioni multi-tenant)

 **Esempio: implementazione di microservizi** 

```
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: microservices
  namespace: argocd
spec:
  generators:
  - git:
      repoURL: https://github.com/example/microservices
      revision: HEAD
      directories:
      - path: services/*
  template:
    metadata:
      name: '{{path.basename}}'
    spec:
      project: default
      source:
        repoURL: https://github.com/example/microservices
        targetRevision: HEAD
        path: '{{path}}'
      destination:
        name: my-cluster
        namespace: '{{path.basename}}'
      syncPolicy:
        automated:
          prune: true
          selfHeal: true
        syncOptions:
        - CreateNamespace=true
```

Per i dettagli sui generatori Git e sulla configurazione basata su file, consultate [Git Generator nella documentazione](https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Generators-Git/) del CD Argo.

## Generatore di matrici
<a name="_matrix_generator"></a>

Combina più generatori da implementare su più dimensioni (ambienti × cluster):

```
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: multi-env-multi-cluster
  namespace: argocd
spec:
  generators:
  - matrix:
      generators:
      - list:
          elements:
          - environment: dev
          - environment: staging
          - environment: prod
      - clusters:
          selector:
            matchLabels:
              region: us-west-2
  template:
    metadata:
      name: 'app-{{environment}}-{{name}}'
    spec:
      project: default
      source:
        repoURL: https://github.com/example/app
        targetRevision: HEAD
        path: 'overlays/{{environment}}'
      destination:
        name: '{{name}}'
        namespace: 'app-{{environment}}'
```

Per i dettagli sulla combinazione dei generatori, consultate [Matrix Generator](https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Generators-Matrix/) nella documentazione di Argo CD.

## Implementazione in più regioni
<a name="_multi_region_deployment"></a>

Implementa su cluster in più regioni:

```
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: global-app
  namespace: argocd
spec:
  generators:
  - list:
      elements:
      - clusterName: prod-us-west
        region: us-west-2
      - clusterName: prod-us-east
        region: us-east-1
      - clusterName: prod-eu-west
        region: eu-west-1
  template:
    metadata:
      name: 'app-{{region}}'
    spec:
      project: default
      source:
        repoURL: https://github.com/example/app
        targetRevision: HEAD
        path: kubernetes
        helm:
          parameters:
          - name: region
            value: '{{region}}'
      destination:
        name: '{{clusterName}}'
        namespace: app
      syncPolicy:
        automated:
          prune: true
          selfHeal: true
```

## Gestisci ApplicationSets
<a name="_manage_applicationsets"></a>

 **Visualizza ApplicationSets e genera applicazioni**:

```
kubectl get applicationsets -n argocd
kubectl get applications -n argocd -l argocd.argoproj.io/application-set-name=<applicationset-name>
```

 **Aggiorna un ApplicationSet**:

Modifica le ApplicationSet specifiche e riapplica. Argo CD aggiorna automaticamente tutte le applicazioni generate:

```
kubectl apply -f applicationset.yaml
```

 **Eliminare un ApplicationSet**:

```
kubectl delete applicationset <name> -n argocd
```

**avvertimento**  
Eliminazione ed ApplicationSet eliminazione di tutte le applicazioni generate. Se tali applicazioni lo hanno fatto`prune: true`, le relative risorse verranno eliminate anche dai cluster di destinazione.  
Per preservare le risorse distribuite durante l'eliminazione di un file ApplicationSet, impostate su `true` nelle `.syncPolicy.preserveResourcesOnDeletion` specifiche. ApplicationSet Per ulteriori informazioni, consultate [Application Pruning & Resource Deletion](https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Application-Deletion/) nella documentazione del CD Argo.

**Importante**  
La ApplicationSets funzionalità di Argo CD prevede considerazioni sulla sicurezza di cui è necessario tenere conto prima di utilizzarla. ApplicationSets Per ulteriori informazioni, consultate la sezione [ApplicationSet Sicurezza](https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Security/) nella documentazione del CD Argo.

## Risorse aggiuntive
<a name="_additional_resources"></a>
+  [Lavorare con Argo CD Projects](argocd-projects.md)- Organizza ApplicationSets con progetti
+  [Crea applicazioni](argocd-create-application.md)- Comprendi la configurazione dell'applicazione
+  [ApplicationSet Documentazione](https://argo-cd.readthedocs.io/en/stable/user-guide/application-set/): riferimenti e modelli completi del generatore
+  [Generator Reference](https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Generators/) - Specifiche dettagliate del generatore

# Considerazioni su Argo CD
<a name="argocd-considerations"></a>

Questo argomento tratta importanti considerazioni sull'utilizzo del CD EKS Capability for Argo, tra cui pianificazione, autorizzazioni, autenticazione e modelli di distribuzione multicluster.

## Pianificazione
<a name="_planning"></a>

Prima di distribuire Argo CD, considerate quanto segue:

 **Strategia** di archiviazione: stabilite dove verranno archiviati i manifesti dell'applicazione (CodeCommit,, GitHub, GitLab Bitbucket). Pianifica la struttura del repository e la strategia di ramificazione per diversi ambienti.

 **Strategia RBAC**: pianifica quali team o utenti devono avere accesso come amministratore, editor o visualizzatore. Associali ai gruppi di AWS Identity Center o ai ruoli di Argo CD.

 **Architettura multicluster**: stabilisci se gestirai più cluster da una singola istanza Argo CD. Prendi in considerazione l'utilizzo di un cluster di gestione dedicato per Argo CD.

 **Organizzazione delle applicazioni**: pianifica come strutturerai le applicazioni e ApplicationSets. Prendi in considerazione l'utilizzo di progetti per organizzare le applicazioni per team o ambiente.

 **Criteri di sincronizzazione**: decidi se le applicazioni devono sincronizzarsi automaticamente o richiedere l'approvazione manuale. La sincronizzazione automatica è comune per lo sviluppo, quella manuale per la produzione.

## Permissions
<a name="_permissions"></a>

Per informazioni dettagliate su IAM Capability Roles, sulle policy di fiducia e sulle best practice di sicurezza, consulta [Funzionalità Amazon EKS, ruolo IAM](capability-role.md) e[Considerazioni sulla sicurezza per EKS Capabilities](capabilities-security.md).

### Panoramica del ruolo di IAM Capability
<a name="_iam_capability_role_overview"></a>

Quando crei una risorsa di funzionalità Argo CD, fornisci un ruolo di capacità IAM. A differenza di ACK, Argo CD gestisce principalmente le risorse Kubernetes, non le risorse direttamente. AWS Tuttavia, lo IAM Capability Role è necessario per:
+ Accesso agli archivi Git privati in CodeCommit
+ Integrazione con AWS Identity Center per l'autenticazione
+ Accesso ai AWS segreti in Secrets Manager (se configurato)
+ Implementazioni tra cluster su altri cluster EKS

### CodeCommit integrazione
<a name="_codecommit_integration"></a>

Se utilizzi i CodeCommit repository, allega una policy con autorizzazioni di lettura:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codecommit:GitPull"
      ],
      "Resource": "*"
    }
  ]
}
```

**Importante**  
Per uso in produzione, limita il `Resource` campo a un repository specifico ARNs invece di utilizzarlo. `"*"`  
Esempio:  

```
"Resource": "arn:aws:codecommit:us-west-2:111122223333:my-app-repo"
```
Ciò limita l'accesso della funzionalità Argo CD solo ai repository che deve gestire.

### Integrazione di Secrets Manager
<a name="_secrets_manager_integration"></a>

Se stai archiviando le credenziali del repository in Secrets Manager, allega la policy gestita per l'accesso in lettura:

```
arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess
```

Questa politica include le autorizzazioni necessarie:`secretsmanager:GetSecretValue`, e le autorizzazioni di `secretsmanager:DescribeSecret` decrittografia KMS.

### Configurazione di base
<a name="_basic_setup"></a>

Per le funzionalità di base di Argo CD con repository Git pubblici, non sono richieste policy IAM aggiuntive oltre alla policy di trust.

## Autenticazione
<a name="_authentication"></a>

### AWS Integrazione con Identity Center
<a name="shared_aws_identity_center_integration"></a>

La funzionalità gestita da Argo CD si integra direttamente con AWS Identity Center (precedentemente AWS SSO), consentendoti di utilizzare il tuo provider di identità esistente per l'autenticazione.

Quando configuri l'integrazione con Identity Center: AWS 

1. Gli utenti accedono all'interfaccia utente di Argo CD tramite la console EKS

1. Si autenticano utilizzando AWS Identity Center (che può essere collegato al vostro provider di identità aziendale)

1.  AWS Identity Center fornisce informazioni su utenti e gruppi su Argo CD

1. Argo CD associa utenti e gruppi ai ruoli RBAC in base alla configurazione

1. Gli utenti vedono solo le applicazioni e le risorse a cui hanno il permesso di accedere

### Semplificazione dell'accesso con i set di autorizzazioni di Identity Center
<a name="_simplifying_access_with_identity_center_permission_sets"></a>

 AWS Identity Center offre due percorsi di autenticazione distinti quando si lavora con Argo CD:

 **Autenticazione tramite API Argo CD**: Identity Center fornisce l'autenticazione SSO all'interfaccia utente e all'API di Argo CD. Questo viene configurato tramite le mappature dei ruoli RBAC della funzionalità Argo CD.

 **Accesso al cluster EKS**: la funzionalità Argo CD utilizza il ruolo IAM fornito dal cliente per l'autenticazione con i cluster EKS tramite voci di accesso. Queste voci di accesso possono essere configurate manualmente per aggiungere o rimuovere autorizzazioni.

È possibile utilizzare i [set di autorizzazioni di Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtocreatepermissionset.html) per semplificare la gestione delle identità consentendo a una singola identità di accedere sia ai cluster Argo CD che EKS. Ciò riduce il sovraccarico richiedendo di gestire una sola identità su entrambi i sistemi, anziché mantenere credenziali separate per l'accesso ad Argo CD e l'accesso al cluster.

### Mappature dei ruoli RBAC
<a name="_rbac_role_mappings"></a>

Argo CD dispone di ruoli integrati che è possibile mappare agli utenti e ai gruppi di AWS Identity Center:

 **ADMIN**: accesso completo a tutte le applicazioni e le impostazioni. Può creare, aggiornare ed eliminare applicazioni. Può gestire la configurazione di Argo CD.

 **EDITOR**: Può creare e modificare applicazioni. Non è possibile modificare le impostazioni di Argo CD o eliminare applicazioni.

 **VIEWER**: accesso in sola lettura alle applicazioni. Può visualizzare lo stato e la cronologia dell'applicazione. Non è possibile apportare modifiche.

**Nota**  
I nomi dei ruoli fanno distinzione tra maiuscole e minuscole e devono essere maiuscole (ADMIN, EDITOR, VIEWER).

**Importante**  
L'integrazione di EKS Capabilities con AWS Identity Center supporta fino a 1.000 identità per funzionalità Argo CD. Un'identità può essere un utente o un gruppo.

## Implementazioni multicluster
<a name="_multi_cluster_deployments"></a>

La funzionalità gestita da Argo CD supporta implementazioni multi-cluster, consentendo di gestire le applicazioni in cluster di sviluppo, staging e produzione da una singola istanza Argo CD.

### Come funziona il multicluster
<a name="_how_multi_cluster_works"></a>

Quando si registrano cluster aggiuntivi con Argo CD:

1. Crei segreti del cluster che fanno riferimento ai cluster EKS di destinazione tramite ARN

1. Create applicazioni o destinate a ApplicationSets cluster diversi

1. Argo CD si connette a ciascun cluster per distribuire e controllare le risorse

1. Puoi visualizzare e gestire tutti i cluster da un'unica interfaccia utente di Argo CD

### Prerequisiti per il multicluster
<a name="_prerequisites_for_multi_cluster"></a>

Prima di registrare cluster aggiuntivi:
+ Crea una voce di accesso sul cluster di destinazione per il ruolo di funzionalità Argo CD
+ Garantite la connettività di rete tra la funzionalità Argo CD e i cluster di destinazione
+ Verifica le autorizzazioni IAM per accedere ai cluster di destinazione

### Registra un cluster
<a name="_register_a_cluster"></a>

Registra i cluster utilizzando Kubernetes Secrets nel namespace. `argocd`

Ottieni l'ARN del cluster di destinazione. Sostituiscilo *region-code* con la AWS regione in cui si trova il cluster di destinazione e *target-cluster* sostituiscilo con il nome del cluster di destinazione.

```
aws eks describe-cluster \
  --region region-code \
  --name target-cluster \
  --query 'cluster.arn' \
  --output text
```

Crea un segreto del cluster utilizzando l'ARN del cluster:

```
apiVersion: v1
kind: Secret
metadata:
  name: target-cluster
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: cluster
type: Opaque
stringData:
  name: target-cluster
  server: arn:aws:eks:us-west-2:111122223333:cluster/target-cluster
  project: default
```

**Importante**  
Utilizza l'ARN del cluster EKS nel `server` campo, non l'URL del server API Kubernetes. La funzionalità gestita richiede l'identificazione dei cluster ARNs di destinazione.

Applica il segreto:

```
kubectl apply -f cluster-secret.yaml
```

### Configura Access Entry sul cluster di destinazione
<a name="_configure_access_entry_on_target_cluster"></a>

Il cluster di destinazione deve disporre di un Access Entry che conceda al ruolo di funzionalità Argo CD l'autorizzazione a distribuire le applicazioni. Sostituisci *region-code* con la AWS regione in cui si trova il cluster di destinazione, sostituisci *target-cluster* con il nome del cluster di destinazione e sostituisci l'ARN con il tuo ruolo di funzionalità Argo CD ARN.

```
aws eks create-access-entry \
  --region region-code \
  --cluster-name target-cluster \
  --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \
  --type STANDARD \
  --kubernetes-groups system:masters
```

**Nota**  
Per l'uso in produzione, prendi in considerazione l'utilizzo di gruppi Kubernetes più restrittivi anziché. `system:masters`

### Accesso privato al cluster
<a name="_private_cluster_access"></a>

La funzionalità gestita da Argo CD può essere implementata su cluster EKS completamente privati senza richiedere peering VPC o configurazioni di rete specializzate. AWS gestisce automaticamente la connettività tra la funzionalità Argo CD e i cluster remoti privati. Assicurati che i controlli di accesso al repository e le politiche RBAC di Argo CD siano configurati correttamente.

### Implementazioni su più account
<a name="_cross_account_deployments"></a>

Per le distribuzioni tra account, aggiungi l'Argo CD IAM Capability Role dall'account di origine all'EKS Access Entry del cluster di destinazione:

1. Nell'account di destinazione, create un Access Entry sul cluster EKS di destinazione

1. Usa l'ARN Argo CD IAM Capability Role dell'account di origine come principale

1. Configura le autorizzazioni RBAC Kubernetes appropriate per l'Access Entry

1. Registra il cluster di destinazione in Argo CD utilizzando il relativo ARN del cluster EKS

Non è richiesta la creazione di ruoli IAM aggiuntivi o la configurazione delle policy di fiducia: EKS Access Entries gestisce l'accesso tra account.

## Best practice
<a name="_best_practices"></a>

 **Usa le fonti dichiarative come fonte di verità**: archivia tutti i manifesti delle tue applicazioni in fonti dichiarative (repository Git, registri Helm o immagini OCI), abilitando il controllo delle versioni, gli audit trail e la collaborazione.

 **Implementa un RBAC adeguato**: utilizza l'integrazione di AWS Identity Center per controllare chi può accedere e gestire le applicazioni in Argo CD. Argo CD supporta un controllo granulare degli accessi alle risorse all'interno delle applicazioni (implementazioni, pod e segreti). ConfigMaps

 **Utilizzo ApplicationSets per implementazioni multiambiente: da utilizzare per distribuire applicazioni su** più cluster o namespace ApplicationSets con configurazioni diverse.

## Gestione del ciclo di vita
<a name="_lifecycle_management"></a>

### Politiche di sincronizzazione delle applicazioni
<a name="_application_sync_policies"></a>

Controlla il modo in cui Argo CD sincronizza le applicazioni:

 **Sincronizzazione manuale**: le applicazioni richiedono l'approvazione manuale per sincronizzare le modifiche. Consigliata per ambienti **di produzione**.

 **Sincronizzazione automatica**: le applicazioni si sincronizzano automaticamente quando vengono rilevate modifiche a Git. Comune per gli ambienti di sviluppo e gestione temporanea.

 **Correzione automatica**: ripristina automaticamente le modifiche manuali apportate al cluster. Assicura che lo stato del cluster corrisponda a Git.

 **Potatura**: elimina automaticamente le risorse rimosse da Git. Usalo con cautela in quanto ciò può eliminare le risorse.

### Integrità dell'applicazione
<a name="_application_health"></a>

Argo CD monitora continuamente lo stato delle applicazioni:
+  **Salutare**: tutte le risorse funzionano come previsto
+  **Progressione**: le risorse vengono create o aggiornate
+  **Degradate**: alcune risorse non sono salutari
+  **Sospesa**: l'applicazione è in pausa
+  **Mancante**: le risorse non sono presenti nel cluster

### Sincronizza finestre
<a name="_sync_windows"></a>

Configura le finestre di sincronizzazione per controllare quando le applicazioni possono essere sincronizzate:
+ Consenti le sincronizzazioni solo durante le finestre di manutenzione
+ Blocca le sincronizzazioni durante l'orario lavorativo
+ Pianifica le sincronizzazioni automatiche per orari specifici
+ Utilizza le finestre di sincronizzazione in situazioni in cui devi apportare modifiche e interrompere qualsiasi sincronizzazione (scenari break-glass)

## Configurazione Webhook per una sincronizzazione più rapida
<a name="_webhook_configuration_for_faster_sync"></a>

Per impostazione predefinita, Argo CD esegue il polling dei repository Git ogni 6 minuti per rilevare le modifiche. Per implementazioni più reattive, configura i webhook Git per attivare sincronizzazioni immediate quando vengono inviate le modifiche.

I webhook offrono diversi vantaggi:
+ Risposta di sincronizzazione immediata quando viene inviato il codice (secondi anziché minuti)
+ Riduzione del sovraccarico di polling e miglioramento delle prestazioni del sistema
+ Uso più efficiente dei limiti di velocità delle API
+ Esperienza utente migliore con feedback più rapidi

### Endpoint Webhook
<a name="_webhook_endpoint"></a>

L'URL del webhook segue lo schema`${serverUrl}/api/webhook`, `serverUrl` dov'è l'URL del server Argo CD.

Ad esempio, se l'URL del server Argo CD è`https://abc123.eks-capabilities.us-west-2.amazonaws.com`, l'URL del webhook è:

```
https://abc123.eks-capabilities.us-west-2.amazonaws.com/api/webhook
```

### Configura i webhook tramite il provider Git
<a name="_configure_webhooks_by_git_provider"></a>

 **GitHub**: Nelle impostazioni del repository, aggiungi un webhook con l'URL del webhook Argo CD. Imposta il tipo di contenuto su `application/json` e seleziona «Just the push event».

 **GitLab**: Nelle impostazioni del progetto, aggiungi un webhook con l'URL del webhook di Argo CD. Abilita «Eventi push» e, facoltativamente, «Tag eventi push».

 **Bitbucket**: nelle impostazioni del repository, aggiungi un webhook con l'URL del webhook di Argo CD. Seleziona «Repository push» come trigger.

 **CodeCommit**: crea una EventBridge regola Amazon che si attiva in base alle modifiche dello stato del CodeCommit repository e invia notifiche all'endpoint webhook Argo CD.

[Per istruzioni dettagliate sulla configurazione dei webhook, consulta Argo CD Webhook Configuration.](https://argo-cd.readthedocs.io/en/stable/operator-manual/webhook/)

**Nota**  
I webhook completano il polling, non lo sostituiscono. Argo CD continua a sondare gli archivi come meccanismo di riserva nel caso in cui le notifiche dei webhook vengano perse.

## Fasi successive
<a name="_next_steps"></a>
+  [Lavorare con Argo CD](working-with-argocd.md)- Scopri come creare e gestire applicazioni Argo CD
+  [Risolvi i problemi relativi alle funzionalità di Argo CD](argocd-troubleshooting.md)- Risolvi i problemi relativi ad Argo CD
+  [Lavorare con le risorse di capacità](working-with-capabilities.md)- Gestite la vostra risorsa dedicata alle funzionalità di Argo CD

# Risolvi i problemi relativi alle funzionalità di Argo CD
<a name="argocd-troubleshooting"></a>

Questo argomento fornisce linee guida per la risoluzione dei problemi del CD EKS Capability for Argo, compresi i controlli dello stato delle funzionalità, i problemi di sincronizzazione delle applicazioni, l'autenticazione del repository e le implementazioni multi-cluster.

**Nota**  
Le funzionalità EKS sono completamente gestite ed eseguite all'esterno del cluster. Non avete accesso ai log del server Argo CD o al namespace. `argocd` La risoluzione dei problemi si concentra sullo stato delle funzionalità, sullo stato dell'applicazione e sulla configurazione.

## La funzionalità è ATTIVA ma le applicazioni non si sincronizzano
<a name="_capability_is_active_but_applications_arent_syncing"></a>

Se la funzionalità Argo CD mostra `ACTIVE` lo stato ma le applicazioni non si sincronizzano, controlla lo stato della funzionalità e lo stato dell'applicazione.

 **Verifica lo stato della funzionalità**:

È possibile visualizzare i problemi relativi allo stato e allo stato delle funzionalità nella console EKS o utilizzando la AWS CLI.

 **Console**:

1. Apri la console Amazon EKS a https://console.aws.amazon.com/eks/ home\$1/clusters.

1. Seleziona il nome del cluster.

1. Scegli la scheda **Osservabilità**.

1. Scegli **Monitora cluster**.

1. Scegli la scheda **Capacità** per visualizzare lo stato e lo stato di tutte le funzionalità.

 ** AWS CLI:**

```
# View capability status and health
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-argocd

# Look for issues in the health section
```

 Cause comuni:
+  **Repository non configurato**: repository Git non aggiunto al CD Argo
+  **Autenticazione fallita**: chiave SSH, token o credenziali non validi CodeCommit 
+  **Applicazione non creata**: non esistono risorse applicative nel cluster
+  **Politica di sincronizzazione**: è richiesta la sincronizzazione manuale (la sincronizzazione automatica non è abilitata)
+  Autorizzazioni **IAM: autorizzazioni** mancanti per il nostro Secrets CodeCommit Manager

 **Controlla lo stato dell'applicazione**:

```
# List applications
kubectl get application -n argocd

# View sync status
kubectl get application my-app -n argocd -o jsonpath='{.status.sync.status}'

# View application health
kubectl get application my-app -n argocd -o jsonpath='{.status.health}'
```

 **Verifica le condizioni della domanda**:

```
# Describe application to see detailed status
kubectl describe application my-app -n argocd

# View application health
kubectl get application my-app -n argocd -o jsonpath='{.status.health}'
```

## Applicazioni bloccate nello stato «In corso»
<a name="_applications_stuck_in_progressing_state"></a>

Se un'applicazione viene visualizzata `Progressing` ma non arriva mai`Healthy`, controlla lo stato delle risorse e gli eventi dell'applicazione.

 **Controlla lo stato delle risorse**:

```
# View application resources
kubectl get application my-app -n argocd -o jsonpath='{.status.resources}'

# Check for unhealthy resources
kubectl describe application my-app -n argocd | grep -A 10 "Health Status"
```

 Cause comuni:
+  **Implementazione non pronta**: i pod non si avviano o le sonde di prontezza non funzionano
+  **Dipendenze tra le risorse**: risorse in attesa che altre risorse siano pronte
+  **Errori di estrazione delle immagini**: le immagini dei contenitori non sono accessibili
+  **Risorse insufficienti**: il cluster non dispone di CPU o memoria per i pod

 **Verifica la configurazione del cluster di destinazione** (per configurazioni a più cluster):

```
# List registered clusters
kubectl get secret -n argocd -l argocd.argoproj.io/secret-type=cluster

# View cluster secret details
kubectl get secret cluster-secret-name -n argocd -o yaml
```

## Errori di autenticazione del repository
<a name="_repository_authentication_failures"></a>

Se Argo CD non può accedere ai tuoi repository Git, verifica la configurazione di autenticazione.

 **Per CodeCommit ** i repository:

Verifica che IAM Capability Role disponga delle CodeCommit autorizzazioni:

```
# View IAM policies
aws iam list-attached-role-policies --role-name my-argocd-capability-role
aws iam list-role-policies --role-name my-argocd-capability-role

# Get specific policy details
aws iam get-role-policy --role-name my-argocd-capability-role --policy-name policy-name
```

Il ruolo richiede l'`codecommit:GitPull`autorizzazione per i repository.

 **Per i repository Git privati**:

Verifica che le credenziali del repository siano configurate correttamente:

```
# Check repository secret exists
kubectl get secret -n argocd repo-secret-name -o yaml
```

Assicurati che il segreto contenga le credenziali di autenticazione corrette (chiave SSH, token o nome utente/password).

 **Per i repository che utilizzano Secrets Manager**:

```
# Verify IAM Capability Role has Secrets Manager permissions
aws iam list-attached-role-policies --role-name my-argocd-capability-role

# Test secret retrieval
aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:region-code:111122223333:secret:my-secret
```

## Problemi di distribuzione su più cluster
<a name="_multi_cluster_deployment_issues"></a>

Se le applicazioni non vengono distribuite su cluster remoti, verifica la registrazione del cluster e la configurazione dell'accesso.

 **Controlla la registrazione del cluster**:

```
# List registered clusters
kubectl get secret -n argocd -l argocd.argoproj.io/secret-type=cluster

# Verify cluster secret format
kubectl get secret CLUSTER_SECRET_NAME -n argocd -o yaml
```

Assicurati che il `server` campo contenga l'ARN del cluster EKS, non l'URL dell'API Kubernetes.

 **Verifica l'accesso al cluster di destinazione**:

Sul cluster di destinazione, verifica che Argo CD Capability Role abbia un Access Entry:

```
# List access entries (run on target cluster or use AWS CLI)
aws eks list-access-entries --cluster-name target-cluster

# Describe specific access entry
aws eks describe-access-entry \
  --cluster-name target-cluster \
  --principal-arn arn:aws:iam::[.replaceable]111122223333:role/my-argocd-capability-role
```

 **Controlla le autorizzazioni IAM per** più account:

Per le distribuzioni tra account, verifica che Argo CD Capability Role abbia un Access Entry sul cluster di destinazione. La funzionalità gestita utilizza EKS Access Entries per l'accesso su più account, non l'assunzione di ruoli IAM.

Per ulteriori informazioni sulla configurazione multi-cluster, consulta. [Registra i cluster di destinazione](argocd-register-clusters.md)

## Fasi successive
<a name="_next_steps"></a>
+  [Considerazioni su Argo CD](argocd-considerations.md)- Considerazioni e best practice su Argo CD
+  [Lavorare con Argo CD](working-with-argocd.md)- Crea e gestisci applicazioni Argo CD
+  [Registra i cluster di destinazione](argocd-register-clusters.md)- Configurazione di implementazioni multi-cluster
+  [Risoluzione dei problemi delle funzionalità EKS](capabilities-troubleshooting.md)- Guida generale alla risoluzione dei problemi relativi alle funzionalità

# Confronto tra la funzionalità EKS per Argo CD e Argo CD autogestita
<a name="argocd-comparison"></a>

EKS Capability for Argo CD offre un'esperienza Argo CD completamente gestita che può essere eseguita in EKS. Per un confronto generale tra EKS Capabilities e soluzioni autogestite, vedi. [Considerazioni sulle funzionalità EKS](capabilities-considerations.md) Questo argomento si concentra sulle differenze specifiche di Argo CD, tra cui l'autenticazione, la gestione di più cluster e il supporto delle funzionalità upstream.

## Differenze rispetto alla versione upstream di Argo CD
<a name="_differences_from_upstream_argo_cd"></a>

EKS Capability for Argo CD si basa sull'upstream Argo CD, ma differisce nel modo in cui è accessibile, configurato e integrato con i servizi. AWS 

 **RBAC e autenticazione**: la funzionalità include tre ruoli RBAC (amministratore, editor, visualizzatore) e utilizza AWS Identity Center per l'autenticazione anziché l'autenticazione integrata di Argo CD. Configura le mappature dei ruoli tramite il `rbacRoleMapping` parametro della funzionalità per mappare i gruppi di Identity Center ai ruoli di Argo CD, non tramite Argo CD. `argocd-rbac-cm` ConfigMap L'interfaccia utente di Argo CD è ospitata con un proprio URL diretto (lo trovi nella console EKS nella scheda Capacità del cluster) e l'accesso all'API utilizza l' AWS autenticazione e l'autorizzazione tramite IAM.

 **Configurazione del cluster**: la funzionalità non configura automaticamente il cluster o le hub-and-spoke topologie locali. È possibile configurare i cluster di destinazione della distribuzione e le voci di accesso EKS. La funzionalità supporta solo i cluster Amazon EKS come obiettivi di distribuzione utilizzando il cluster EKS ARNs (non il server API Kubernetes). URLs La funzionalità non aggiunge automaticamente il cluster locale (`kubernetes.default.svc`) come obiettivo di distribuzione: per eseguire la distribuzione nello stesso cluster in cui viene creata la funzionalità, è necessario registrare esplicitamente quel cluster utilizzando il relativo ARN.

 **Accesso remoto semplificato ai cluster**: la funzionalità semplifica le implementazioni multi-cluster utilizzando EKS Access Entries per concedere l'accesso Argo CD ai cluster remoti, eliminando la necessità di configurare IAM Roles for Service Accounts (IRSA) o impostare ipotesi di ruoli IAM tra account. La funzionalità fornisce inoltre un accesso trasparente a cluster EKS completamente privati senza richiedere il peering VPC o una configurazione di rete specializzata AWS : gestisce automaticamente la connettività tra la funzionalità Argo CD e i cluster remoti privati.

 Integrazione **diretta dei AWS servizi: la funzionalità fornisce l'integrazione** diretta con i AWS servizi tramite le autorizzazioni IAM di Capability Role. È possibile fare riferimento ai CodeCommit repository, ai grafici ECR Helm e CodeConnections direttamente nelle risorse dell'applicazione senza creare configurazioni di repository. Ciò semplifica l'autenticazione ed elimina la necessità di gestire credenziali separate per i servizi. AWS Per informazioni dettagliate, vedi [Configurare l'accesso al repository](argocd-configure-repositories.md).

 **Supporto per lo spazio dei nomi**: la funzionalità richiede di specificare un unico spazio dei nomi in cui creare l'applicazione Argo CD e le risorse personalizzate ApplicationSet. AppProject 

**Nota**  
Questa restrizione dello spazio dei nomi si applica solo alle risorse personalizzate di Argo CD (Application,,). ApplicationSet AppProject I carichi di lavoro delle applicazioni possono essere distribuiti su qualsiasi namespace in qualsiasi cluster di destinazione. Ad esempio, se si crea la funzionalità con lo spazio dei nomi`argocd`, tutte le applicazioni CRs devono essere create nello spazio dei `argocd` nomi, ma tali applicazioni possono distribuire carichi di lavoro in,, o qualsiasi altro spazio dei nomi. `default` `production` `staging`

**Nota**  
La funzionalità gestita ha requisiti specifici per l'utilizzo e AppProject la configurazione della CLI:  
Quando si utilizza l'Argo CD CLI, specificare le applicazioni con il prefisso dello spazio dei nomi: `argocd app sync namespace/appname` 
AppProject le risorse devono specificare `.spec.sourceNamespaces` per definire quali namespace il progetto può controllare per le applicazioni (in genere impostate sullo spazio dei nomi specificato durante la creazione della funzionalità)
Le annotazioni di tracciamento delle risorse utilizzano il formato: `namespace_appname:group/kind:namespace/name` 

 **Funzionalità non supportate**: le seguenti funzionalità non sono disponibili nella funzionalità gestita:
+ Plugin di gestione della configurazione (CMPs) per la generazione di manifest personalizzati
+ Script Lua personalizzati per la valutazione dello stato delle risorse (sono supportati i controlli integrati per le risorse standard)
+ Il controller delle notifiche
+ Provider SSO personalizzati (è supportato solo AWS Identity Center, inclusa l'identità federata di terze parti tramite AWS Identity Center)
+ Estensioni dell'interfaccia utente e banner personalizzati
+ Accesso diretto e altre configurazioni `argocd-cm` `argocd-params` ConfigMaps
+ Modifica del timeout di sincronizzazione (fissato a 120 secondi)

 **Compatibilità**: le applicazioni ApplicationSets funzionano in modo identico alla versione upstream di Argo CD senza modifiche ai manifesti. La funzionalità utilizza lo stesso Kubernetes APIs e CRDs quindi strumenti come quelli funzionano allo stesso modo. `kubectl` La funzionalità supporta pienamente applicazioni e GitOps flussi di lavoro con sincronizzazione automatica ApplicationSets, implementazioni multi-cluster, policy di sincronizzazione (automatizzate, prune, self-heal), wave e hook di sincronizzazione, valutazione dello stato di salute per risorse Kubernetes standard, funzionalità di rollback, sorgenti di repository Git (HTTPS e SSH), Helm, Kustomize e semplici manifesti YAML, credenziali delle app, progetti per multi-tenancy ed esclusioni e inclusioni di risorse usioni. GitHub 

## Utilizzo dell'Argo CD CLI con funzionalità gestite
<a name="argocd-cli-configuration"></a>

L'Argo CD CLI funziona allo stesso modo dell'Argo CD upstream per la maggior parte delle operazioni, ma l'autenticazione e la registrazione del cluster sono diverse.

### Prerequisiti
<a name="_prerequisites"></a>

Installa l'Argo CD CLI seguendo le istruzioni di installazione [upstream](https://argo-cd.readthedocs.io/en/stable/cli_installation/).

### Configurazione
<a name="_configuration"></a>

Configura la CLI utilizzando le variabili di ambiente:

1. Ottieni l'URL del server Argo CD dalla console EKS (nella scheda **Capacità** del cluster) o utilizzando la AWS CLI. Il `https://` prefisso deve essere rimosso:

   ```
   export ARGOCD_SERVER=$(aws eks describe-capability \
     --cluster-name my-cluster \
     --capability-name my-argocd \
     --query 'capability.configuration.argoCd.serverUrl' \
     --output text \
     --region region-code | sed 's|^https://||')
   ```

1. Genera un token di account dall'interfaccia utente di Argo CD (**Impostazioni** → **Account** → **amministratore** → **Genera nuovo token**), quindi impostalo come variabile di ambiente:

   ```
   export ARGOCD_AUTH_TOKEN="your-token-here"
   ```

**Importante**  
Questa configurazione utilizza il token dell'account di amministrazione per i flussi di lavoro iniziali di configurazione e sviluppo. Per i casi d'uso in produzione, utilizza ruoli e token relativi al progetto per seguire il principio del privilegio minimo. Per ulteriori informazioni sulla configurazione dei ruoli di progetto e dell'RBAC, vedere. [Configurare le autorizzazioni di Argo CD](argocd-permissions.md)

1. Imposta l'opzione gRPC richiesta:

   ```
   export ARGOCD_OPTS="--grpc-web"
   ```

Con queste variabili di ambiente impostate, è possibile utilizzare l'Argo CD CLI senza `argocd login` il comando.

### Differenze principali
<a name="_key_differences"></a>

La funzionalità gestita presenta le seguenti limitazioni CLI:
+  `argocd admin`i comandi non sono supportati (richiedono l'accesso diretto al pod)
+  `argocd login`non è supportato (usa invece i token dell'account o del progetto)
+  `argocd cluster add`richiede il `--aws-cluster-name` flag con l'ARN del cluster EKS

### Esempio: registrare un cluster
<a name="_example_register_a_cluster"></a>

Registra un cluster EKS per la distribuzione delle applicazioni:

```
# Get the cluster ARN
CLUSTER_ARN=$(aws eks describe-cluster \
  --name my-cluster \
  --query 'cluster.arn' \
  --output text)

# Register the cluster
argocd cluster add $CLUSTER_ARN \
  --aws-cluster-name $CLUSTER_ARN \
  --name in-cluster \
  --project default
```

Per la documentazione completa della CLI di Argo CD, consultate il riferimento alla [CLI di Argo CD](https://argo-cd.readthedocs.io/en/stable/user-guide/commands/argocd/).

## Percorso di migrazione
<a name="_migration_path"></a>

È possibile migrare da Argo CD autogestito alla funzionalità gestita:

1. Controllate la configurazione attuale di Argo CD per verificare la presenza di funzionalità non supportate (controller di notifica, controlli di integrità personalizzati CMPs, estensioni dell'interfaccia utente)

1. Ridimensiona i controller Argo CD autogestiti fino a zero repliche per evitare conflitti

1. Crea una risorsa con funzionalità Argo CD sul tuo cluster

1. Esporta le tue applicazioni esistenti ApplicationSets e AppProjects

1. Esegui la migrazione delle credenziali del repository, dei segreti del cluster e dei modelli di credenziali di repository (record)

1. Se utilizzi chiavi GPG, certificati TLS o host noti SSH, migra anche queste configurazioni

1. Aggiorna `destination.server` i campi per utilizzare i nomi dei cluster o i cluster EKS ARNs

1. Applicali all'istanza Argo CD gestita

1. Verifica che le applicazioni si sincronizzino correttamente

1. Disattiva l'installazione di Argo CD autogestita

La funzionalità gestita utilizza lo stesso CD di Argo APIs e le stesse definizioni di risorse, quindi i manifesti esistenti funzionano con modifiche minime.

## Fasi successive
<a name="_next_steps"></a>
+  [Crea una funzionalità Argo CD](create-argocd-capability.md)- Create una risorsa con funzionalità Argo CD
+  [Lavorare con Argo CD](working-with-argocd.md)- Implementa la tua prima applicazione
+  [Considerazioni su Argo CD](argocd-considerations.md)- Configurazione AWS dell'integrazione con Identity Center

# Composizione delle risorse con kro (Kube Resource Orchestrator)
<a name="kro"></a>

 **kro (Kube Resource Orchestrator) è un progetto open source nativo di Kubernetes che consente di definire Kubernetes** personalizzati utilizzando una configurazione semplice e diretta. APIs Con kro, puoi configurare facilmente nuove funzionalità personalizzate che creano un gruppo di oggetti Kubernetes e le operazioni logiche tra di essi. APIs 

Con EKS Capabilities, kro è completamente gestito da AWS, eliminando la necessità di installare, mantenere e scalare i controller kro sui cluster.

## Come funziona kro
<a name="_how_kro_works"></a>

kro introduce una Custom Resource Definition (CRD) chiamata `ResourceGraphDefinition` (RGD) che consente la creazione semplice e semplificata di Kubernetes personalizzati. APIs Quando crei un file`ResourceGraphDefinition`, kro utilizza estensioni Kubernetes native per crearne e gestirne di nuove nel tuo cluster. APIs A partire da questa specifica di singola risorsa, kro creerà e registrerà per te un nuovo CRD in base alle tue specifiche e si adatterà per gestire le tue risorse personalizzate appena definite.

RGDs può includere più risorse e kro determinerà le interdipendenze e l'ordine delle risorse, quindi non è necessario. È possibile utilizzare una sintassi semplice per inserire la configurazione da una risorsa all'altra, semplificando notevolmente le composizioni ed eliminando la necessità di operatori «collanti» nel cluster. Con kro, le tue risorse personalizzate possono includere risorse Kubernetes native e qualsiasi definizione di risorsa personalizzata () installata nel cluster. CRDs

kro supporta un singolo tipo di risorsa principale:
+  **ResourceGraphDefinition (RGD)**: definisce una risorsa personalizzata Kubernetes, incapsulando una o più risorse Kubernetes native o personalizzate sottostanti

Oltre a questa risorsa, kro creerà e gestirà il ciclo di vita delle risorse personalizzate create con essa, nonché tutte le risorse che le costituiscono.

kro si integra perfettamente con AWS Controllers for Kubernetes (ACK), consentendoti di comporre risorse per il carico di lavoro con risorse per creare astrazioni di livello superiore. AWS Ciò consente di creare i propri elementi costitutivi del cloud, semplificando la gestione delle risorse e abilitando modelli riutilizzabili con impostazioni di configurazione predefinite e immutabili basate sugli standard organizzativi.

## Vantaggi di kro
<a name="_benefits_of_kro"></a>

kro consente ai team della piattaforma di creare Kubernetes personalizzati APIs che compongono più risorse in astrazioni di livello superiore. Ciò semplifica la gestione delle risorse consentendo agli sviluppatori di implementare applicazioni complesse utilizzando risorse personalizzate semplici, standardizzate e con versioni diverse. Definisci modelli riutilizzabili per combinazioni di risorse comuni, consentendo una creazione coerente di risorse in tutta l'organizzazione.

kro utilizza il [Common Expression Language (CEL) in Kubernetes](https://kubernetes.io/docs/reference/using-api/cel/) per trasferire valori tra le risorse e incorporare la logica condizionale, offrendo flessibilità nella composizione delle risorse. Puoi comporre sia le risorse Kubernetes che le AWS risorse gestite da ACK in modo unificato e personalizzato, abilitando definizioni complete di applicazioni e infrastrutture. APIs

kro supporta la configurazione dichiarativa tramite i manifesti di Kubernetes, abilitando i GitOps flussi di lavoro e l'infrastruttura come pratiche di codice che si integrano perfettamente con i processi di sviluppo esistenti. Come parte di EKS Managed Capabilities, kro è completamente gestito da AWS, eliminando la necessità di installare, configurare e mantenere i controller kro sui cluster.

 **Esempio: creazione di un ResourceGraphDefinition** 

L'esempio seguente mostra una procedura semplice `ResourceGraphDefinition` che crea un'applicazione Web con una distribuzione e un servizio:

```
apiVersion: kro.run/v1alpha1
kind: ResourceGraphDefinition
metadata:
  name: web-application
spec:
  schema:
    apiVersion: v1alpha1
    kind: WebApplication
    spec:
      name: string
      replicas: integer | default=3
  resources:
    - id: deployment
      template:
        apiVersion: apps/v1
        kind: Deployment
        metadata:
          name: ${schema.spec.name}
        spec:
          replicas: ${schema.spec.replicas}
    - id: service
      template:
        apiVersion: v1
        kind: Service
        metadata:
          name: ${schema.spec.name}
```

Quando gli utenti creano istanze della risorsa `WebApplication` personalizzata, kro crea automaticamente le risorse di distribuzione e servizio corrispondenti, gestendone il ciclo di vita insieme alla risorsa personalizzata.

## Integrazione con altre funzionalità gestite da EKS
<a name="_integration_with_other_eks_managed_capabilities"></a>

kro si integra con altre funzionalità gestite da EKS.
+  ** AWS Controllers for Kubernetes (ACK): usa kro per comporre le risorse ACK** in astrazioni di livello superiore, semplificando la gestione delle risorse. AWS 
+  **Argo CD: utilizza Argo CD** per gestire l'implementazione di risorse personalizzate kro su più cluster, abilitando flussi di lavoro per gli elementi costitutivi della piattaforma e gli stack di applicazioni. GitOps 

## Guida introduttiva a kro
<a name="_getting_started_with_kro"></a>

Per iniziare a usare EKS Capability for kro:

1.  [Crea una risorsa con funzionalità kro](create-kro-capability.md) sul tuo cluster EKS tramite la AWS console, la AWS CLI o la tua infrastruttura preferita come strumento di codice.

1. Crea ResourceGraphDefinitions (RGDs) che definisce le tue composizioni personalizzate APIs e di risorse.

1. Applica istanze delle tue risorse personalizzate per fornire e gestire Kubernetes e risorse sottostanti. AWS 

# Crea una funzionalità kro
<a name="create-kro-capability"></a>

Questo argomento spiega come creare una funzionalità kro sul tuo cluster Amazon EKS.

## Prerequisiti
<a name="_prerequisites"></a>

Prima di creare una funzionalità kro, assicurati di avere:
+ Un cluster Amazon EKS esistente che esegue una versione di Kubernetes supportata (sono supportate tutte le versioni con supporto standard ed esteso)
+ Autorizzazioni IAM sufficienti per creare risorse di funzionalità sui cluster EKS
+ (Per CLI/EksCtl) Lo strumento CLI appropriato installato e configurato

**Nota**  
A differenza di ACK e Argo CD, kro non richiede autorizzazioni IAM aggiuntive oltre alla policy di fiducia. kro opera interamente all'interno del cluster e non effettua chiamate API. AWS Tuttavia, è comunque necessario fornire a un IAM Capability Role la policy di fiducia appropriata. Per informazioni sulla configurazione delle autorizzazioni RBAC di Kubernetes per kro, consulta. [Configura le autorizzazioni kro](kro-permissions.md)

## Scegli il tuo strumento
<a name="_choose_your_tool"></a>

Puoi creare una funzionalità kro usando Console di gestione AWS, AWS CLI o eksctl:
+  [Crea una funzionalità kro utilizzando la console](kro-create-console.md)- Usa la console per un'esperienza guidata
+  [Crea una funzionalità kro utilizzando la CLI AWS](kro-create-cli.md)- Usa la AWS CLI per lo scripting e l'automazione
+  [Crea una funzionalità kro usando eksctl](kro-create-eksctl.md)- Usa eksctl per un'esperienza nativa di Kubernetes

## Cosa succede quando crei una funzionalità kro
<a name="_what_happens_when_you_create_a_kro_capability"></a>

Quando crei una funzionalità kro:

1. EKS crea il servizio di capacità kro e lo configura per monitorare e gestire le risorse nel cluster

1. Le definizioni di risorse personalizzate (CRDs) sono installate nel cluster

1. Viene creata automaticamente una voce di accesso per il tuo IAM Capability Role `AmazonEKSKROPolicy` che concede le autorizzazioni per la gestione ResourceGraphDefinitions e le relative istanze (vedi) [Considerazioni sulla sicurezza per EKS Capabilities](capabilities-security.md)

1. La funzionalità presuppone l'IAM Capability Role fornito dall'utente (utilizzato solo per la relazione di fiducia)

1. kro inizia a controllare `ResourceGraphDefinition` le risorse e le relative istanze

1. Lo stato della capacità cambia da a `CREATING` `ACTIVE` 

Una volta attivo, è possibile creare o ResourceGraphDefinitions definire modelli personalizzati APIs e crearne APIs delle istanze.

**Nota**  
La voce di accesso creata automaticamente include la voce `AmazonEKSKROPolicy` che concede a kro le autorizzazioni di gestione ResourceGraphDefinitions e le relative istanze. Per consentire a kro di creare le risorse Kubernetes sottostanti definite nell'utente ResourceGraphDefinitions (come le risorse Deployments, Services o ACK), è necessario configurare politiche di accesso aggiuntive. Per ulteriori informazioni sulle voci di accesso e su come configurare autorizzazioni aggiuntive, consulta e. [Configura le autorizzazioni kro](kro-permissions.md) [Considerazioni sulla sicurezza per EKS Capabilities](capabilities-security.md)

## Fasi successive
<a name="_next_steps"></a>

Dopo aver creato la funzionalità kro:
+  [concetti kro](kro-concepts.md)- Comprendi i concetti di kro e la composizione delle risorse
+  [concetti kro](kro-concepts.md)- Scopri SimpleSchema le espressioni CEL e i modelli di composizione delle risorse

# Crea una funzionalità kro utilizzando la console
<a name="kro-create-console"></a>

Questo argomento descrive come creare una funzionalità kro (Kube Resource Orchestrator) utilizzando. Console di gestione AWS

## Crea la funzionalità kro
<a name="_create_the_kro_capability"></a>

1. Apri la console Amazon EKS a https://console.aws.amazon.com/eks/ home\$1/clusters.

1. Seleziona il nome del cluster per aprire la pagina dei dettagli del cluster.

1. Scegli la scheda **Funzionalità**.

1. Nella barra di navigazione a sinistra, scegli **kro (Kube Resource Orchestrator**).

1. **Scegli la funzionalità Create kro.**

1. Per **IAM Capability Role**:
   + Se disponi già di un IAM Capability Role, selezionalo dal menu a discesa
   + Se devi creare un ruolo, scegli **Create kro** role 

     Questo apre la console IAM in una nuova scheda con policy di fiducia precompilate. Il ruolo non richiede autorizzazioni IAM aggiuntive poiché kro opera interamente all'interno del tuo cluster.

     Dopo aver creato il ruolo, torna alla console EKS e il ruolo verrà selezionato automaticamente.
**Nota**  
A differenza di ACK e Argo CD, kro non richiede autorizzazioni IAM aggiuntive oltre alla politica di fiducia. kro opera interamente all'interno del cluster e non effettua chiamate API. AWS 

1. Scegli **Create** (Crea).

Inizia il processo di creazione delle funzionalità.

## Verifica che la funzionalità sia attiva
<a name="_verify_the_capability_is_active"></a>

1. Nella scheda **Funzionalità**, visualizza lo stato delle capacità di kro.

1. Attendi che lo stato cambi da `CREATING` a`ACTIVE`.

1. Una volta attiva, la funzionalità è pronta per l'uso.

Per informazioni sullo stato delle funzionalità e sulla risoluzione dei problemi, vedere[Lavorare con le risorse di capacità](working-with-capabilities.md).

## Concedi le autorizzazioni per gestire le risorse Kubernetes
<a name="_grant_permissions_to_manage_kubernetes_resources"></a>

Quando crei una funzionalità kro, viene creato automaticamente un EKS Access Entry con`AmazonEKSKROPolicy`, che consente a kro di gestire e le relative istanze. ResourceGraphDefinitions Tuttavia, per impostazione predefinita non viene concessa alcuna autorizzazione per creare le risorse Kubernetes sottostanti (come Deployments, Services, ecc.) definite nel tuo. ConfigMaps ResourceGraphDefinitions

Questa progettazione intenzionale segue il principio del privilegio minimo: diversi richiedono autorizzazioni diverse. ResourceGraphDefinitions Devi configurare in modo esplicito le autorizzazioni o le esigenze in base alle risorse che gestirai. ResourceGraphDefinitions 

Per iniziare rapidamente, in ambienti di test o sviluppo, usa: `AmazonEKSClusterAdminPolicy`

1. Nella console EKS, accedi alla scheda **Accesso** del cluster.

1. In **Voci di accesso**, trova la voce relativa al tuo ruolo kro capability (avrà il ruolo ARN che hai creato in precedenza).

1. Scegli la voce di accesso per aprirne i dettagli.

1. Nella sezione **Politiche di accesso**, scegli **Associa politica di accesso**.

1. Seleziona `AmazonEKSClusterAdminPolicy` dall'elenco delle politiche.

1. Per **l'ambito di accesso**, seleziona **Cluster**.

1. Selezionare **Associate (Associa)**.

**Importante**  
`AmazonEKSClusterAdminPolicy`Concede ampie autorizzazioni per creare e gestire tutte le risorse Kubernetes, inclusa la possibilità di creare qualsiasi tipo di risorsa in tutti i namespace. Questa funzionalità è utile per lo sviluppo, ma non deve essere utilizzata in produzione POCs . Per la produzione, crea politiche RBAC personalizzate che concedano solo le autorizzazioni necessarie per le ResourceGraphDefinitions risorse specifiche che gestirai. Per indicazioni sulla configurazione delle autorizzazioni con privilegi minimi, consulta e. [Configura le autorizzazioni kro](kro-permissions.md) [Considerazioni sulla sicurezza per EKS Capabilities](capabilities-security.md)

## Verifica che siano disponibili risorse personalizzate
<a name="_verify_custom_resources_are_available"></a>

Dopo che la funzionalità è attiva, verifica che le risorse personalizzate kro siano disponibili nel tuo cluster.

 **Utilizzo della console** 

1. Accedi al tuo cluster nella console Amazon EKS

1. Scegli la scheda **Risorse**

1. Scegli **Estensioni** 

1. Scegliere **CustomResourceDefinitions** 

Dovresti vedere il tipo di `ResourceGraphDefinition` risorsa elencato.

 **Usare kubectl** 

```
kubectl api-resources | grep kro.run
```

Dovresti vedere il tipo di `ResourceGraphDefinition` risorsa elencato.

## Fasi successive
<a name="_next_steps"></a>
+  [concetti kro](kro-concepts.md)- Comprendi i concetti kro e la composizione delle risorse
+  [concetti kro](kro-concepts.md)- Scopri SimpleSchema le espressioni CEL e i modelli di composizione
+  [Lavorare con le risorse di capacità](working-with-capabilities.md)- Gestisci la tua risorsa kro Capability

# Crea una funzionalità kro utilizzando la CLI AWS
<a name="kro-create-cli"></a>

Questo argomento descrive come creare una funzionalità kro (Kube Resource Orchestrator) utilizzando la CLI. AWS 

## Prerequisiti
<a name="_prerequisites"></a>
+  ** AWS CLI**: versione `2.12.3` o successiva. Per verificare la tua versione, `aws --version` esegui. Per ulteriori informazioni, consulta la Guida per l'utente all'[installazione](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) nell'interfaccia a riga di AWS comando.
+  **`kubectl`**— Uno strumento da riga di comando per lavorare con i cluster Kubernetes. Per ulteriori informazioni, consulta [Impostazione di `kubectl` e `eksctl`](install-kubectl.md).

## Fase 1: creazione di un ruolo IAM Capability
<a name="_step_1_create_an_iam_capability_role"></a>

Crea un file di policy di fiducia:

```
cat > kro-trust-policy.json << 'EOF'
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "capabilities.eks.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession"
      ]
    }
  ]
}
EOF
```

Crea il ruolo IAM:

```
aws iam create-role \
  --role-name KROCapabilityRole \
  --assume-role-policy-document file://kro-trust-policy.json
```

**Nota**  
A differenza di ACK e Argo CD, kro non richiede autorizzazioni IAM aggiuntive. kro opera interamente all'interno del cluster e non effettua chiamate API. AWS Il ruolo è necessario solo per stabilire un rapporto di fiducia con il servizio EKS Capabilities.

## Fase 2: Creare la funzionalità kro
<a name="_step_2_create_the_kro_capability"></a>

Crea la risorsa di funzionalità kro sul tuo cluster. Sostituiscilo *region-code* con la AWS regione in cui si trova il cluster (ad esempio`us-west-2`) e *my-cluster* con il nome del cluster.

```
aws eks create-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-kro \
  --type KRO \
  --role-arn arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):role/KROCapabilityRole \
  --delete-propagation-policy RETAIN
```

Il comando viene restituito immediatamente, ma la funzionalità impiega del tempo per diventare attiva poiché EKS crea l'infrastruttura e i componenti di funzionalità richiesti. EKS installerà le Kubernetes Custom Resource Definitions relative a questa funzionalità nel cluster non appena viene creata.

**Nota**  
Se ricevi un errore che indica che il cluster non esiste o non disponi delle autorizzazioni, verifica:  
Il nome del cluster è corretto
La tua AWS CLI è configurata per la regione corretta
Disponi delle autorizzazioni IAM richieste

## Fase 3: Verifica che la funzionalità sia attiva
<a name="_step_3_verify_the_capability_is_active"></a>

Attendi che la funzionalità diventi attiva. Sostituiscilo *region-code* con la AWS regione in cui si trova il cluster e sostituiscilo *my-cluster* con il nome del cluster.

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-kro \
  --query 'capability.status' \
  --output text
```

La funzionalità è pronta quando viene visualizzato lo stato`ACTIVE`.

Puoi anche visualizzare i dettagli completi delle funzionalità:

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-kro
```

## Passaggio 4: concedere le autorizzazioni per gestire le risorse Kubernetes
<a name="_step_4_grant_permissions_to_manage_kubernetes_resources"></a>

Quando crei una funzionalità kro, viene creato automaticamente un EKS Access Entry con`AmazonEKSKROPolicy`, che consente a kro di gestire e le relative istanze. ResourceGraphDefinitions Tuttavia, per impostazione predefinita non viene concessa alcuna autorizzazione per creare le risorse Kubernetes sottostanti (come Deployments, Services, ecc.) definite nel tuo. ConfigMaps ResourceGraphDefinitions

Questa progettazione intenzionale segue il principio del privilegio minimo: diversi richiedono autorizzazioni diverse. ResourceGraphDefinitions Ad esempio: \$1 A ResourceGraphDefinition che crea solo risorse ACK ConfigMaps e Secrets necessita di autorizzazioni diverse rispetto a una che crea distribuzioni e servizi \$1 A ResourceGraphDefinition che crea risorse ACK necessita delle autorizzazioni per quelle risorse personalizzate specifiche \$1 Alcuni potrebbero ResourceGraphDefinitions leggere solo le risorse esistenti senza crearne di nuove

È necessario configurare in modo esplicito le autorizzazioni o le esigenze in base alle risorse che gestirai. ResourceGraphDefinitions 

### Configurazione rapida
<a name="_quick_setup"></a>

Per iniziare rapidamente, in ambienti di test o sviluppo, usa: `AmazonEKSClusterAdminPolicy`

Ottieni il ruolo di capacità ARN:

```
CAPABILITY_ROLE_ARN=$(aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-kro \
  --query 'capability.roleArn' \
  --output text)
```

Associa la politica di amministrazione del cluster:

```
aws eks associate-access-policy \
  --region region-code \
  --cluster-name my-cluster \
  --principal-arn $CAPABILITY_ROLE_ARN \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \
  --access-scope type=cluster
```

**Importante**  
`AmazonEKSClusterAdminPolicy`Concede ampie autorizzazioni per creare e gestire tutte le risorse Kubernetes, inclusa la possibilità di creare qualsiasi tipo di risorsa in tutti i namespace. Questa funzionalità è utile per lo sviluppo, ma non deve essere utilizzata in produzione POCs . Per la produzione, crea politiche RBAC personalizzate che concedano solo le autorizzazioni necessarie per le ResourceGraphDefinitions risorse specifiche che gestirai. Per indicazioni sulla configurazione delle autorizzazioni con privilegi minimi, consulta e. [Configura le autorizzazioni kro](kro-permissions.md) [Considerazioni sulla sicurezza per EKS Capabilities](capabilities-security.md)

## Passaggio 5: Verifica della disponibilità di risorse personalizzate
<a name="_step_5_verify_custom_resources_are_available"></a>

Dopo che la funzionalità è attiva, verifica che le risorse personalizzate kro siano disponibili nel tuo cluster:

```
kubectl api-resources | grep kro.run
```

Dovresti vedere il tipo di `ResourceGraphDefinition` risorsa elencato.

## Fasi successive
<a name="_next_steps"></a>
+  [concetti kro](kro-concepts.md)- Comprendi i concetti kro e la composizione delle risorse
+  [concetti kro](kro-concepts.md)- Scopri SimpleSchema le espressioni CEL e i modelli di composizione
+  [Lavorare con le risorse di capacità](working-with-capabilities.md)- Gestisci la tua risorsa kro Capability

# Crea una funzionalità kro usando eksctl
<a name="kro-create-eksctl"></a>

Questo argomento descrive come creare una funzionalità kro (Kube Resource Orchestrator) usando eksctl.

**Nota**  
I seguenti passaggi richiedono la versione eksctl o successiva. `0.220.0` Per verificare la tua versione, esegui. `eksctl version`

## Fase 1: Creare un ruolo di capacità IAM
<a name="_step_1_create_an_iam_capability_role"></a>

Crea un file di policy di fiducia:

```
cat > kro-trust-policy.json << 'EOF'
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "capabilities.eks.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession"
      ]
    }
  ]
}
EOF
```

Crea il ruolo IAM:

```
aws iam create-role \
  --role-name KROCapabilityRole \
  --assume-role-policy-document file://kro-trust-policy.json
```

**Nota**  
A differenza di ACK e Argo CD, kro non richiede autorizzazioni IAM aggiuntive oltre alla policy di fiducia. kro opera interamente all'interno del cluster e non effettua chiamate API. AWS 

## Fase 2: Creare la funzionalità kro
<a name="_step_2_create_the_kro_capability"></a>

Crea la funzionalità kro usando eksctl. Sostituiscilo *region-code* con la AWS regione in cui si trova il cluster e sostituiscilo *my-cluster* con il nome del cluster.

```
eksctl create capability \
  --region region-code \
  --cluster my-cluster \
  --name my-kro \
  --type KRO \
  --role-arn arn:aws:iam::[.replaceable]111122223333:role/KROCapabilityRole
```

Il comando viene restituito immediatamente, ma la funzionalità impiega del tempo per diventare attiva.

## Fase 3: Verificare che la funzionalità sia attiva
<a name="_step_3_verify_the_capability_is_active"></a>

Verifica lo stato della capacità. Sostituiscilo *region-code* con la AWS regione in cui si trova il cluster e sostituiscilo *my-cluster* con il nome del cluster.

```
eksctl get capability \
  --region region-code \
  --cluster my-cluster \
  --name my-kro
```

La funzionalità è pronta quando viene visualizzato lo stato`ACTIVE`.

## Passaggio 4: concedere le autorizzazioni per gestire le risorse Kubernetes
<a name="_step_4_grant_permissions_to_manage_kubernetes_resources"></a>

Per impostazione predefinita, kro può solo creare e gestire le relative istanze. ResourceGraphDefinitions Per consentire a kro di creare e gestire le risorse Kubernetes sottostanti definite nel tuo ResourceGraphDefinitions, associa la policy di accesso alla voce di `AmazonEKSClusterAdminPolicy` accesso della funzionalità.

Ottieni il ruolo di capacità ARN:

```
CAPABILITY_ROLE_ARN=$(aws eks describe-capability \
  --region region-code \
  --cluster my-cluster \
  --name my-kro \
  --query 'capability.roleArn' \
  --output text)
```

Associa la politica di amministrazione del cluster:

```
aws eks associate-access-policy \
  --region region-code \
  --cluster my-cluster \
  --principal-arn $CAPABILITY_ROLE_ARN \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \
  --access-scope type=cluster
```

**Importante**  
`AmazonEKSClusterAdminPolicy`Concede ampie autorizzazioni per creare e gestire tutte le risorse Kubernetes e ha lo scopo di semplificare l'avvio. Per l'uso in produzione, crea politiche RBAC più restrittive che concedano solo le autorizzazioni necessarie per le risorse specifiche che gestirai. ResourceGraphDefinitions Per indicazioni sulla configurazione delle autorizzazioni con privilegi minimi, consulta e. [Configura le autorizzazioni kro](kro-permissions.md) [Considerazioni sulla sicurezza per EKS Capabilities](capabilities-security.md)

## Passaggio 5: Verifica della disponibilità di risorse personalizzate
<a name="_step_5_verify_custom_resources_are_available"></a>

Dopo che la funzionalità è attiva, verifica che le risorse personalizzate kro siano disponibili nel tuo cluster:

```
kubectl api-resources | grep kro.run
```

Dovresti vedere il tipo di `ResourceGraphDefinition` risorsa elencato.

## Fasi successive
<a name="_next_steps"></a>
+  [concetti kro](kro-concepts.md)- Comprendi i concetti kro e la composizione delle risorse
+  [concetti kro](kro-concepts.md)- Scopri SimpleSchema le espressioni CEL e i modelli di composizione
+  [Lavorare con le risorse di capacità](working-with-capabilities.md)- Gestisci la tua risorsa kro Capability

# concetti kro
<a name="kro-concepts"></a>

kro consente ai team della piattaforma di creare Kubernetes personalizzati APIs che compongono più risorse in astrazioni di livello superiore. Questo argomento illustra un esempio pratico, quindi spiega i concetti fondamentali da comprendere quando si lavora con EKS Capability for kro.

## Guida introduttiva a kro
<a name="_getting_started_with_kro"></a>

Dopo aver creato la funzionalità kro (vedi[Crea una funzionalità kro](create-kro-capability.md)), puoi iniziare a crearne un APIs utilizzo personalizzato ResourceGraphDefinitions nel tuo cluster.

Ecco un esempio completo che crea una semplice astrazione di un'applicazione web:

```
apiVersion: kro.run/v1alpha1
kind: ResourceGraphDefinition
metadata:
  name: webapplication
spec:
  schema:
    apiVersion: v1alpha1
    kind: WebApplication
    group: kro.run
    spec:
      name: string | required=true
      image: string | default="nginx:latest"
      replicas: integer | default=3
  resources:
  - id: deployment
    template:
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: ${schema.spec.name}
      spec:
        replicas: ${schema.spec.replicas}
        selector:
          matchLabels:
            app: ${schema.spec.name}
        template:
          metadata:
            labels:
              app: ${schema.spec.name}
          spec:
            containers:
            - name: app
              image: ${schema.spec.image}
              ports:
              - containerPort: 80
  - id: service
    template:
      apiVersion: v1
      kind: Service
      metadata:
        name: ${schema.spec.name}
      spec:
        selector:
          app: ${schema.spec.name}
        ports:
        - protocol: TCP
          port: 80
          targetPort: 80
```

Dopo averlo applicato ResourceGraphDefinition, i team applicativi possono creare applicazioni Web utilizzando la vostra API semplificata:

```
apiVersion: kro.run/v1alpha1
kind: WebApplication
metadata:
  name: my-app
spec:
  name: my-app
  replicas: 5
```

kro crea automaticamente Deployment and Service con la configurazione appropriata. Poiché `image` non è specificato, utilizza il valore predefinito `nginx:latest` dello schema.

## Concetti principali
<a name="_core_concepts"></a>

**Importante**  
kro esegue la convalida ResourceGraphDefinitions al momento della creazione, non in fase di esecuzione. Quando crei un RGD, kro convalida la sintassi CEL, controlla il tipo delle espressioni rispetto agli schemi Kubernetes effettivi, verifica l'esistenza dei campi e rileva le dipendenze circolari. Ciò significa che gli errori vengono rilevati immediatamente quando si crea l'RGD, prima che qualsiasi istanza venga distribuita.

### ResourceGraphDefinition
<a name="_resourcegraphdefinition"></a>

A ResourceGraphDefinition (RGD) definisce un'API Kubernetes personalizzata specificando:
+  **Schema**: la struttura dell'API che utilizza il SimpleSchema formato (nomi di campo, tipi, impostazioni predefinite, convalida)
+  **Risorse**: modelli per il Kubernetes sottostante o risorse da creare AWS 
+  **Dipendenze**: come le risorse si relazionano tra loro (rilevate automaticamente dai riferimenti di campo)

Quando applichi un RGD, kro registra una nuova Custom Resource Definition (CRD) nel tuo cluster. I team applicativi possono quindi creare istanze della vostra API personalizzata e kro si occupa della creazione e della gestione di tutte le risorse sottostanti.

Per ulteriori informazioni, consulta [ResourceGraphDefinition Panoramica nella documentazione](https://kro.run/docs/concepts/rgd/overview/) di kro.

### SimpleSchema formato
<a name="_simpleschema_format"></a>

SimpleSchema fornisce un modo semplificato per definire gli schemi API senza richiedere conoscenze su OpenAPI:

```
schema:
  apiVersion: v1alpha1
  kind: Database
  spec:
    name: string | required=true description="Database name"
    size: string | default="small" enum=small,medium,large
    replicas: integer | default=1 minimum=1 maximum=5
```

SimpleSchema supporta`string`, `integer``boolean`, e `number` tipi con vincoli come`required`,,/`default`, `minimum` e. `maximum` `enum` `pattern`

Per ulteriori informazioni, consulta la documentazione [SimpleSchema](https://kro.run/docs/concepts/rgd/schema/)di kro.

### espressioni CEL
<a name="_cel_expressions"></a>

kro utilizza il Common Expression Language (CEL) per fare riferimento ai valori in modo dinamico e aggiungere logica condizionale. Le espressioni CEL sono racchiuse `${` `}` e possono essere utilizzate in due modi:

 **Espressioni autonome** - L'intero valore del campo è una singola espressione:

```
spec:
  replicas: ${schema.spec.replicaCount}  # Expression returns integer
  labels: ${schema.spec.labelMap}        # Expression returns object
```

Il risultato dell'espressione sostituisce l'intero valore del campo e deve corrispondere al tipo previsto del campo.

 **Modelli di stringhe**: una o più espressioni incorporate in una stringa:

```
metadata:
  name: "${schema.spec.prefix}-${schema.spec.name}"  # Multiple expressions
  annotation: "Created by ${schema.spec.owner}"      # Single expression in string
```

Tutte le espressioni nei modelli di stringhe devono restituire stringhe. Usa `string()` per convertire altri tipi:`"replicas-${string(schema.spec.count)}"`.

 **Riferimenti sui campi**: accedi ai valori delle specifiche dell'istanza utilizzando`schema.spec`:

```
template:
  metadata:
    name: ${schema.spec.name}-deployment
    namespace: ${schema.metadata.namespace}  # Can also reference metadata
  spec:
    replicas: ${schema.spec.replicas}
```

 **Accesso facoltativo ai campi**: da utilizzare `?` per campi che potrebbero non esistere:

```
# For ConfigMaps or Secrets with unknown structure
value: ${configmap.data.?DATABASE_URL}

# For optional status fields
ready: ${deployment.status.?readyReplicas > 0}
```

Se il campo non esiste, l'espressione restituisce `null` invece di fallire.

 **Risorse condizionali**: includi le risorse solo quando sono soddisfatte le condizioni:

```
resources:
- id: ingress
  includeWhen:
    - ${schema.spec.enableIngress == true}
  template:
    # ... ingress configuration
```

Il `includeWhen` campo accetta un elenco di espressioni booleane. Tutte le condizioni devono essere vere affinché la risorsa possa essere creata. Attualmente, `includeWhen` può fare riferimento solo `schema.spec` ai campi.

 **Trasformazioni** - Trasforma i valori utilizzando operatori e funzioni ternari:

```
template:
  spec:
    resources:
      requests:
        memory: ${schema.spec.size == "small" ? "512Mi" : "2Gi"}

    # String concatenation
    image: ${schema.spec.registry + "/" + schema.spec.imageName}

    # Type conversion
    port: ${string(schema.spec.portNumber)}
```

 **Riferimenti tra risorse** - Valori di riferimento provenienti da altre risorse:

```
resources:
- id: bucket
  template:
    apiVersion: s3.services.k8s.aws/v1alpha1
    kind: Bucket
    spec:
      name: ${schema.spec.name}-data

- id: configmap
  template:
    apiVersion: v1
    kind: ConfigMap
    data:
      BUCKET_NAME: ${bucket.spec.name}
      BUCKET_ARN: ${bucket.status.ackResourceMetadata.arn}
```

Quando si fa riferimento a un'altra risorsa in un'espressione CEL, si crea automaticamente una dipendenza. kro assicura che la risorsa referenziata venga creata per prima.

Per ulteriori informazioni, consulta [CEL Expressions](https://kro.run/docs/concepts/rgd/cel-expressions/) nella documentazione di kro.

### Dipendenze tra le risorse
<a name="_resource_dependencies"></a>

kro deduce automaticamente le dipendenze dalle espressioni CEL: non si specifica l'ordine, si descrivono le relazioni. Quando una risorsa fa riferimento a un'altra utilizzando un'espressione CEL, kro crea una dipendenza e determina l'ordine di creazione corretto.

```
resources:
- id: bucket
  template:
    apiVersion: s3.services.k8s.aws/v1alpha1
    kind: Bucket
    spec:
      name: ${schema.spec.name}-data

- id: notification
  template:
    apiVersion: s3.services.k8s.aws/v1alpha1
    kind: BucketNotification
    spec:
      bucket: ${bucket.spec.name}  # Creates dependency: notification depends on bucket
```

L'espressione `${bucket.spec.name}` crea una dipendenza. kro crea un grafico aciclico diretto (DAG) di tutte le risorse e le relative dipendenze, quindi calcola un ordine topologico per la creazione.

 **Ordine di creazione: le risorse vengono create in ordine topologico** (prima le dipendenze).

 **Creazione parallela**: le risorse senza dipendenze vengono create contemporaneamente.

 **Ordine di eliminazione**: le risorse vengono eliminate in ordine topologico inverso (prima le persone dipendenti).

 **Dipendenze circolari**: non consentite: kro rifiuta con dipendenze circolari durante la convalida. ResourceGraphDefinitions 

È possibile visualizzare l'ordine di creazione calcolato:

```
kubectl get resourcegraphdefinition my-rgd -o jsonpath='{.status.topologicalOrder}'
```

Per maggiori informazioni, vedi [Inferenza del grafico nella documentazione](https://kro.run/docs/concepts/rgd/dependencies-ordering/) di kro.

## Composizione con ACK
<a name="_composing_with_ack"></a>

kro funziona perfettamente con EKS Capability for ACK per comporre AWS risorse con risorse Kubernetes:

```
resources:
# Create {aws} S3 bucket with ACK
- id: bucket
  template:
    apiVersion: s3.services.k8s.aws/v1alpha1
    kind: Bucket
    spec:
      name: ${schema.spec.name}-files

# Inject bucket details into Kubernetes ConfigMap
- id: config
  template:
    apiVersion: v1
    kind: ConfigMap
    data:
      BUCKET_NAME: ${bucket.spec.name}
      BUCKET_ARN: ${bucket.status.ackResourceMetadata.arn}

# Use ConfigMap in application deployment
- id: deployment
  template:
    apiVersion: apps/v1
    kind: Deployment
    spec:
      template:
        spec:
          containers:
          - name: app
            envFrom:
            - configMapRef:
                name: ${config.metadata.name}
```

Questo modello consente di creare AWS risorse, estrarne i dettagli (ARNs URLs, endpoint) e inserirle nella configurazione dell'applicazione, il tutto gestito come una singola unità.

Per ulteriori schemi di composizione ed esempi avanzati, consulta. [considerazioni kro per EKS](kro-considerations.md)

## Fasi successive
<a name="_next_steps"></a>
+  [considerazioni kro per EKS](kro-considerations.md)- Scopri i pattern specifici di EKS, l'RBAC e l'integrazione con ACK e Argo CD
+  [kro Documentation - Documentazione](https://kro.run/docs/overview) kro completa che include espressioni CEL avanzate, modelli di convalida e risoluzione dei problemi

# Configura le autorizzazioni kro
<a name="kro-permissions"></a>

A differenza di ACK e Argo CD, kro non richiede autorizzazioni IAM. kro opera interamente all'interno del cluster Kubernetes e non effettua chiamate API. AWS Controlla l'accesso alle risorse kro utilizzando Kubernetes RBAC standard.

## Come funzionano le autorizzazioni con kro
<a name="_how_permissions_work_with_kro"></a>

kro utilizza due tipi di risorse Kubernetes con ambiti diversi:

 **ResourceGraphDefinitions**: risorse con ambito cluster che definiscono la personalizzazione. APIs In genere gestite dai team della piattaforma che progettano e gestiscono gli standard organizzativi.

 **Istanze: risorse** personalizzate con ambito namespace create da. ResourceGraphDefinitions Può essere creato da team di applicazioni con autorizzazioni RBAC appropriate.

Per impostazione predefinita, la funzionalità kro dispone delle autorizzazioni per gestire le relative istanze tramite ResourceGraphDefinitions la politica di accesso. `AmazonEKSKROPolicy` Tuttavia, kro richiede autorizzazioni aggiuntive per creare e gestire le risorse Kubernetes sottostanti definite nell'utente ResourceGraphDefinitions (come Deployments, Services o risorse ACK). È necessario concedere queste autorizzazioni tramite le politiche di accesso o Kubernetes RBAC. [Per i dettagli sulla concessione di queste autorizzazioni, consulta kro arbitrary resource permissions.](capabilities-security.md#kro-resource-permissions)

## Autorizzazioni del team della piattaforma
<a name="_platform_team_permissions"></a>

I team della piattaforma necessitano delle autorizzazioni per creare e gestire. ResourceGraphDefinitions

 **Esempio ClusterRole per i team della piattaforma**:

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: kro-platform-admin
rules:
- apiGroups: ["kro.run"]
  resources: ["resourcegraphdefinitions"]
  verbs: ["*"]
```

 **Associati ai membri del team della piattaforma**:

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: platform-team-kro-admin
subjects:
- kind: Group
  name: platform-team
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: kro-platform-admin
  apiGroup: rbac.authorization.k8s.io
```

## Autorizzazioni del team dell'applicazione
<a name="_application_team_permissions"></a>

I team applicativi necessitano delle autorizzazioni per creare istanze di risorse personalizzate nei propri namespace.

 **Esempio** di ruolo per i team delle applicazioni:

```
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: kro-app-developer
  namespace: my-app
rules:
- apiGroups: ["kro.run"]
  resources: ["webapps", "databases"]
  verbs: ["create", "get", "list", "update", "delete", "patch"]
```

 **Associarsi ai membri del team applicativo**:

```
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: app-team-kro-developer
  namespace: my-app
subjects:
- kind: Group
  name: app-team
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: kro-app-developer
  apiGroup: rbac.authorization.k8s.io
```

**Nota**  
Il gruppo di API nel ruolo (`kro.run`in questo esempio) deve corrispondere a quello `apiVersion` definito nello schema ResourceGraphDefinition dell'utente.

## Accesso in sola lettura
<a name="_read_only_access"></a>

Concedi l'accesso in sola lettura alla visualizzazione ResourceGraphDefinitions e alle istanze senza autorizzazioni di modifica.

 ** ClusterRoleSola** lettura:

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: kro-viewer
rules:
- apiGroups: ["kro.run"]
  resources: ["resourcegraphdefinitions"]
  verbs: ["get", "list", "watch"]
```

 Ruolo di **sola lettura per** le istanze:

```
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: kro-instance-viewer
  namespace: my-app
rules:
- apiGroups: ["kro.run"]
  resources: ["webapps", "databases"]
  verbs: ["get", "list", "watch"]
```

## Accesso a più namespace
<a name="_multi_namespace_access"></a>

Concedi ai team delle applicazioni l'accesso a più namespace utilizzando with. ClusterRoles RoleBindings

 **ClusterRole per** l'accesso a più namespace:

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: kro-multi-namespace-developer
rules:
- apiGroups: ["kro.run"]
  resources: ["webapps"]
  verbs: ["create", "get", "list", "update", "delete"]
```

 **Associa a namespace** specifici:

```
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: app-team-dev-access
  namespace: development
subjects:
- kind: Group
  name: app-team
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: kro-multi-namespace-developer
  apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: app-team-staging-access
  namespace: staging
subjects:
- kind: Group
  name: app-team
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: kro-multi-namespace-developer
  apiGroup: rbac.authorization.k8s.io
```

## Best practice
<a name="_best_practices"></a>

 **Principio del privilegio minimo**: concedi solo le autorizzazioni minime necessarie per le responsabilità di ogni team.

 **Usa i gruppi anziché i singoli utenti**: associa i ruoli ai gruppi anziché ai singoli utenti per una gestione più semplice.

 **Aspetti distinti relativi alla piattaforma e all'applicazione:** i team della piattaforma gestiscono le istanze ResourceGraphDefinitions, i team delle applicazioni gestiscono le istanze.

 **Isolamento dello spazio dei nomi**: utilizza i namespace per isolare team o ambienti diversi, con RBAC che controlla l'accesso a ciascun namespace.

 Accesso in **sola lettura per il controllo: Fornisci l'accesso in sola lettura ai team di sicurezza e conformità per scopi di controllo.**

## Fasi successive
<a name="_next_steps"></a>
+  [concetti kro](kro-concepts.md)- Comprendi i concetti kro e la composizione delle risorse
+  [concetti kro](kro-concepts.md)- Comprendi SimpleSchema, le espressioni CEL e i modelli di composizione
+  [Considerazioni sulla sicurezza per EKS Capabilities](capabilities-security.md)- Esamina le migliori pratiche di sicurezza per quanto riguarda le funzionalità

# considerazioni kro per EKS
<a name="kro-considerations"></a>

Questo argomento tratta importanti considerazioni sull'utilizzo di EKS Capability per kro, tra cui quando utilizzare la composizione delle risorse, i modelli RBAC e l'integrazione con altre funzionalità EKS.

## Quando usare kro
<a name="_when_to_use_kro"></a>

kro è progettato per creare modelli di infrastruttura riutilizzabili e personalizzati APIs che semplificano la gestione delle risorse complesse.

 **Usa kro quando hai bisogno** di:
+ Crea piattaforme self-service semplificate per i team applicativi APIs 
+ Standardizza i modelli di infrastruttura tra i team (database, backup e monitoraggio)
+ Gestisci le dipendenze delle risorse e trasferisci i valori tra le risorse
+ Crea astrazioni personalizzate che nascondono la complessità dell'implementazione
+ Componi più risorse ACK in blocchi costitutivi di livello superiore
+ Abilita i GitOps flussi di lavoro per stack di infrastrutture complessi

 **Non usare kro quando:**
+ Gestione di risorse semplici e autonome (usa direttamente le risorse ACK o Kubernetes)
+ È necessaria una logica di runtime dinamica (kro è dichiarativo, non imperativo)
+ Le risorse non hanno dipendenze o configurazioni condivise

kro eccelle nella creazione di «percorsi asfaltati», schemi ponderati e riutilizzabili che consentono ai team di implementare correttamente infrastrutture complesse.

## Schemi RBAC
<a name="_rbac_patterns"></a>

kro consente la separazione delle preoccupazioni tra i team della piattaforma che creano le istanze ResourceGraphDefinitions e i team delle applicazioni che creano le istanze.

### Responsabilità del team di piattaforma
<a name="_platform_team_responsibilities"></a>

I team della piattaforma creano e gestiscono ResourceGraphDefinitions (RGDs) che definiscono la personalizzazione APIs.

 **Autorizzazioni necessarie**:
+ Crea, aggiorna, elimina ResourceGraphDefinitions
+ Gestisci i tipi di risorse sottostanti (implementazioni, servizi, risorse ACK)
+ Accesso a tutti i namespace in cui verranno utilizzati RGDs 

 **Esempio ClusterRole per** il team della piattaforma:

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: platform-kro-admin
rules:
- apiGroups: ["kro.run"]
  resources: ["resourcegraphdefinitions"]
  verbs: ["*"]
- apiGroups: ["*"]
  resources: ["*"]
  verbs: ["get", "list", "watch"]
```

Per una configurazione RBAC dettagliata, vedere. [Configura le autorizzazioni kro](kro-permissions.md)

### Responsabilità del team di applicazione
<a name="_application_team_responsibilities"></a>

I team applicativi creano istanze di risorse personalizzate definite da RGDs senza la necessità di comprenderne la complessità sottostante.

 **Autorizzazioni necessarie:**
+ Creare, aggiornare ed eliminare istanze di risorse personalizzate
+ Accesso in lettura al loro namespace
+ Nessun accesso alle risorse sottostanti o RGDs

 **Vantaggi**:
+ I team utilizzano strumenti semplici e di alto livello APIs
+ I team della piattaforma controllano i dettagli dell'implementazione
+ Riduzione del rischio di errori di configurazione
+ Onboarding più rapido per i nuovi membri del team

## Integrazione con altre funzionalità EKS
<a name="_integration_with_other_eks_capabilities"></a>

### Composizione di risorse ACK
<a name="_composing_ack_resources"></a>

kro è particolarmente potente se combinato con ACK per creare modelli di infrastruttura.

 **Schemi comuni**:
+  **Applicazione con archiviazione**: bucket S3\$1coda SQS\$1configurazione delle notifiche
+  **Stack di database**: istanza RDS \$1 gruppo di parametri \$1 gruppo di sicurezza \$1 segreto Secrets Manager
+  **Rete**: VPC \$1 sottoreti \$1 tabelle di routing \$1 gruppi di sicurezza \$1 gateway NAT
+  Elaborazione **con storage**: EC2 istanza \$1 volumi EBS \$1 profilo di istanza IAM

kro gestisce l'ordine delle dipendenze, passa i valori tra le risorse (come le stringhe di connessione) ARNs e gestisce l'intero ciclo di vita come una singola unità.

Per esempi di composizione di risorse ACK, vedi. [Concetti ACK](ack-concepts.md)

### GitOps con Argo CD
<a name="_gitops_with_argo_cd"></a>

Usa il CD EKS Capability for Argo per distribuire entrambe le RGDs istanze dai repository Git.

 Organizzazione **del** repository:
+  **Repo della piattaforma**: contiene contenuti ResourceGraphDefinitions gestiti dal team della piattaforma
+  **Repo di applicazioni**: contengono istanze di risorse personalizzate gestite dai team delle app
+  **Repo condiviso**: contiene sia le istanze che le istanze per le RGDs organizzazioni più piccole

 **Considerazioni:**
+ Implementa RGDs prima delle istanze (le onde di sincronizzazione di Argo CD possono esserti utili)
+ Utilizzate progetti Argo CD separati per i team di piattaforme e applicazioni
+ Il team della piattaforma controlla l'accesso al repository RGD
+ I team applicativi hanno accesso in sola lettura alle definizioni RGD

Per ulteriori informazioni su Argo CD, vedere. [Lavorare con Argo CD](working-with-argocd.md)

## Organizzando ResourceGraphDefinitions
<a name="_organizing_resourcegraphdefinitions"></a>

 RGDs Organizza per scopo, complessità e proprietà.

 **Per scopo**:
+  **Infrastruttura**: stack di database, rete, archiviazione
+  **Applicazione**: app Web APIs, lavori in batch
+  **Piattaforma**: servizi condivisi, monitoraggio, registrazione

 **Per complessità**:
+  **Semplice**: 2-3 risorse con dipendenze minime
+  **Moderato**: 5-10 risorse con alcune dipendenze
+  **Complesso: più** di 10 risorse con dipendenze complesse

 Convenzioni di **denominazione:**
+ Usa nomi descrittivi:, `webapp-with-database` `s3-notification-queue` 
+ Includi la versione nel nome per annullare le modifiche: `webapp-v2` 
+ Usa prefissi coerenti RGDs per: `platform- ` `app-` 

 **Strategia del namespace**:
+ RGDs sono con ambito cluster (non con namespace)
+ Le istanze hanno uno spazio dei nomi
+ Usa i selettori dello spazio dei nomi per controllare dove è possibile creare le istanze RGDs 

## Controllo delle versioni e aggiornamenti
<a name="_versioning_and_updates"></a>

Piano per l'evoluzione di RGD e la migrazione delle istanze.

 **Aggiornamenti RGD:**
+  **Modifiche continue**: aggiorna RGD in atto (aggiungi campi opzionali, nuove risorse con IncludeWhen)
+  **Ultime modifiche**: crea un nuovo RGD con un nome diverso (webapp-v2)
+  **Deprecazione: contrassegna il vecchio con annotazioni**, comunica la cronologia della migrazione RGDs 

 **Migrazione delle istanze:**
+ Crea nuove istanze con RGD aggiornato
+ Convalida il corretto funzionamento delle nuove istanze
+ Elimina le vecchie istanze
+ kro gestisce automaticamente gli aggiornamenti delle risorse sottostanti

 **Migliori pratiche**:
+ Verifica innanzitutto le modifiche RGD in ambienti non di produzione
+ Usa il controllo semantico delle versioni nei nomi RGD per le modifiche principali
+ Modifiche di interruzione dei documenti e percorsi di migrazione
+ Fornisci esempi di migrazione per i team applicativi

## Convalida e test
<a name="_validation_and_testing"></a>

Convalida RGDs prima dell'implementazione in produzione.

 Strategie di **convalida**:
+  **Convalida dello schema: kro convalida** automaticamente la struttura RGD
+  Istanze **dry-run: crea istanze** di test nei namespace di sviluppo
+  **Test di integrazione**: verifica che le risorse composte funzionino insieme
+  **Applicazione delle politiche**: utilizza i controller di ammissione per far rispettare gli standard organizzativi

 **Problemi comuni da** testare:
+ Dipendenze e ordinamento delle risorse
+ Scambio di valore tra risorse (espressioni CEL)
+ Inclusione condizionale delle risorse (includeWhen)
+ Propagazione dello stato dalle risorse sottostanti
+ Autorizzazioni RBAC, ad esempio la creazione

## Documentazione upstream
<a name="_upstream_documentation"></a>

Per informazioni dettagliate sull'uso di kro:
+  [Guida introduttiva a kro - Creazione](https://kro.run/docs/guides/getting-started) ResourceGraphDefinitions
+  [Espressioni CEL - Scrittura di espressioni](https://kro.run/docs/concepts/cel) CEL
+  [kro Guides](https://kro.run/docs/guides/) - Modelli di composizione avanzati
+  [Risoluzione dei problemi - Risoluzione](https://kro.run/docs/troubleshooting) dei problemi e debug

## Fasi successive
<a name="_next_steps"></a>
+  [Configura le autorizzazioni kro](kro-permissions.md)- Configura RBAC per i team di piattaforme e applicazioni
+  [concetti kro](kro-concepts.md)- Comprendi i concetti kro e il ciclo di vita delle risorse
+  [Risolvi i problemi relativi alle funzionalità kro](kro-troubleshooting.md)- Risolvi i problemi di kro
+  [Concetti ACK](ack-concepts.md)- Scopri le risorse ACK per la composizione
+  [Lavorare con Argo CD](working-with-argocd.md)- Distribuzione RGDs e istanze con GitOps

# Risolvi i problemi relativi alle funzionalità kro
<a name="kro-troubleshooting"></a>

Questo argomento fornisce linee guida per la risoluzione dei problemi di EKS Capability for kro, compresi i controlli dello stato delle capacità, le autorizzazioni RBAC, gli errori di espressione CEL e i problemi di composizione delle risorse.

**Nota**  
Le funzionalità EKS sono completamente gestite ed eseguite all'esterno del cluster. Non hai accesso ai log dei controller o al `kro-system` namespace. La risoluzione dei problemi si concentra sullo stato delle funzionalità, sulla configurazione RBAC e sullo stato delle risorse.

## Le funzionalità sono ATTIVE ma ResourceGraphDefinitions non funzionano
<a name="_capability_is_active_but_resourcegraphdefinitions_arent_working"></a>

Se la tua funzionalità kro mostra `ACTIVE` lo stato ma ResourceGraphDefinitions non stai creando risorse sottostanti, controlla lo stato della capacità, le autorizzazioni RBAC e lo stato delle risorse.

 **Verifica lo stato delle capacità:**

È possibile visualizzare i problemi relativi allo stato e allo stato delle funzionalità nella console EKS o utilizzando la AWS CLI.

 **Console**:

1. Apri la console Amazon EKS a https://console.aws.amazon.com/eks/ home\$1/clusters.

1. Seleziona il nome del cluster.

1. Scegli la scheda **Osservabilità**.

1. Scegli **Monitora cluster**.

1. Scegli la scheda **Capacità** per visualizzare lo stato e lo stato di tutte le funzionalità.

 ** AWS CLI:**

```
# View capability status and health
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-kro

# Look for issues in the health section
```

 Cause comuni:
+  Autorizzazioni **RBAC mancanti: kro non dispone delle autorizzazioni** per creare le risorse Kubernetes sottostanti
+  **Espressioni CEL** non valide: errori di sintassi in ResourceGraphDefinition
+  **Dipendenze dalle risorse**: risorse dipendenti non pronte
+  **Convalida dello schema: l'**istanza non soddisfa i requisiti dello schema RGD

 **Verifica le autorizzazioni RBAC:**

```
# Check if capability has cluster admin policy
kubectl get accessentry -A | grep kro
```

Se la funzionalità non dispone delle autorizzazioni richieste, associala alla voce di accesso della `AmazonEKSClusterAdminPolicy` funzionalità kro o crea politiche RBAC più restrittive per l'uso in produzione. Per informazioni dettagliate, vedi [Configura le autorizzazioni kro](kro-permissions.md).

 **Verifica lo stato: ResourceGraphDefinition **

```
# List all RGDs
kubectl get resourcegraphdefinition

# Describe specific RGD
kubectl describe resourcegraphdefinition my-rgd

# Check for validation errors
kubectl get resourcegraphdefinition my-rgd -o jsonpath='{.status.conditions}'
```

ResourceGraphDefinitions hanno tre condizioni di stato chiave:
+  `ResourceGraphAccepted`- Se l'RGD ha superato la convalida (sintassi CEL, controllo del tipo, esistenza del campo)
+  `KindReady`- Se il CRD per l'API personalizzata è stato generato e registrato
+  `ControllerReady`- Se kro sta monitorando attivamente le istanze della tua API personalizzata

In caso `ResourceGraphAccepted` affermativo`False`, controllate il messaggio relativo alla condizione per eventuali errori di convalida, ad esempio campi sconosciuti, mancate corrispondenze tra i tipi o dipendenze circolari.

## Istanze create ma le risorse sottostanti non vengono visualizzate
<a name="_instances_created_but_underlying_resources_not_appearing"></a>

Se esistono istanze di risorse personalizzate ma le risorse Kubernetes sottostanti (Deployments, Services ConfigMaps) non vengono create, verifica che kro disponga delle autorizzazioni e verifica la presenza di errori di composizione.

 Controlla lo stato dell'**istanza**:

```
# Describe the instance (replace with your custom resource kind and name)
kubectl describe custom-kind
         my-instance

# View instance events
kubectl get events --field-selector involvedObject.name=my-instance

# Check instance status conditions
kubectl get custom-kind
         my-instance -o jsonpath='{.status.conditions}'

# Check instance state
kubectl get custom-kind
         my-instance -o jsonpath='{.status.state}'
```

Le istanze hanno un `state` campo che mostra lo stato di alto livello:
+  `ACTIVE`- L'istanza viene eseguita correttamente
+  `IN_PROGRESS`- L'istanza è in fase di elaborazione o riconciliazione
+  `FAILED`- Impossibile riconciliare l'istanza
+  `DELETING`- L'istanza viene eliminata
+  `ERROR`- Si è verificato un errore durante l'elaborazione

Le istanze hanno anche quattro condizioni di stato:
+  `InstanceManaged`- I finalizzatori e le etichette sono impostati correttamente
+  `GraphResolved`- Grafico di runtime creato e risorse risolte
+  `ResourcesReady`- Tutte le risorse create e pronte
+  `Ready`- Stato generale dell'istanza (lo diventa solo `True` quando tutte le condizioni secondarie lo sono`True`)

Concentrati sulla `Ready` condizione per determinare lo stato dell'istanza. In caso `Ready` `False` affermativo, controlla le condizioni secondarie per identificare quale fase non è riuscita.

 **Verifica le autorizzazioni RBAC:**

La funzionalità kro richiede le autorizzazioni per creare le risorse Kubernetes sottostanti definite nel tuo. ResourceGraphDefinitions

```
# Check if the capability has the AmazonEKSClusterAdminPolicy
kubectl get accessentry -A | grep kro
```

Se mancano le autorizzazioni, associale alla voce di accesso della `AmazonEKSClusterAdminPolicy` funzionalità kro o crea politiche RBAC più restrittive per l'uso in produzione. Per informazioni dettagliate, vedi [Configura le autorizzazioni kro](kro-permissions.md).

## Errori di espressione CEL
<a name="_cel_expression_errors"></a>

Gli errori delle espressioni CEL vengono rilevati al momento ResourceGraphDefinition della creazione, non al momento della creazione delle istanze. kro convalida tutta la sintassi CEL, controlla i tipi delle espressioni rispetto agli schemi Kubernetes e verifica l'esistenza dei campi quando crei l'RGD.

 **Errori comuni** di convalida CEL:
+  Riferimento al **campo non definito: riferimento** a un campo che non esiste nello schema o nella risorsa
+  **Mancata corrispondenza del tipo**: l'espressione restituisce un tipo errato (ad esempio, stringa in cui è previsto un numero intero)
+  **Sintassi non valida**: parentesi, virgolette o operatori mancanti nell'espressione CEL
+  **Tipo di risorsa sconosciuto**: riferimento a un CRD che non esiste nel cluster

 **Verifica lo stato di convalida RGD:**

```
# Check if RGD was accepted
kubectl get resourcegraphdefinition my-rgd -o jsonpath='{.status.conditions[?(@.type=="ResourceGraphAccepted")]}'

# View detailed validation errors
kubectl describe resourcegraphdefinition my-rgd
```

In caso `ResourceGraphAccepted` `False` affermativo, il messaggio di condizione contiene l'errore di convalida.

 **Esempi di espressioni CEL valide**:

```
# Reference schema field
${schema.spec.appName}

# Conditional expression
${schema.spec.replicas > 1}

# String template (expressions must return strings)
name: "${schema.spec.appName}-service"

# Standalone expression (can be any type)
replicas: ${schema.spec.replicaCount}

# Resource reference
${deployment.status.availableReplicas}

# Optional field access (returns null if field doesn't exist)
${configmap.data.?DATABASE_URL}
```

## Le dipendenze delle risorse non si risolvono
<a name="_resource_dependencies_not_resolving"></a>

kro deduce automaticamente le dipendenze dalle espressioni CEL e crea le risorse nell'ordine corretto. Se le risorse non vengono create come previsto, controlla l'ordine di dipendenza e la disponibilità delle risorse.

 **Visualizza l'ordine di creazione calcolato**:

```
# See the order kro will create resources
kubectl get resourcegraphdefinition my-rgd -o jsonpath='{.status.topologicalOrder}'
```

Questo mostra l'ordine calcolato in base ai riferimenti delle espressioni CEL tra le risorse.

 **Verifica la disponibilità delle risorse**:

```
# View instance status to see which resources are ready
kubectl get custom-kind
         my-instance -o jsonpath='{.status}'

# Check specific resource status
kubectl get deployment my-deployment -o jsonpath='{.status.conditions}'
```

 **Verifica le condizioni ReadyWhen (se utilizzate)**:

Il campo `readyWhen` è facoltativo. Se non specificato, le risorse sono considerate pronte immediatamente dopo la creazione. Se hai definito `readyWhen` delle condizioni, verifica che controllino correttamente la disponibilità delle risorse:

```
resources:
  - id: deployment
    readyWhen:
      - ${deployment.status.availableReplicas == deployment.spec.replicas}
```

 **Controlla gli eventi relativi alle risorse**:

```
# View events for the underlying resources
kubectl get events -n namespace --sort-by='.lastTimestamp'
```

## Errori di convalida dello schema
<a name="_schema_validation_failures"></a>

Se le istanze non vengono create a causa di errori di convalida dello schema, verifica che l'istanza soddisfi i requisiti dello schema RGD.

 **Controlla gli errori** di convalida:

```
# Attempt to create instance and view error
kubectl apply -f instance.yaml

# View existing instance validation status
kubectl describe custom-kind
         my-instance | grep -A 5 "Validation"
```

 Problemi di **convalida comuni**:
+  **Campi obbligatori mancanti**: l'istanza non fornisce tutti i campi dello schema obbligatori
+  **Mancata corrispondenza del tipo**: fornisce una stringa dove è previsto un numero intero
+  Valore **enum non valido: utilizzo di un valore** non presente nell'elenco consentito
+  **Mancata corrispondenza del modello**: la stringa non corrisponde al modello regex

 **Rivedi lo schema RGD**:

```
# View the schema definition
kubectl get resourcegraphdefinition my-rgd -o jsonpath='{.spec.schema}'
```

Assicurati che l'istanza fornisca tutti i campi obbligatori con i tipi corretti.

## Fasi successive
<a name="_next_steps"></a>
+  [considerazioni kro per EKS](kro-considerations.md)- considerazioni e best practice su kro
+  [Configura le autorizzazioni kro](kro-permissions.md)- Configura RBAC per i team di piattaforme e applicazioni
+  [concetti kro](kro-concepts.md)- Comprendi i concetti kro e il ciclo di vita delle risorse
+  [Risoluzione dei problemi delle funzionalità EKS](capabilities-troubleshooting.md)- Guida generale alla risoluzione dei problemi relativi alle funzionalità

# Confronto tra EKS Capability for kro e kro autogestito
<a name="kro-comparison"></a>

EKS Capability for kro offre le stesse funzionalità di kro autogestito, ma con vantaggi operativi significativi. Per un confronto generale tra EKS Capabilities e soluzioni autogestite, vedi. [Considerazioni sulle funzionalità EKS](capabilities-considerations.md)

EKS Capability for kro utilizza gli stessi controller kro upstream ed è completamente compatibile con upstream kro. ResourceGraphDefinitions, Le espressioni CEL e la composizione delle risorse funzionano in modo identico. Per la documentazione completa e gli esempi di kro, consulta la documentazione di [kro](https://kro.run/docs/overview).

## Percorso di migrazione
<a name="_migration_path"></a>

È possibile migrare da kro autogestito a funzionalità gestita senza tempi di inattività.

**Importante**  
Prima della migrazione, assicurati che il tuo controller kro autogestito utilizzi la stessa versione di EKS Capability for kro. Verifica la versione con funzionalità nella console EKS o in uso`aws eks describe-capability`, quindi aggiorna la tua installazione autogestita in modo che corrisponda. In questo modo si evitano problemi di compatibilità durante la migrazione.

1. Aggiorna il tuo controller kro autogestito da utilizzare per i contratti di locazione elettorali `kube-system` per i leader:

   ```
   helm upgrade --install kro \
     oci://ghcr.io/awslabs/kro/kro-chart \
     --namespace kro \
     --set leaderElection.namespace=kube-system
   ```

   Questo sposta il contratto di locazione del controllore`kube-system`, permettendo alla capacità gestita di coordinarsi con esso.

1. Crea la funzionalità kro sul tuo cluster (vedi) [Crea una funzionalità kro](create-kro-capability.md)

1. La funzionalità gestita riconosce le istanze esistenti ResourceGraphDefinitions e prende il sopravvento sulla riconciliazione

1. Ridimensiona gradualmente o rimuovi le implementazioni kro autogestite:

   ```
   helm uninstall kro --namespace kro
   ```

Questo approccio consente a entrambi i controller di coesistere in sicurezza durante la migrazione. La funzionalità gestita adotta ResourceGraphDefinitions automaticamente istanze precedentemente gestite da kro autogestito, garantendo una riconciliazione continua senza conflitti.

## Fasi successive
<a name="_next_steps"></a>
+  [Crea una funzionalità kro](create-kro-capability.md)- Crea una risorsa con funzionalità kro
+  [concetti kro](kro-concepts.md)- Comprendi i concetti kro e la composizione delle risorse

# Risoluzione dei problemi delle funzionalità EKS
<a name="capabilities-troubleshooting"></a>

Questo argomento fornisce indicazioni generali sulla risoluzione dei problemi per EKS Capabilities, inclusi controlli dello stato delle funzionalità, problemi comuni e collegamenti alla risoluzione di problemi specifici delle funzionalità.

**Nota**  
Le funzionalità EKS sono completamente gestite e vengono eseguite all'esterno del cluster. Non hai accesso ai log dei controller o ai namespace dei controller. La risoluzione dei problemi si concentra sullo stato delle funzionalità, sullo stato delle risorse e sulla configurazione.

## Un approccio generale alla risoluzione dei problemi
<a name="_general_troubleshooting_approach"></a>

Per la risoluzione dei problemi relativi a EKS Capabilities, seguite questo approccio generale:

1.  **Verifica dello stato delle funzionalità**: utilizza `aws eks describe-capability` per visualizzare lo stato delle funzionalità e i problemi di integrità

1.  **Verifica lo stato delle risorse**: controlla le risorse Kubernetes (CRDs) che hai creato per verificare le condizioni e gli eventi relativi allo stato

1.  **Rivedi le autorizzazioni IAM**: assicurati che il ruolo Capability disponga delle autorizzazioni necessarie

1.  **Verifica la configurazione**: verifica che la configurazione specifica della funzionalità sia corretta

## Verifica lo stato delle funzionalità
<a name="_check_capability_health"></a>

Tutte le funzionalità EKS forniscono informazioni sanitarie tramite la console EKS e l'`describe-capability`API.

 **Console**:

1. Apri la console Amazon EKS a https://console.aws.amazon.com/eks/ home\$1/clusters.

1. Seleziona il nome del cluster.

1. Scegli la scheda **Osservabilità**.

1. Scegli **Monitora cluster**.

1. Scegli la scheda **Capacità** per visualizzare lo stato e lo stato di tutte le funzionalità.

La scheda Capacità mostra:
+ Nome e tipo di funzionalità
+ Stato attuale
+ Problemi di salute, con descrizione

 ** AWS CLI:**

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-capability-name
```

La risposta include:
+  **status: stato** attuale della capacità (`CREATING`,`ACTIVE`,`UPDATING`, `DELETING``CREATE_FAILED`,`UPDATE_FAILED`)
+  **salute**: informazioni sanitarie, inclusi eventuali problemi rilevati dalla funzionalità

## Stati di funzionalità comuni
<a name="_common_capability_statuses"></a>

 **CREAZIONE: La** funzionalità è in fase di configurazione.

 **ATTIVO**: La funzionalità è attiva e pronta all'uso. Se le risorse non funzionano come previsto, controlla lo stato delle risorse e le autorizzazioni IAM.

 **AGGIORNAMENTO**: vengono applicate le modifiche alla configurazione. Attendi che lo stato ritorni a`ACTIVE`.

 **CREATE\$1FAILED o UPDATE\$1FAILED****: durante l'installazione o l'aggiornamento si è verificato un errore**. Consulta la sezione dedicata alla salute per i dettagli. Cause comuni:
+ La politica di fiducia dei ruoli IAM è errata o mancante
+ Il ruolo IAM non esiste o non è accessibile
+ Problemi di accesso al cluster
+ Parametri di configurazione non validi

## Verifica lo stato delle risorse Kubernetes
<a name="_verify_kubernetes_resource_status"></a>

EKS Capabilities crea e gestisce Kubernetes Custom Resource Definitions () nel tuo cluster. CRDs Durante la risoluzione dei problemi, controlla lo stato delle risorse che hai creato:

```
# List resources of a specific type
kubectl get resource-kind -A

# Describe a specific resource to see conditions and events
kubectl describe resource-kind
         resource-name -n namespace

# View resource status conditions
kubectl get resource-kind
         resource-name -n namespace -o jsonpath='{.status.conditions}'

# View events related to the resource
kubectl get events --field-selector involvedObject.name=resource-name -n namespace
```

Le condizioni sullo stato delle risorse forniscono informazioni su:
+ Se la risorsa è pronta
+ Eventuali errori riscontrati
+ Stato attuale di riconciliazione

## Verifica le autorizzazioni IAM e l'accesso al cluster
<a name="_review_iam_permissions_and_cluster_access"></a>

Molti problemi di funzionalità derivano da problemi di autorizzazione IAM o dalla mancata configurazione dell'accesso al cluster. Verifica sia le autorizzazioni di Capability Role che le voci di accesso al cluster.

### Controlla le autorizzazioni dei ruoli IAM
<a name="_check_iam_role_permissions"></a>

Verifica che il ruolo Capability disponga delle autorizzazioni necessarie:

```
# List attached managed policies
aws iam list-attached-role-policies --role-name my-capability-role

# List inline policies
aws iam list-role-policies --role-name my-capability-role

# Get specific policy details
aws iam get-role-policy --role-name my-capability-role --policy-name policy-name

# View the role's trust policy
aws iam get-role --role-name my-capability-role --query 'Role.AssumeRolePolicyDocument'
```

La politica di fiducia deve consentire al responsabile del `capabilities.eks.amazonaws.com` servizio:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "capabilities.eks.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

### Controlla le voci di accesso e le politiche di accesso di EKS
<a name="_check_eks_access_entries_and_access_policies"></a>

Tutte le funzionalità richiedono voci di accesso e politiche di accesso EKS adeguate nel cluster in cui operano.

 **Verifica che esista Access Entry**:

```
aws eks list-access-entries \
  --cluster-name my-cluster \
  --region region-code
```

Cerca il Capability Role ARN nell'elenco. Se manca, la funzionalità non può accedere al cluster.

 **Controlla le politiche di accesso allegate alla voce**:

```
aws eks list-associated-access-policies \
  --cluster-name my-cluster \
  --principal-arn arn:aws:iam::111122223333:role/my-capability-role \
  --region region-code
```

Tutte le funzionalità richiedono politiche di accesso appropriate:
+  **ACK**: necessita delle autorizzazioni per creare e gestire le risorse Kubernetes
+  **kro**: necessita delle autorizzazioni per creare e gestire le risorse Kubernetes
+  **Argo CD**: richiede le autorizzazioni per creare e gestire le applicazioni e richiede le voci di accesso su cluster di destinazione remoti per le implementazioni multi-cluster

 **Per le implementazioni multicluster di Argo CD:**

Se effettui la distribuzione su cluster remoti, verifica che il Capability Role abbia un Access Entry su ogni cluster di destinazione:

```
# Check Access Entry on target cluster
aws eks describe-access-entry \
  --cluster-name target-cluster \
  --principal-arn arn:aws:iam::111122223333:role/argocd-capability-role \
  --region region-code
```

Se l'Access Entry non è presente in un cluster di destinazione, Argo CD non può distribuire applicazioni su di esso. [Registra i cluster di destinazione](argocd-register-clusters.md)Per i dettagli di configurazione, vedere.

## Risoluzione dei problemi specifici per funzionalità
<a name="_capability_specific_troubleshooting"></a>

Per una guida dettagliata alla risoluzione dei problemi specifica per ogni tipo di funzionalità:
+  [Risolvi i problemi relativi alle funzionalità ACK](ack-troubleshooting.md)- Risolvi i problemi relativi alla creazione di risorse ACK, alle autorizzazioni IAM e all'accesso tra account
+  [Risolvi i problemi relativi alle funzionalità di Argo CD](argocd-troubleshooting.md)- Risolvi i problemi di sincronizzazione delle applicazioni, autenticazione del repository e implementazioni multi-cluster
+  [Risolvi i problemi relativi alle funzionalità kro](kro-troubleshooting.md)- Risoluzione dei problemi ResourceGraphDefinitions, delle espressioni CEL e delle autorizzazioni RBAC

## Problemi comuni a tutte le funzionalità
<a name="_common_issues_across_all_capabilities"></a>

### Capacità bloccata nello stato CREATING
<a name="_capability_stuck_in_creating_state"></a>

Se una funzionalità rimane attiva `CREATING` più a lungo del previsto:

1. Verifica lo stato delle funzionalità per problemi specifici nella console (**Osservabilità** > **Monitor cluster** > scheda **Capacità**) o utilizzando la AWS CLI:

   ```
   aws eks describe-capability \
     --region region-code \
     --cluster-name my-cluster \
     --capability-name my-capability-name \
     --query 'capability.health'
   ```

1. Verifica che il ruolo IAM esista e abbia la politica di fiducia corretta

1. Assicurati che il tuo cluster sia accessibile e integro

1. Verifica la presenza di eventuali problemi a livello di cluster che potrebbero impedire la configurazione delle funzionalità

### Risorse non create o aggiornate
<a name="_resources_not_being_created_or_updated"></a>

Se la funzionalità è `ACTIVE` presente ma le risorse non vengono create o aggiornate:

1. Controlla lo stato della risorsa per verificare eventuali condizioni di errore

1. Verifica le autorizzazioni IAM per i AWS servizi specifici (ACK) o i repository (Argo CD)

1. Controlla le autorizzazioni RBAC per la creazione di risorse sottostanti (kro)

1. Rivedi le specifiche delle risorse per verificare eventuali errori di convalida

### Lo stato delle capacità mostra problemi
<a name="_capability_health_shows_issues"></a>

Se `describe-capability` presenta problemi di salute:

1. Leggi attentamente le descrizioni dei problemi: spesso indicano il problema specifico

1. Risolvi la causa principale (autorizzazioni IAM, errori di configurazione, ecc.)

1. La funzionalità verrà ripristinata automaticamente una volta risolto il problema

## Fasi successive
<a name="_next_steps"></a>
+  [Lavorare con le risorse di capacità](working-with-capabilities.md)- Gestisci le risorse funzionali
+  [Risolvi i problemi relativi alle funzionalità ACK](ack-troubleshooting.md)- Risoluzione dei problemi specifici per ACK
+  [Risolvi i problemi relativi alle funzionalità di Argo CD](argocd-troubleshooting.md)- Risoluzione dei problemi specifici di Argo CD
+  [Risolvi i problemi relativi alle funzionalità kro](kro-troubleshooting.md)- risoluzione dei problemi specifici per kro
+  [Considerazioni sulla sicurezza per EKS Capabilities](capabilities-security.md)- Le migliori pratiche di sicurezza per quanto riguarda le funzionalità