

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Migración de los controladores de entrada NGINX al activar el Modo automático de Amazon EKS
<a name="migrate-nginx-ingress-controller-eks-auto-mode"></a>

*Olawale Olaleye y Shamanth Devagari, Amazon Web Services*

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

El [Modo automático de EKS](https://docs.aws.amazon.com/eks/latest/userguide/automode.html) para Amazon Elastic Kubernetes Service (Amazon EKS) puede recudir la sobrecarga operativa de ejecutar cargas de trabajo en clústeres de Kubernetes. Este modo también le AWS permite configurar y administrar la infraestructura en su nombre. Al habilitar el Modo automático de EKS en un clúster existente, debe planificar cuidadosamente la migración de las configuraciones del [controlador de entrada NGINX](https://docs.nginx.com/nginx-ingress-controller/overview/about/). Esto se debe a que la transferencia directa de los equilibradores de carga de red no es posible.

Puede utilizar una estrategia de blue/green despliegue para migrar una instancia de NGINX Ingress Controller al habilitar el modo automático de EKS en un clúster de Amazon EKS existente.

## Requisitos previos y limitaciones
<a name="migrate-nginx-ingress-controller-eks-auto-mode-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS
+ Un [clúster de Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html) que ejecuta la versión 1.29 de Kubernetes o una posterior
+ Complementos de Amazon EKS que ejecutan [versiones mínimas](https://docs.aws.amazon.com/eks/latest/userguide/auto-enable-existing.html#auto-addons-required)
+ Versión más recientes de [kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html#kubectl-install-update)
+ Una instancia del [controlador de entrada de NGINX](https://kubernetes.github.io/ingress-nginx/deploy/#aws) existente
+ (Opcional) Una [zona alojada](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-working-with.html) en Amazon Route 53 para el desplazamiento de tráfico basado en DNS

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

Un *despliegue azul/verde* es una estrategia de despliegue en la que se crean dos entornos separados pero idénticos. Blue/green las implementaciones ofrecen capacidades de liberación y reversión prácticamente nulas durante el tiempo de inactividad. La idea fundamental es desplazar el tráfico entre dos entornos idénticos que ejecutan versiones diferentes de la aplicación.

En la siguiente imagen se muestra la migración de los equilibradores de carga de red desde dos instancias diferentes del controlador de entrada NGINX al activar el Modo automático de EKS. Se utiliza una blue/green implementación para transferir el tráfico entre los dos balanceadores de carga de red.

![\[Uso de una estrategia blue/green de implementación para migrar las instancias del controlador de ingreso de NGINX.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/57e8c14f-cb50-4027-8ef6-ce8ea3f2db25/images/211a029a-90d8-4c92-8200-19e54062f936.png)


El espacio de nombres original es el espacio de nombres *azul*. Aquí es donde se ejecutan el servicio y la instancia originales del controlador de entrada NGINX, antes de activar el Modo automático de EKS. El servicio y la instancia originales se conectan a un equilibrador de carga de red que tiene un nombre de DNS configurado en Route 53. El [controlador del equilibrador de carga de AWS](https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.11/) implementó este equilibrador de carga de red en la nube privada virtual (VPC).

El diagrama muestra el siguiente flujo de trabajo para configurar un entorno para una implementación: blue/green 

1. Instale y configure otra instancia del controlador de entrada NGINX en un espacio de nombres diferente, un espacio de nombres *verde*.

1. En Route 53, configure un nombre de DNS para un nuevo equilibrador de carga de red.

## Tools (Herramientas)
<a name="migrate-nginx-ingress-controller-eks-auto-mode-tools"></a>

**Servicios de AWS**
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) EKS) le ayuda a ejecutar AWS Kubernetes sin necesidad de instalar o mantener su propio plano de control o nodos de Kubernetes.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) permite distribuir el tráfico entrante de las aplicaciones o de la red entre varios destinos. Por ejemplo, puede distribuir el tráfico entre instancias, contenedores y direcciones IP de Amazon Elastic Compute Cloud (Amazon EC2) en una o más zonas de disponibilidad.
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) es un servicio web de sistema de nombres de dominio (DNS) escalable y de alta disponibilidad.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) le ayuda a lanzar AWS recursos en una red virtual que haya definido. Esa red virtual es similar a la red tradicional que utiliza en su propio centro de datos, con los beneficios de usar la infraestructura escalable de AWS.

**Otras herramientas**
+ [Helm](https://helm.sh/) es un administrador de paquetes de código abierto para Kubernetes que le permite instalar y administrar aplicaciones en el clúster de Kubernetes.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/): una interfaz de la línea de comandos que le ayuda en la ejecución de comandos en clústeres de Kubernetes.
+ El [controlador de entrada NGINX](https://docs.nginx.com/nginx-ingress-controller/overview/about/) conecta las aplicaciones y los servicios de Kubernetes con la gestión de solicitudes, la autenticación, los recursos personalizados de autoservicio y la depuración.

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

### Revisión del entorno existente
<a name="review-the-existing-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Confirme que la instancia original del controlador de entrada NGINX esté operativa. | Ingrese el siguiente comando para verificar que los recursos del espacio de nombres `ingress-nginx` estén operativos. Si ha implementado el controlador de entrada NGINX en otro espacio de nombres, actualice el nombre del espacio de nombres en este comando.<pre>kubectl get all -n ingress-nginx</pre>En la salida, confirme que el estado de los pods del controlador de entrada NGINX sea en ejecución. El siguiente es un ejemplo de output:<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 ingeniero | 

### Implemente un ejemplo de HTTPd carga de trabajo para usar el controlador de entrada NGINX
<a name="deploy-a-sample-httpd-workload-to-use-the-nginx-ingress-controller"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree los recursos de Kubernetes. | Ingrese los siguientes comandos para crear un ejemplo de implementación, servicio y entrada de 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 ingeniero | 
| Revise los recursos implementados. | Ingrese el siguiente comando para ver una lista de los recursos implementados:<pre>kubectl get all,ingress</pre>En el resultado, confirme que el HTTPd pod de muestra está en ejecución. El siguiente es un ejemplo de output:<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 ingeniero | 
| Confirme que se pueda acceder al servicio. | Ingrese el siguiente comando para confirmar que se pueda acceder al servicio a través del nombre de DNS del equilibrador de carga de red:<pre>curl -H "Host: nginxautomode.local.dev" http://k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com</pre>La salida esperada es la siguiente:<pre><html><body><h1>It works!</h1></body></html></pre> | DevOps ingeniero | 
| (Opcional) Cree un registro de DNS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/migrate-nginx-ingress-controller-eks-auto-mode.html) | DevOps ingeniero, AWS DevOps | 

### Cómo habilitar el modo automático de EKS en el clúster existente
<a name="enable-eks-auto-mode-on-the-existing-cluster"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Active el Modo automático de EKS. | Siga las instrucciones en [Cómo habilitar el modo automático de EKS en un clúster existente](https://docs.aws.amazon.com/eks/latest/userguide/auto-enable-existing.html) (documentación de Amazon EKS). | AWS DevOps | 

### Instalación de un nuevo controlador de entrada NGINX
<a name="install-a-new-nginx-ingress-controller"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure una nueva instancia del controlador de entrada NGINX. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/migrate-nginx-ingress-controller-eks-auto-mode.html) | DevOps ingeniero | 
| Implemente la nueva instancia del controlador de instancias NGINX. | Ingrese el siguiente comando para aplicar el archivo de manifiesto modificado:<pre>kubectl apply -f deploy.yaml</pre> | DevOps ingeniero | 
| Confirme que la implementación se haya llevado a cabo correctamente. | Ingrese el siguiente comando para verificar que los recursos del espacio de nombres `ingress-nginx-v2` estén operativos:<pre>kubectl get all -n ingress-nginx-v2</pre>En la salida, confirme que el estado de los pods del controlador de entrada NGINX sea en ejecución. El siguiente es un ejemplo de output:<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 ingeniero | 
| Cree una nueva entrada para la HTTPd carga de trabajo de muestra. | Introduzca el siguiente comando para crear una nueva entrada para la carga de trabajo de muestra HTTPd existente:<pre>kubectl create ingress demo-new --class=nginx-v2 \<br />  --rule nginxautomode.local.dev/=demo:80</pre> | DevOps ingeniero | 
| Confirme que la nueva entrada funcione. | Ingrese el siguiente comando para confirmar que la nueva entrada funcione:<pre>curl -H "Host: nginxautomode.local.dev" k8s-ingressn-ingressn-2e5e37fab6-848337cd9c9d520f.elb.eu-west-1.amazonaws.com</pre>La salida esperada es la siguiente:<pre><html><body><h1>It works!</h1></body></html></pre> | DevOps ingeniero | 

### Realizar la transición
<a name="cut-over"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Haga la transición al nuevo espacio de nombres. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/migrate-nginx-ingress-controller-eks-auto-mode.html) | AWS DevOps, DevOps ingeniero | 
| Revise las dos entradas. | Introduzca el siguiente comando para revisar las dos entradas que se crearon para la HTTPd carga de trabajo de muestra:<pre>kubectl get ingress</pre>El siguiente es un ejemplo de output:<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 ingeniero | 

## Recursos relacionados
<a name="migrate-nginx-ingress-controller-eks-auto-mode-resources"></a>
+ [Cómo habilitar el modo automático de EKS en un clúster existente](https://docs.aws.amazon.com/eks/latest/userguide/auto-enable-existing.html) (documentación de Amazon EKS)
+ [Solucione los problemas de los balanceadores de carga creados por el controlador de servicios de Kubernetes en Amazon EKS](https://repost.aws/knowledge-center/eks-load-balancers-troubleshooting) (re:POST Knowledge Center)AWS 
+ [NGINX Ingress Controller](https://docs.nginx.com/nginx-ingress-controller/) (documentación de NGINX)