

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

# Semplifica la distribuzione di applicazioni multi-tenant Amazon EKS utilizzando Flux
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux"></a>

*Nadeem Rahaman, Aditya Ambati, Aniket Dekate e Shrikant Patil, Amazon Web Services*

## Riepilogo
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-summary"></a>

Molte aziende che offrono prodotti e servizi sono settori regolamentati dai dati, tenuti a mantenere le barriere relative ai dati tra le loro funzioni aziendali interne. Questo modello descrive come utilizzare la funzionalità multi-tenancy di Amazon Elastic Kubernetes Service (Amazon EKS) per creare una piattaforma dati che consenta l'isolamento logico e fisico tra tenant o utenti che condividono un singolo cluster Amazon EKS. Il modello fornisce l'isolamento attraverso i seguenti approcci:
+ Isolamento dello spazio dei nomi Kubernetes
+ Controllo degli accessi basato sui ruoli (RBAC)
+ Policy di rete
+ Quote delle risorse
+ AWS Identity and Access Management ruoli (IAM) per gli account di servizio (IRSA)

Inoltre, questa soluzione utilizza Flux per mantenere immutabile la configurazione del tenant durante la distribuzione delle applicazioni. È possibile distribuire le applicazioni tenant specificando il repository tenant che contiene il file Flux nella configurazione. `kustomization.yaml`

Questo modello implementa quanto segue:
+ Un AWS CodeCommit repository, AWS CodeBuild progetti e una AWS CodePipeline pipeline, creati distribuendo manualmente gli script Terraform.
+ Componenti di rete e di calcolo necessari per ospitare i tenant. Questi vengono creati tramite CodePipeline e CodeBuild utilizzando Terraform.
+ Namespace dei tenant, politiche di rete e quote di risorse, configurati tramite un grafico Helm.
+ Applicazioni che appartengono a tenant diversi, distribuite utilizzando Flux.

Ti consigliamo di pianificare e creare attentamente la tua architettura per la multi-tenancy in base ai tuoi requisiti unici e alle tue considerazioni di sicurezza. Questo modello fornisce un punto di partenza per l'implementazione.

## Prerequisiti e limitazioni
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-prereqs"></a>

**Prerequisiti**
+ Un attivo Account AWS
+ AWS Command Line Interface [(AWS CLI) versione 2.11.4 o successiva, [installata](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) e configurata](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ [Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) versione 0.12 o successiva installata sul computer locale
+ [Terraform AWS Provider](https://registry.terraform.io/providers/hashicorp/aws/latest) versione 3.0.0 o successiva
+ [Kubernetes Provider versione 2.10 o successiva](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs)
+ [Helm Provider versione 2.8.0](https://registry.terraform.io/providers/hashicorp/helm/latest/docs) o successiva
+ [Kubectl](https://registry.terraform.io/providers/gavinbunney/kubectl/latest/docs) Provider versione 1.14 o successiva

**Limitazioni**
+ **Dipendenza dalle distribuzioni manuali di Terraform:** la configurazione iniziale del flusso di lavoro, inclusa la creazione di CodeCommit repository, CodeBuild progetti e pipeline, si basa sulle implementazioni manuali di Terraform. CodePipeline Ciò introduce una potenziale limitazione in termini di automazione e scalabilità, poiché richiede un intervento manuale per le modifiche all'infrastruttura.
+ **CodeCommit dipendenza dal repository:** il flusso di lavoro si basa sui CodeCommit repository come soluzione di gestione del codice sorgente ed è strettamente associato a. Servizi AWS

## Architecture
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-architecture"></a>

**Architetture di destinazione**

Questo modello implementa tre moduli per creare la pipeline, la rete e l'infrastruttura di calcolo per una piattaforma dati, come illustrato nei diagrammi seguenti.

*Architettura della pipeline:*

![\[Infrastruttura di pipeline per l'architettura multi-tenant di Amazon EKS\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/97b700a7-74b6-4f9d-b53a-76de42409a8e/images/76a4a23d-4275-427a-ae36-51c9a3803128.png)


*Architettura di rete:*

![\[Infrastruttura di rete per l'architettura multi-tenant di Amazon EKS\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/97b700a7-74b6-4f9d-b53a-76de42409a8e/images/e542249a-19a3-4c99-b6f5-fdf80fee4edf.png)


*Architettura di calcolo:*

![\[Infrastruttura di elaborazione per l'architettura multi-tenant di Amazon EKS\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/97b700a7-74b6-4f9d-b53a-76de42409a8e/images/91bd1ca8-17f0-433c-8600-4c8e6c474e31.png)


## Tools (Strumenti)
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-tools"></a>

**Servizi AWS**
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)è un servizio di compilazione completamente gestito che ti aiuta a compilare codice sorgente, eseguire test unitari e produrre artefatti pronti per la distribuzione.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html)è un servizio di controllo delle versioni che consente di archiviare e gestire in modo privato gli archivi Git, senza dover gestire il proprio sistema di controllo del codice sorgente.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)ti aiuta a modellare e configurare rapidamente le diverse fasi di una versione del software e ad automatizzare i passaggi necessari per rilasciare continuamente le modifiche al software.
+ [Amazon Elastic Kubernetes Service (Amazon EKS) ti aiuta a eseguire Kubernetes](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) su AWS Kubernetes senza dover installare o gestire il tuo piano di controllo o i tuoi nodi Kubernetes.
+ [AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/what-is-transit-gateway.html)è un hub centrale che collega cloud privati virtuali () e reti locali. VPCs
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) ti aiuta a lanciare AWS risorse in una rete virtuale che hai definito. Questa rete virtuale è simile a una comune rete da gestire all'interno del proprio data center, ma con i vantaggi dell'infrastruttura scalabile di AWS.

**Altri strumenti**
+ Le [politiche di rete Cilium supportano le politiche di rete](https://cilium.io/use-cases/network-policy/#:~:text=Cilium%20implements%20Kubernetes%20Network%20Policies,%2C%20Kafka%2C%20gRPC%2C%20etc.) Kubernetes L3 e L4. Possono essere estesi con policy L7 per fornire sicurezza a livello di API per HTTP, Kafka e gRPC e altri protocolli simili.
+ [Flux](https://fluxcd.io/) è uno strumento di distribuzione continua (CD) basato su Git che automatizza le implementazioni delle applicazioni su Kubernetes.
+ [Helm](https://helm.sh/docs/) è un gestore di pacchetti open source per Kubernetes che ti aiuta a installare e gestire le applicazioni sul tuo cluster Kubernetes.
+ [Terraform](https://www.terraform.io/) è uno strumento di infrastruttura come codice (IaC) HashiCorp che ti aiuta a creare e gestire risorse cloud e locali.

**Archivio di codici**

Il codice per questo pattern è disponibile nel repository GitHub [EKS Multi-Tenancy Terraform](https://github.com/aws-samples/aws-eks-multitenancy-deployment) Solution.

## Best practice
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-best-practices"></a>

Per le linee guida e le migliori pratiche per l'utilizzo di questa implementazione, consulta quanto segue:
+ [Best practice per la multi-tenancy di Amazon EKS](https://aws.github.io/aws-eks-best-practices/security/docs/multitenancy/)
+ [Documentazione Flux](https://fluxcd.io/flux/get-started/)

## Epiche
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-epics"></a>

### Crea pipeline per le fasi di costruzione, test e distribuzione di Terraform
<a name="create-pipelines-for-terraform-build-test-and-deploy-stages"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clona il repository del progetto. | Clona il repository GitHub [EKS Multi-Tenancy Terraform Solution](https://github.com/aws-samples/aws-eks-multitenancy-deployment) eseguendo il seguente comando in una finestra di terminale:<pre>git clone https://github.com/aws-samples/aws-eks-multitenancy-deployment.git</pre> | AWS DevOps | 
| Avvia il bucket Terraform S3 e Amazon DynamoDB. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Aggiorna i `locals.tf` file `run.sh` and. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Implementa il modulo pipeline. | Per creare risorse di pipeline, esegui manualmente i seguenti comandi Terraform. Non esiste alcuna orchestrazione per l'esecuzione automatica di questi comandi.<pre>./run.sh -m pipeline -e demo -r <AWS_REGION> -t init<br />./run.sh -m pipeline -e demo -r <AWS_REGION> -t plan<br />./run.sh -m pipeline -e demo -r <AWS_REGION> -t apply</pre> | AWS DevOps | 

### Crea l'infrastruttura di rete
<a name="create-the-network-infrastructure"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Avvia la pipeline. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html)Dopo questa prima esecuzione, la pipeline si avvia automaticamente ogni volta che esegui una modifica al ramo principale del CodeCommit repository.[La pipeline include le seguenti fasi:](https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts.html#concepts-stages)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Convalida le risorse create tramite il modulo di rete. | Verifica che le seguenti AWS risorse siano state create dopo la corretta implementazione della pipeline:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 

### Crea l'infrastruttura di elaborazione
<a name="create-the-compute-infrastructure"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Aggiorna `locals.tf` per consentire l'accesso del CodeBuild progetto al VPC. | Per distribuire i componenti aggiuntivi per il cluster privato Amazon EKS, il CodeBuild progetto deve essere collegato al VPC Amazon EKS.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Aggiorna i `buildspec` file per creare il modulo di calcolo. | Nella `templates` cartella, in tutti i file `buildspec` YAML, imposta il valore della `TF_MODULE_TO_BUILD` variabile da a: `network` `compute`<pre>TF_MODULE_TO_BUILD: "compute"</pre> | AWS DevOps | 
| Aggiorna il `values` file per il diagramma Helm di gestione dei tenant. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Convalida le risorse di calcolo. | Dopo aver aggiornato i file nei passaggi precedenti, si CodePipeline avvia automaticamente. Verifica che abbia creato le seguenti AWS risorse per l'infrastruttura di elaborazione:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 

### Controlla la gestione dei tenant e altre risorse
<a name="check-tenant-management-and-other-resources"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Convalida le risorse di gestione dei tenant in Kubernetes. | Esegui i seguenti comandi per verificare che le risorse di gestione dei tenant siano state create correttamente con l'aiuto di Helm.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Verifica le distribuzioni delle applicazioni tenant. | Esegui i seguenti comandi per verificare che le applicazioni tenant siano state distribuite.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) |  | 

## risoluzione dei problemi
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Viene visualizzato un messaggio di errore simile al seguente:`Failed to checkout and determine revision: unable to clone unknown error: You have successfully authenticated over SSH. You can use Git to interact with AWS CodeCommit.` | Segui questi passaggi per risolvere il problema:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | 

## Risorse correlate
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-resources"></a>
+ [Progetti Amazon EKS per Terraform](https://github.com/aws-ia/terraform-aws-eks-blueprints)
+ [Guide alle best practice di Amazon EKS, sezione Multi-tenancy](https://aws.github.io/aws-eks-best-practices/security/docs/multitenancy/)
+ [Sito web Flux](https://fluxcd.io/)
+ [Sito web Helm](https://helm.sh/)

## Informazioni aggiuntive
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-additional"></a>

Ecco un esempio di struttura di repository per la distribuzione di applicazioni tenant:

```
applications
sample_tenant_app
├── README.md
├── base
│   ├── configmap.yaml
│   ├── deployment.yaml
│   ├── ingress.yaml
│   ├── kustomization.yaml
│   └── service.yaml
└── overlays
    ├── tenant-1
    │   ├── configmap.yaml
    │   ├── deployment.yaml
    │   └── kustomization.yaml
    └── tenant-2
        ├── configmap.yaml
        └── kustomization.yaml
```