

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Simplifiez le déploiement d'applications multi-locataires Amazon EKS en utilisant Flux
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux"></a>

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

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

De nombreuses entreprises proposant des produits et services sont des secteurs réglementés par les données qui doivent maintenir des barrières entre leurs fonctions commerciales internes. Ce modèle décrit comment vous pouvez utiliser la fonctionnalité multi-tenant d'Amazon Elastic Kubernetes Service (Amazon EKS) pour créer une plate-forme de données qui assure une isolation logique et physique entre les locataires ou les utilisateurs qui partagent un seul cluster Amazon EKS. Le modèle fournit une isolation grâce aux approches suivantes :
+ Isolation de l'espace de noms Kubernetes
+ Contrôle d’accès basé sur les rôles (RBAC)
+ Stratégies réseau
+ Quotas de ressources
+ Gestion des identités et des accès AWS Rôles (IAM) pour les comptes de service (IRSA)

En outre, cette solution utilise Flux pour maintenir la configuration du locataire immuable lorsque vous déployez des applications. Vous pouvez déployer vos applications mutualisées en spécifiant le référentiel client qui contient le `kustomization.yaml` fichier Flux dans votre configuration.

Ce modèle implémente les éléments suivants :
+ Un AWS CodeCommit référentiel, AWS CodeBuild des projets et un AWS CodePipeline pipeline, créés en déployant manuellement des scripts Terraform.
+ Composants réseau et informatiques nécessaires à l'hébergement des locataires. Ils sont créés par CodePipeline et CodeBuild en utilisant Terraform.
+ Les espaces de noms des locataires, les politiques réseau et les quotas de ressources, qui sont configurés via un diagramme de Helm.
+ Applications appartenant à différents locataires, déployées à l'aide de Flux.

Nous vous recommandons de planifier et de créer soigneusement votre propre architecture pour la mutualisation en fonction de vos exigences uniques et de vos considérations de sécurité. Ce modèle constitue un point de départ pour votre mise en œuvre.

## Conditions préalables et limitations
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS
+ AWS Command Line Interface [(AWS CLI) version 2.11.4 ou ultérieure, [installée et configurée](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ [Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) version 0.12 ou ultérieure installée sur votre machine locale
+ [Terraform AWS Provider](https://registry.terraform.io/providers/hashicorp/aws/latest) version 3.0.0 ou ultérieure
+ [Kubernetes Provider](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs) version 2.10 ou ultérieure
+ [Helm Provider](https://registry.terraform.io/providers/hashicorp/helm/latest/docs) version 2.8.0 ou ultérieure
+ [Kubectl Provider](https://registry.terraform.io/providers/gavinbunney/kubectl/latest/docs) version 1.14 ou ultérieure

**Limites**
+ **Dépendance à l'égard des déploiements manuels de Terraform :** La configuration initiale du flux de travail, y compris la création de CodeCommit référentiels, de CodeBuild projets et de CodePipeline pipelines, repose sur des déploiements manuels de Terraform. Cela introduit une limite potentielle en termes d'automatisation et d'évolutivité, car cela nécessite une intervention manuelle pour les modifications de l'infrastructure.
+ **CodeCommit dépendance aux référentiels :** le flux de travail repose sur CodeCommit les référentiels en tant que solution de gestion du code source et est étroitement associé Services AWSà.

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

**Architectures cibles**

Ce modèle déploie trois modules pour créer le pipeline, le réseau et l'infrastructure de calcul d'une plate-forme de données, comme illustré dans les diagrammes suivants.

*Architecture du pipeline :*

![\[Infrastructure de pipeline pour l'architecture multi-locataires Amazon EKS\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/97b700a7-74b6-4f9d-b53a-76de42409a8e/images/76a4a23d-4275-427a-ae36-51c9a3803128.png)


*Architecture réseau :*

![\[Infrastructure réseau pour l'architecture multi-locataires Amazon EKS\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/97b700a7-74b6-4f9d-b53a-76de42409a8e/images/e542249a-19a3-4c99-b6f5-fdf80fee4edf.png)


*Architecture de calcul :*

![\[Infrastructure de calcul pour l'architecture multi-locataires Amazon EKS\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/97b700a7-74b6-4f9d-b53a-76de42409a8e/images/91bd1ca8-17f0-433c-8600-4c8e6c474e31.png)


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

**Services AWS**
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)est un service de génération entièrement géré qui vous aide à compiler le code source, à exécuter des tests unitaires et à produire des artefacts prêts à être déployés.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html)est un service de contrôle de version qui vous permet de stocker et de gérer de manière privée des référentiels Git, sans avoir à gérer votre propre système de contrôle de source.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)vous permet de modéliser et de configurer rapidement les différentes étapes d'une version logicielle et d'automatiser les étapes nécessaires à la publication continue des modifications logicielles.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) vous permet d'exécuter AWS Kubernetes sans avoir à installer ou à gérer votre propre plan de contrôle ou vos propres nœuds Kubernetes.
+ [AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/what-is-transit-gateway.html)est un hub central qui connecte des clouds privés virtuels (VPCs) et des réseaux sur site.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) vous aide à lancer AWS des ressources dans un réseau virtuel que vous avez défini. Ce réseau virtuel ressemble à un réseau traditionnel que vous pourriez exécuter dans votre propre centre de données et présente l'avantage d'utiliser l'infrastructure évolutive d' AWS.

**Autres outils**
+ Les politiques réseau de [Cilium prennent en charge les politiques réseau](https://cilium.io/use-cases/network-policy/#:~:text=Cilium%20implements%20Kubernetes%20Network%20Policies,%2C%20Kafka%2C%20gRPC%2C%20etc.) Kubernetes L3 et L4. Ils peuvent être étendus avec des politiques L7 afin de fournir une sécurité au niveau de l'API pour HTTP, Kafka et gRPC, ainsi que pour d'autres protocoles similaires.
+ [Flux](https://fluxcd.io/) est un outil de diffusion continue (CD) basé sur Git qui automatise les déploiements d'applications sur Kubernetes.
+ [Helm](https://helm.sh/docs/) est un gestionnaire de packages open source pour Kubernetes qui vous aide à installer et à gérer des applications sur votre cluster Kubernetes.
+ [Terraform](https://www.terraform.io/) est un outil d'infrastructure en tant que code (IaC) HashiCorp qui vous aide à créer et à gérer des ressources cloud et sur site.

**Référentiel de code**

Le code de ce modèle est disponible dans le référentiel GitHub [EKS Multi-Tenancy Terraform Solution](https://github.com/aws-samples/aws-eks-multitenancy-deployment).

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

Pour les directives et les meilleures pratiques relatives à l'utilisation de cette implémentation, consultez les rubriques suivantes :
+ [Bonnes pratiques en matière de location multiple Amazon EKS](https://aws.github.io/aws-eks-best-practices/security/docs/multitenancy/)
+ [Documentation sur les flux](https://fluxcd.io/flux/get-started/)

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

### Créez des pipelines pour les étapes de construction, de test et de déploiement de Terraform
<a name="create-pipelines-for-terraform-build-test-and-deploy-stages"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Clonez le référentiel du projet. | Clonez le référentiel GitHub [EKS Multi-Tenancy Terraform Solution](https://github.com/aws-samples/aws-eks-multitenancy-deployment) en exécutant la commande suivante dans une fenêtre de terminal :<pre>git clone https://github.com/aws-samples/aws-eks-multitenancy-deployment.git</pre> | AWS DevOps | 
| Démarrez le compartiment Terraform S3 et Amazon DynamoDB. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Mettez à jour les `locals.tf` fichiers `run.sh` et. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Déployez le module de pipeline. | Pour créer des ressources de pipeline, exécutez manuellement les commandes Terraform suivantes. Il n'existe aucune orchestration pour exécuter ces commandes automatiquement.<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 | 

### Création de l'infrastructure réseau
<a name="create-the-network-infrastructure"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Démarrez le pipeline. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html)Après cette première exécution, le pipeline démarre automatiquement chaque fois que vous validez une modification dans la branche principale du CodeCommit référentiel.Le pipeline comprend les [étapes](https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts.html#concepts-stages) suivantes :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Validez les ressources créées via le module réseau. | Vérifiez que les AWS ressources suivantes ont été créées après le déploiement réussi du pipeline :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 

### Création de l'infrastructure informatique
<a name="create-the-compute-infrastructure"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Mise `locals.tf` à jour pour permettre l'accès du CodeBuild projet au VPC. | Pour déployer les modules complémentaires pour le cluster privé Amazon EKS, le CodeBuild projet doit être attaché au VPC Amazon EKS.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Mettez à jour les `buildspec` fichiers pour créer le module de calcul. | Dans le `templates` dossier, dans tous les fichiers `buildspec` YAML, définissez la valeur de la `TF_MODULE_TO_BUILD` variable de `network` à `compute` :<pre>TF_MODULE_TO_BUILD: "compute"</pre> | AWS DevOps | 
| Mettez à jour le `values` fichier du diagramme Helm de gestion des locataires. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Validez les ressources de calcul. | Après avoir mis à jour les fichiers au cours des étapes précédentes, CodePipeline démarre automatiquement. Vérifiez qu'il a créé les AWS ressources suivantes pour l'infrastructure de calcul :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 

### Vérifiez la gestion des locataires et les autres ressources
<a name="check-tenant-management-and-other-resources"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Validez les ressources de gestion des locataires dans Kubernetes. | Exécutez les commandes suivantes pour vérifier que les ressources de gestion des locataires ont été créées avec succès à l'aide de Helm.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Vérifiez les déploiements d'applications clientes. | Exécutez les commandes suivantes pour vérifier que les applications clientes ont été déployées.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) |  | 

## Résolution des problèmes
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Vous recevez un message d'erreur similaire au suivant :`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.` | Pour résoudre le problème, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | 

## Ressources connexes
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-resources"></a>
+ [Blueprints Amazon EKS pour Terraform](https://github.com/aws-ia/terraform-aws-eks-blueprints)
+ [Guides des meilleures pratiques Amazon EKS, section sur l'hébergement mutualisé](https://aws.github.io/aws-eks-best-practices/security/docs/multitenancy/)
+ [Site web de Flux](https://fluxcd.io/)
+ [Site web de Helm](https://helm.sh/)

## Informations supplémentaires
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-additional"></a>

Voici un exemple de structure de référentiel pour le déploiement d'applications clientes :

```
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
```