

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.

# Migrer les contrôleurs d'entrée NGINX lors de l'activation du mode automatique Amazon EKS
<a name="migrate-nginx-ingress-controller-eks-auto-mode"></a>

*Olawale Olaleye et Shamanth Devagari, Amazon Web Services*

## Résumé
<a name="migrate-nginx-ingress-controller-eks-auto-mode-summary"></a>

[Le mode automatique EKS](https://docs.aws.amazon.com/eks/latest/userguide/automode.html) pour Amazon Elastic Kubernetes Service (Amazon EKS) peut réduire la charge opérationnelle liée à l'exécution de vos charges de travail sur des clusters Kubernetes. Ce mode AWS permet également de configurer et de gérer l'infrastructure en votre nom. Lorsque vous activez le mode automatique EKS sur un cluster existant, vous devez planifier soigneusement la migration des configurations du contrôleur d'[entrée NGINX](https://docs.nginx.com/nginx-ingress-controller/overview/about/). Cela est dû au fait que le transfert direct d'équilibreurs de charge réseau n'est pas possible.

Vous pouvez utiliser une stratégie de blue/green déploiement pour migrer une instance de NGINX Ingress Controller lorsque vous activez le mode automatique EKS dans un cluster Amazon EKS existant.

## Conditions préalables et limitations
<a name="migrate-nginx-ingress-controller-eks-auto-mode-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS
+ Un [cluster Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html) exécutant Kubernetes version 1.29 ou ultérieure
+ Extensions Amazon EKS exécutant des [versions minimales](https://docs.aws.amazon.com/eks/latest/userguide/auto-enable-existing.html#auto-addons-required)
+ Dernière version de [kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html#kubectl-install-update)
+ Une instance de [NGINX Ingress](https://kubernetes.github.io/ingress-nginx/deploy/#aws) Controller existante
+ (Facultatif) Une [zone hébergée](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-working-with.html) dans Amazon Route 53 pour le transfert de trafic basé sur le DNS

## Architecture
<a name="migrate-nginx-ingress-controller-eks-auto-mode-architecture"></a>

Un *déploiement bleu/vert* est une stratégie de déploiement dans laquelle vous créez deux environnements distincts mais identiques. Blue/green les déploiements offrent des fonctionnalités de lancement et de restauration quasi nulles. L'idée fondamentale est de transférer le trafic entre deux environnements identiques exécutant des versions différentes de votre application.

L'image suivante montre la migration des équilibreurs de charge réseau à partir de deux instances différentes de NGINX Ingress Controller lors de l'activation du mode automatique EKS. Vous utilisez un blue/green déploiement pour transférer le trafic entre les deux équilibreurs de charge réseau.

![\[Utilisation d'une stratégie blue/green de déploiement pour migrer les instances de NGINX Ingress Controller.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/57e8c14f-cb50-4027-8ef6-ce8ea3f2db25/images/211a029a-90d8-4c92-8200-19e54062f936.png)


L'espace de noms d'origine est l'espace de noms *bleu*. C'est ici que s'exécutent le service et l'instance NGINX Ingress Controller d'origine, avant que vous n'activiez le mode automatique EKS. Le service et l'instance d'origine se connectent à un Network Load Balancer dont le nom DNS est configuré dans Route 53. Le [AWS Load Balancer Controller](https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.11/) a déployé ce Network Load Balancer dans le cloud privé virtuel (VPC) cible.

Le diagramme montre le flux de travail suivant pour configurer un environnement pour un blue/green déploiement :

1. *Installez et configurez une autre instance de NGINX Ingress Controller dans un espace de noms différent, un espace de noms vert.*

1. Dans Route 53, configurez un nom DNS pour un nouveau Network Load Balancer.

## Outils
<a name="migrate-nginx-ingress-controller-eks-auto-mode-tools"></a>

**Services AWS**
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.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.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) répartit le trafic applicatif ou réseau entrant sur plusieurs cibles. Par exemple, vous pouvez répartir le trafic entre les instances, les conteneurs et les adresses IP d'Amazon Elastic Compute Cloud (Amazon EC2) dans une ou plusieurs zones de disponibilité.
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) est un service Web DNS hautement disponible et évolutif.
+ [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**
+ [Helm](https://helm.sh/) est un gestionnaire de packages open source pour Kubernetes qui vous aide à installer et à gérer des applications sur votre cluster Kubernetes.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) est une interface de ligne de commande qui vous permet d'exécuter des commandes sur des clusters Kubernetes.
+ [Le NGINX Ingress Controller](https://docs.nginx.com/nginx-ingress-controller/overview/about/) connecte les applications et les services Kubernetes à la gestion des demandes, à l'authentification, aux ressources personnalisées en libre-service et au débogage.

## Épopées
<a name="migrate-nginx-ingress-controller-eks-auto-mode-epics"></a>

### Passez en revue l'environnement existant
<a name="review-the-existing-environment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Vérifiez que l'instance NGINX Ingress Controller d'origine est opérationnelle. | Entrez la commande suivante pour vérifier que les ressources de l'espace de `ingress-nginx` noms sont opérationnelles. Si vous avez déployé NGINX Ingress Controller dans un autre espace de noms, mettez à jour le nom de l'espace de noms dans cette commande.<pre>kubectl get all -n ingress-nginx</pre>Dans le résultat, vérifiez que les pods du NGINX Ingress Controller sont en cours d'exécution. Voici un exemple de résultat :<pre>NAME                                           READY   STATUS      RESTARTS      AGE<br />pod/ingress-nginx-admission-create-xqn9d       0/1     Completed   0             88m<br />pod/ingress-nginx-admission-patch-lhk4j        0/1     Completed   1             88m<br />pod/ingress-nginx-controller-68f68f859-xrz74   1/1     Running     2 (10m ago)   72m<br /><br />NAME                                         TYPE           CLUSTER-IP       EXTERNAL-IP                                                                     PORT(S)                      AGE<br />service/ingress-nginx-controller             LoadBalancer   10.100.67.255    k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com   80:30330/TCP,443:31462/TCP   88m<br />service/ingress-nginx-controller-admission   ClusterIP      10.100.201.176   <none>                                                                          443/TCP                      88m<br /><br />NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE<br />deployment.apps/ingress-nginx-controller   1/1     1            1           88m<br /><br />NAME                                                 DESIRED   CURRENT   READY   AGE<br />replicaset.apps/ingress-nginx-controller-68f68f859   1         1         1       72m<br />replicaset.apps/ingress-nginx-controller-d8c96cf68   0         0         0       88m<br /><br />NAME                                       STATUS     COMPLETIONS   DURATION   AGE<br />job.batch/ingress-nginx-admission-create   Complete   1/1           4s         88m<br />job.batch/ingress-nginx-admission-patch    Complete   1/1           5s         88m</pre> | DevOps ingénieur | 

### Déployez un exemple de HTTPd charge de travail pour utiliser le NGINX Ingress Controller
<a name="deploy-a-sample-httpd-workload-to-use-the-nginx-ingress-controller"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez les ressources Kubernetes. | Entrez les commandes suivantes pour créer un exemple de déploiement, de service et d'entrée Kubernetes :<pre>kubectl create deployment demo --image=httpd --port=80</pre><pre>kubectl expose deployment demo</pre><pre> kubectl create ingress demo --class=nginx \<br />  --rule nginxautomode.local.dev/=demo:80</pre> | DevOps ingénieur | 
| Passez en revue les ressources déployées. | Entrez la commande suivante pour afficher la liste des ressources déployées :<pre>kubectl get all,ingress</pre>Dans le résultat, vérifiez que le HTTPd module d'échantillonnage est en cours d'exécution. Voici un exemple de résultat :<pre>NAME                        READY   STATUS    RESTARTS   AGE<br />pod/demo-7d94f8cb4f-q68wc   1/1     Running   0          59m<br /><br />NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE<br />service/demo         ClusterIP   10.100.78.155   <none>        80/TCP    59m<br />service/kubernetes   ClusterIP   10.100.0.1      <none>        443/TCP   117m<br /><br />NAME                   READY   UP-TO-DATE   AVAILABLE   AGE<br />deployment.apps/demo   1/1     1            1           59m<br /><br />NAME                              DESIRED   CURRENT   READY   AGE<br />replicaset.apps/demo-7d94f8cb4f   1         1         1       59m<br /><br />NAME                             CLASS   HOSTS                                  ADDRESS                                                                         PORTS   AGE<br />ingress.networking.k8s.io/demo   nginx   nginxautomode.local.dev                k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com                 80      56m</pre> | DevOps ingénieur | 
| Vérifiez que le service est accessible. | Entrez la commande suivante pour vérifier que le service est accessible via le nom DNS du Network Load Balancer :<pre>curl -H "Host: nginxautomode.local.dev" http://k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com</pre>Le résultat attendu est le suivant :<pre><html><body><h1>It works!</h1></body></html></pre> | DevOps ingénieur | 
| (Facultatif) Créez un enregistrement DNS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/migrate-nginx-ingress-controller-eks-auto-mode.html) | DevOps ingénieur, AWS DevOps | 

### Activer le mode automatique EKS sur le cluster existant
<a name="enable-eks-auto-mode-on-the-existing-cluster"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Activez le mode automatique EKS. | Suivez les instructions de la [section Activer le mode automatique EKS sur un cluster existant](https://docs.aws.amazon.com/eks/latest/userguide/auto-enable-existing.html) (documentation Amazon EKS). | AWS DevOps | 

### Installer un nouveau contrôleur d'entrée NGINX
<a name="install-a-new-nginx-ingress-controller"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez une nouvelle instance de NGINX Ingress Controller. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/migrate-nginx-ingress-controller-eks-auto-mode.html) | DevOps ingénieur | 
| Déployez la nouvelle instance NGINX Instance Controller. | Entrez la commande suivante pour appliquer le fichier manifeste modifié :<pre>kubectl apply -f deploy.yaml</pre> | DevOps ingénieur | 
| Confirmez le déploiement réussi. | Entrez la commande suivante pour vérifier que les ressources de l'espace de `ingress-nginx-v2` noms sont opérationnelles :<pre>kubectl get all -n ingress-nginx-v2</pre>Dans le résultat, vérifiez que les pods du NGINX Ingress Controller sont en cours d'exécution. Voici un exemple de résultat :<pre>NAME                                            READY   STATUS      RESTARTS   AGE<br />pod/ingress-nginx-admission-create-7shrj        0/1     Completed   0          24s<br />pod/ingress-nginx-admission-patch-vkxr5         0/1     Completed   1          24s<br />pod/ingress-nginx-controller-757bfcbc6d-4fw52   1/1     Running     0          24s<br /><br />NAME                                         TYPE           CLUSTER-IP       EXTERNAL-IP                                                                     PORT(S)                      AGE<br />service/ingress-nginx-controller             LoadBalancer   10.100.208.114   k8s-ingressn-ingressn-2e5e37fab6-848337cd9c9d520f.elb.eu-west-1.amazonaws.com   80:31469/TCP,443:30658/TCP   24s<br />service/ingress-nginx-controller-admission   ClusterIP      10.100.150.114   <none>                                                                          443/TCP                      24s<br /><br />NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE<br />deployment.apps/ingress-nginx-controller   1/1     1            1           24s<br /><br />NAME                                                  DESIRED   CURRENT   READY   AGE<br />replicaset.apps/ingress-nginx-controller-757bfcbc6d   1         1         1       24s<br /><br />NAME                                       STATUS     COMPLETIONS   DURATION   AGE<br />job.batch/ingress-nginx-admission-create   Complete   1/1           4s         24s<br />job.batch/ingress-nginx-admission-patch    Complete   1/1           5s         24s</pre> | DevOps ingénieur | 
| Créez une nouvelle entrée pour l'exemple de HTTPd charge de travail. | Entrez la commande suivante pour créer une nouvelle entrée pour l'exemple de HTTPd charge de travail existant :<pre>kubectl create ingress demo-new --class=nginx-v2 \<br />  --rule nginxautomode.local.dev/=demo:80</pre> | DevOps ingénieur | 
| Vérifiez que la nouvelle entrée fonctionne. | Entrez la commande suivante pour vérifier que la nouvelle entrée fonctionne :<pre>curl -H "Host: nginxautomode.local.dev" k8s-ingressn-ingressn-2e5e37fab6-848337cd9c9d520f.elb.eu-west-1.amazonaws.com</pre>Le résultat attendu est le suivant :<pre><html><body><h1>It works!</h1></body></html></pre> | DevOps ingénieur | 

### Découper
<a name="cut-over"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Passez au nouvel espace de noms. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/migrate-nginx-ingress-controller-eks-auto-mode.html) | AWS DevOps, DevOps ingénieur | 
| Passez en revue les deux entrées. | Entrez la commande suivante pour passer en revue les deux entrées créées pour l'exemple de HTTPd charge de travail :<pre>kubectl get ingress</pre>Voici un exemple de résultat :<pre>NAME       CLASS      HOSTS                                  ADDRESS                                                                         PORTS   AGE<br />demo       nginx      nginxautomode.local.dev   k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com                              80      95m<br />demo-new   nginx-v2   nginxautomode.local.dev   k8s-ingressn-ingressn-2e5e37fab6-848337cd9c9d520f.elb.eu-west-1.amazonaws.com                80      33s</pre> | DevOps ingénieur | 

## Ressources connexes
<a name="migrate-nginx-ingress-controller-eks-auto-mode-resources"></a>
+ [Activer le mode automatique EKS sur un cluster existant](https://docs.aws.amazon.com/eks/latest/userguide/auto-enable-existing.html) (documentation Amazon EKS)
+ [Résoudre les problèmes liés aux équilibreurs de charge créés par le contrôleur de service Kubernetes dans Amazon EKS](https://repost.aws/knowledge-center/eks-load-balancers-troubleshooting) (Re:Post Knowledge Center)AWS 
+ [Contrôleur d'entrée NGINX](https://docs.nginx.com/nginx-ingress-controller/) (documentation NGINX)