

 **Ayude a mejorar esta página** 

Para contribuir a esta guía del usuario, elija el enlace **Edit this page on GitHub** que se encuentra en el panel derecho de cada página.

# Enrutamiento del tráfico de internet con el controlador del equilibrador de carga de AWS
<a name="aws-load-balancer-controller"></a>

**sugerencia**  
 [Regístrese](https://aws-experience.com/emea/smb/events/series/get-hands-on-with-amazon-eks?trk=4a9b4147-2490-4c63-bc9f-f8a84b122c8c&sc_channel=el) en los próximos talleres de Amazon EKS.

El Controlador del equilibrador de carga de AWS administra los Elastic Load Balancer de AWS para un clúster de Kubernetes. Puede usar el controlador para exponer las aplicaciones del clúster a Internet. El controlador aprovisiona los equilibradores de carga de AWS que apuntan a los recursos de Service o Ingress del clúster. En otras palabras, el controlador crea una única dirección IP o nombre de DNS que apunta a varios pods del clúster.

![\[Diagrama de arquitectura. Ilustración del tráfico procedente de usuarios de Internet al equilibrador de carga de Amazon. El equilibrador de carga de Amazon distribuye el tráfico a los pods del clúster.\]](http://docs.aws.amazon.com/es_es/eks/latest/userguide/images/lbc-overview.png)


El controlador observa los recursos de entrada o servicio de Kubernetes. En respuesta, crea los recursos adecuados de Elastic Load Balancing de AWS. Puede configurar el comportamiento específico de los equilibradores de carga mediante la aplicación de anotaciones a los recursos de Kubernetes. Por ejemplo, puede adjuntar grupos de seguridad de AWS a los equilibradores de carga mediante anotaciones.

El controlador aprovisiona los siguientes recursos:

 **de Kubernetes `Ingress` **   
El LBC crea un [equilibrador de carga de aplicación (ALB) de AWS](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) cuando se crea una `Ingress` de Kubernetes. [Revise las anotaciones que puede aplicar a un recurso de Ingress.](https://kubernetes-sigs.github.io/aws-load-balancer-controller/latest/guide/ingress/annotations/) 

 **Servicio de Kubernetes del tipo `LoadBalancer`**   
El LBC crea un [equilibrador de carga de red (NLB) de AWS](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html) cuando crea un servicio de Kubernetes del tipo `LoadBalancer`. [Revise las anotaciones que puede aplicar a un recurso de Service.](https://kubernetes-sigs.github.io/aws-load-balancer-controller/latest/guide/service/annotations/)   
En el pasado, se utilizaba el equilibrador de carga de red de Kubernetes para destinos de *instancia*, pero se usaba el LBC para destinos de *IP*. Con la versión `2.3.0` o posterior del Controlador del equilibrador de carga de AWS, puede crear NLB con cualquiera de los tipos de destino. Para obtener más información acerca de los tipos de destinos del NLB, consulte [Tipo de destino](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-target-groups.html#target-type) en la Guía del usuario para Network Load Balancers.

El controlador es un [proyecto de código abierto](https://github.com/kubernetes-sigs/aws-load-balancer-controller) administrado en GitHub.

Antes de implementar el controlador, recomendamos que revise los requisitos previos y las consideraciones que figuran en [Enrutamiento de aplicaciones y tráfico HTTP con equilibradores de carga de aplicaciones](alb-ingress.md) y [Dirija el tráfico de TCP y UDP con equilibradores de carga de red](network-load-balancing.md). En esos temas, implementará una aplicación de muestra que incluye un equilibrador de carga de AWS.

 **API de `Gateway` de Kubernetes**   
Con la versión `2.14.0` o posterior del Controlador del equilibrador de carga de AWS, el LBC crea un [Equilibrador de carga de aplicación de AWS (ALB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) al crear una `Gateway` de Kubernetes. La puerta de enlace de Kubernetes estandariza más configuraciones que Entrada, que necesitaba anotaciones personalizadas para muchas de las opciones habituales. [Revise la configuración que puede aplicar a un recurso de puerta de enlace.](https://kubernetes-sigs.github.io/aws-load-balancer-controller/latest/guide/gateway/gateway/) Para obtener más información acerca de la API de `Gateway`, consulte [Gateway API](https://kubernetes.io/docs/concepts/services-networking/gateway/) en la documentación de Kubernetes.

## Instalación del controlador
<a name="lbc-overview"></a>

Puede utilizar uno de los siguientes procedimientos para instalar el Controlador del equilibrador de carga de AWS:
+ Si es la primera vez que utiliza Amazon EKS, le recomendamos que utilice Helm para la instalación, ya que simplifica la instalación del Controlador del equilibrador de carga de AWS. Para obtener más información, consulte [Instalación del Controlador del equilibrador de carga de AWS con Helm](lbc-helm.md).
+ Para configuraciones avanzadas, como clústeres con acceso de red restringido a los registros de contenedores públicos, utilice los manifiestos de Kubernetes. Para obtener más información, consulte [Instalación del Controlador del equilibrador de carga de AWS con manifiestos](lbc-manifest.md).

## Migración desde versiones de controlador obsoletas
<a name="lbc-deprecated"></a>
+ Si tiene versiones obsoletas del Controlador del equilibrador de carga de AWS instaladas, consulte [Migración de aplicaciones desde el Controlador de entrada de ALB obsoleto](lbc-remove.md).
+ Las versiones obsoletas no se pueden actualizar. Deben eliminarse y se debe instalar una versión actual del Controlador del equilibrador de carga de AWS.
+ Las versiones obsoleta incluyen lo siguiente:
  +  Controlador de entradas de ALB de AWS para Kubernetes (“Controlador de entradas”), un predecesor del Controlador del equilibrador de carga de AWS.
  + Cualquier versión `0.1.x ` del Controlador del equilibrador de carga de AWS

## Proveedor de nube heredado
<a name="lbc-legacy"></a>

Kubernetes incluye un proveedor de nube heredado para AWS. El proveedor de nube heredado es capaz de aprovisionar equilibradores de carga de AWS, similares al Controlador del equilibrador de carga de AWS. El proveedor de nube heredado crea equilibradores de carga clásicos. Si no instala el Controlador del equilibrador de carga de AWS, Kubernetes utilizará de forma predeterminada el proveedor de nube heredado. Debe instalar el Controlador del equilibrador de carga de AWS y evitar utilizar el proveedor de nube heredado.

**importante**  
En las versiones 2.5 y posteriores, el Controlador del equilibrador de carga de AWS se convierte en el controlador predeterminado para los recursos del *servicio* de Kubernetes con el `type: LoadBalancer` y hace un Equilibrador de carga de red (NLB) de AWS para cada servicio. Para ello, crea un webhook mutante para los servicios, que establece el campo `spec.loadBalancerClass` para `service.k8s.aws/nlb` para nuevos servicios de `type: LoadBalancer`. Puede desactivar esta característica y volver a utilizar el [proveedor de nube tradicional](https://kubernetes-sigs.github.io/aws-load-balancer-controller/latest/guide/service/annotations/#legacy-cloud-provider) como controlador predeterminado, estableciendo el valor del gráfico de Helm de `enableServiceMutatorWebhook` a `false`. El clúster no aprovisionará nuevos equilibradores de carga clásicos para sus servicios a menos que desactive esta característica. Los equilibradores de carga clásicos existentes seguirán funcionando.

# Instalación del Controlador del equilibrador de carga de AWS con Helm
<a name="lbc-helm"></a>

**sugerencia**  
 [Regístrese](https://aws-experience.com/emea/smb/events/series/get-hands-on-with-amazon-eks?trk=4a9b4147-2490-4c63-bc9f-f8a84b122c8c&sc_channel=el) en los próximos talleres de Amazon EKS.

**sugerencia**  
Con el modo automático de Amazon EKS, no necesita instalar ni actualizar los complementos de red. El modo automático ofrece capacidades para la conexión en red de pods y el equilibrio de carga.  
Para obtener más información, consulte [Automatización de la infraestructura de clústeres con el modo automático de EKS](automode.md).

En este tema se describe cómo instalar el Controlador del equilibrador de carga AWS con Helm, un administrador de paquetes para Kubernetes y `eksctl`. El controlador se instala con las opciones predeterminadas. Para obtener más información sobre el controlador, incluidos los detalles sobre su configuración con anotaciones, consulte la [documentación del Controlador del equilibrador de carga de AWS](https://kubernetes-sigs.github.io/aws-load-balancer-controller/) en GitHub.

En los siguientes pasos, reemplace los valores de ejemplo por sus propios valores.

## Requisitos previos
<a name="lbc-prereqs"></a>

Antes de comenzar este tutorial, debe completar los siguientes pasos:
+ Cree un clúster de Amazon EKS. Para crear uno, consulte [Introducción a Amazon EKS](getting-started.md).
+ Instale [Helm](https://helm.sh/docs/helm/helm_install/) en el equipo local.
+ Asegúrese de que sus complementos CNI de Amazon VPC para Kubernetes, `kube-proxy` y CoreDNS tengan las versiones mínimas enumeradas en [Service account tokens](service-accounts.md#boundserviceaccounttoken-validated-add-on-versions).
+ Conozca los conceptos de AWS Elastic Load Balancing. Para obtener más información, consulte la [Guía del usuario de Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/).
+ Obtenga información sobre los recursos del [servicio](https://kubernetes.io/docs/concepts/services-networking/service/) y de [entrada](https://kubernetes.io/docs/concepts/services-networking/ingress/) de Kubernetes.

### Consideraciones
<a name="lbc-considerations"></a>

Antes de seguir con los pasos de configuración de esta página, tenga en cuenta lo siguiente:
+ La política y el rol (`AmazonEKSLoadBalancerControllerRole`) de IAM se pueden reutilizar en varios clústeres de EKS de la misma cuenta de AWS.
+ Si instalará el controlador en el mismo clúster en el que se creó originalmente el rol (`AmazonEKSLoadBalancerControllerRole`), vaya al [Paso 2: Instalación del controlador del equilibrador de carga](#lbc-helm-install) después de comprobar que el rol existe.
+ Si utiliza roles de IAM para cuentas de servicio (IRSA), estos deben configurarse para cada clúster y el ARN del proveedor de OpenID Connect (OIDC) de la política de confianza del rol es específico de cada clúster de EKS. Además, si instalará el controlador en un clúster nuevo con un `AmazonEKSLoadBalancerControllerRole` existente, actualice la política de confianza del rol para incluir el proveedor de OIDC del nuevo clúster y cree una nueva cuenta de servicio con la anotación de rol adecuada. Para determinar si ya tiene un proveedor de OIDC o para crear uno, consulte [Crear un proveedor de OIDC de IAM para su clúster](enable-iam-roles-for-service-accounts.md).

## Paso 1: crear el rol de IAM usando `eksctl`
<a name="lbc-helm-iam"></a>

Los siguientes pasos corresponden a la **versión 2.14.1** del controlador del equilibrador de carga de AWS. Para obtener más información sobre todas las versiones, consulte la [página de versiones del Controlador del equilibrador de carga de AWS](https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/) en GitHub.

1. Descargue una política de IAM para el Controlador del equilibrador de carga de AWS que le permita realizar llamadas a las API de AWS en su nombre.

   ```
   curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.14.1/docs/install/iam_policy.json
   ```
   + Si pertenece a una partición de AWS no estándar, como una región gubernamental o de China, [revise las políticas en GitHub](https://github.com/kubernetes-sigs/aws-load-balancer-controller/tree/main/docs/install) y descargue la política adecuada según la región.

1. Cree una política de IAM con la política descargada en el paso anterior.

   ```
   aws iam create-policy \
       --policy-name AWSLoadBalancerControllerIAMPolicy \
       --policy-document file://iam_policy.json
   ```
**nota**  
Si ve la política en la Consola de administración de AWS, la consola muestra advertencias para el servicio **ELB**, pero no para el servicio **ELB v2**. Esto ocurre porque algunas de las acciones de la política existen para **ELB v2**, pero no para **ELB**. Puede obviar estas advertencias para **ELB**.

1. Sustituya los valores por el nombre del clúster, el código de la región y el ID de la cuenta.

   ```
   eksctl create iamserviceaccount \
       --cluster=<cluster-name> \
       --namespace=kube-system \
       --name=aws-load-balancer-controller \
       --attach-policy-arn=arn:aws:iam::<AWS_ACCOUNT_ID>:policy/AWSLoadBalancerControllerIAMPolicy \
       --override-existing-serviceaccounts \
       --region <aws-region-code> \
       --approve
   ```

## Paso 2: instalación del Controlador del equilibrador de carga de AWS
<a name="lbc-helm-install"></a>

1. Añada el repositorio de gráficos de Helm `eks-charts`. AWS mantiene [este repositorio](https://github.com/aws/eks-charts) en GitHub.

   ```
   helm repo add eks https://aws.github.io/eks-charts
   ```

1. Actualice el repositorio local para asegurarse de que cuenta con los gráficos más recientes.

   ```
   helm repo update eks
   ```

1. Instale el Controlador del equilibrador de carga de AWS.

   Si va a implementar el controlador en nodos de Amazon EC2 que tienen [acceso restringido al servicio de metadatos de instancias de Amazon EC2 (IMDS)](https://aws.github.io/aws-eks-best-practices/security/docs/iam/#restrict-access-to-the-instance-profile-assigned-to-the-worker-node), o si va a implementar en Nodos híbridos de Amazon EKS o Fargate, agregue los siguientes indicadores al comando `helm` siguiente:
   +  `--set region=region-code ` 
   +  `--set vpcId=vpc-xxxxxxxx ` 

     Reemplace *my-cluster* por el nombre de su clúster. En el comando siguiente, `aws-load-balancer-controller` es la cuenta de servicio de Kubernetes que creó en un paso anterior.

     Para obtener más información acerca de la configuración del gráfico de Helm, consulte [values.yaml](https://github.com/aws/eks-charts/blob/master/stable/aws-load-balancer-controller/values.yaml) en GitHub.

     ```
     helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
       -n kube-system \
       --set clusterName=my-cluster \
       --set serviceAccount.create=false \
       --set serviceAccount.name=aws-load-balancer-controller \
       --version 1.14.0
     ```

**importante**  
El gráfico implementado no recibe actualizaciones de seguridad de forma automática. Debe actualizar de forma manual a un gráfico más reciente cuando se encuentre disponible. Al actualizar, cambie *install* por `upgrade` en el comando anterior.

El comando `helm install` instala automáticamente las definiciones de recursos personalizadas (CRD) para el controlador. El comando `helm upgrade` no lo hace. Si usa `helm upgrade,`, debe instalar manualmente las CRD. Ejecute el siguiente comando para instalar las CRD:

```
wget https://raw.githubusercontent.com/aws/eks-charts/master/stable/aws-load-balancer-controller/crds/crds.yaml
kubectl apply -f crds.yaml
```

## Paso 3: verificar que el controlador se encuentre instalado
<a name="lbc-helm-verify"></a>

1. Verifique que el controlador se encuentre instalado.

   ```
   kubectl get deployment -n kube-system aws-load-balancer-controller
   ```

   Un ejemplo de salida sería el siguiente.

   ```
   NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
   aws-load-balancer-controller   2/2     2            2           84s
   ```

   Recibe la salida anterior si ha implementado mediante Helm. Si ha implementado utilizando el manifiesto de Kubernetes, solo tiene una réplica.

1. Antes de utilizar el controlador para aprovisionar el recurso de AWS, el clúster debe cumplir requisitos específicos. Para obtener más información, consulte [Redirección de tráfico de aplicaciones y HTTP con los equilibradores de carga de aplicaciones](alb-ingress.md) y [Dirija el tráfico de TCP y UDP con equilibradores de carga de red](network-load-balancing.md).

# Instalación del Controlador del equilibrador de carga de AWS con manifiestos
<a name="lbc-manifest"></a>

**sugerencia**  
Con el modo automático de Amazon EKS, no necesita instalar ni actualizar complementos de red. El modo automático ofrece capacidades para la conexión en red de pods y el equilibrio de carga.  
Para obtener más información, consulte [Automatización de la infraestructura de clústeres con el modo automático de EKS](automode.md).

En este tema, se describe cómo instalar el controlador mediante la descarga y la aplicación de los manifiestos de Kubernetes. Puede ver la [documentación](https://kubernetes-sigs.github.io/aws-load-balancer-controller/latest/) completa para el controlador en GitHub.

En los siguientes pasos, reemplace los valores de ejemplo por sus propios valores.

## Requisitos previos
<a name="lbc-manifest-prereqs"></a>

Antes de comenzar este tutorial, debe completar los siguientes pasos:
+ Cree un clúster de Amazon EKS. Para crear uno, consulte [Introducción a Amazon EKS](getting-started.md).
+ Instale [Helm](https://helm.sh/docs/helm/helm_install/) en el equipo local.
+ Asegúrese de que sus complementos CNI de Amazon VPC para Kubernetes, `kube-proxy` y CoreDNS tengan las versiones mínimas enumeradas en [Service account tokens](service-accounts.md#boundserviceaccounttoken-validated-add-on-versions).
+ Conozca los conceptos de AWS Elastic Load Balancing. Para obtener más información, consulte la [Guía del usuario de Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/).
+ Obtenga información sobre los recursos del [servicio](https://kubernetes.io/docs/concepts/services-networking/service/) y de [entrada](https://kubernetes.io/docs/concepts/services-networking/ingress/) de Kubernetes.

### Consideraciones
<a name="lbc-manifest-considerations"></a>

Antes de seguir con los pasos de configuración de esta página, tenga en cuenta lo siguiente:
+ La política y el rol (`AmazonEKSLoadBalancerControllerRole`) de IAM se pueden reutilizar en varios clústeres de EKS de la misma cuenta de AWS.
+ Si instalará el controlador en el mismo clúster en el que se creó originalmente el rol (`AmazonEKSLoadBalancerControllerRole`), vaya al [Paso 2: Instalación de cert-manager](#lbc-cert) después de comprobar que el rol existe.
+ Si utiliza roles de IAM para cuentas de servicio (IRSA), estos deben configurarse para cada clúster y el ARN del proveedor de OpenID Connect (OIDC) de la política de confianza del rol es específico de cada clúster de EKS. Además, si instalará el controlador en un clúster nuevo con un `AmazonEKSLoadBalancerControllerRole` existente, actualice la política de confianza del rol para incluir el proveedor de OIDC del nuevo clúster y cree una nueva cuenta de servicio con la anotación de rol adecuada. Para determinar si ya tiene un proveedor de OIDC o para crear uno, consulte [Crear un proveedor de OIDC de IAM para su clúster](enable-iam-roles-for-service-accounts.md).

## Paso 1: configurar IAM
<a name="lbc-iam"></a>

Los siguientes pasos corresponden a la **versión 2.14.1** del controlador del equilibrador de carga de AWS. Para obtener más información sobre todas las versiones, consulte la [página de versiones del Controlador del equilibrador de carga de AWS](https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/) en GitHub.

1. Descargue una política de IAM para el Controlador del equilibrador de carga de AWS que le permita realizar llamadas a las API de AWS en su nombre.  
**Example**  

------
#### [  AWS  ]

   ```
   curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.14.1/docs/install/iam_policy.json
   ```

------
#### [  AWS GovCloud (US) ]

   ```
   curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.14.1/docs/install/iam_policy_us-gov.json
   ```

   ```
   mv iam_policy_us-gov.json iam_policy.json
   ```

------

1. Cree una política de IAM con la política descargada en el paso anterior.

   ```
   aws iam create-policy \
       --policy-name AWSLoadBalancerControllerIAMPolicy \
       --policy-document file://iam_policy.json
   ```
**nota**  
Si ve la política en la Consola de administración de AWS, la consola muestra advertencias para el servicio **ELB**, pero no para el servicio **ELB v2**. Esto ocurre porque algunas de las acciones de la política existen para **ELB v2**, pero no para **ELB**. Puede obviar estas advertencias para **ELB**.

**Example**  

1. Reemplace *my-cluster* por el nombre de su clúster y *111122223333* con el ID de su cuenta y luego ejecute el comando.

   ```
   eksctl create iamserviceaccount \
     --cluster=my-cluster \
     --namespace=kube-system \
     --name=aws-load-balancer-controller \
     --role-name AmazonEKSLoadBalancerControllerRole \
     --attach-policy-arn=arn:aws:iam::111122223333:policy/AWSLoadBalancerControllerIAMPolicy \
     --approve
   ```

1. Recupere el ID del proveedor de OIDC de su clúster y almacénelo en una variable.

   ```
   oidc_id=$(aws eks describe-cluster --name my-cluster --query "cluster.identity.oidc.issuer" --output text | cut -d '/' -f 5)
   ```

1. Determine si ya hay un proveedor de OIDC de IAM con el ID de su clúster en su cuenta. Debe tener configurado OIDC tanto para el clúster como para IAM.

   ```
   aws iam list-open-id-connect-providers | grep $oidc_id | cut -d "/" -f4
   ```

   Si no se devuelve ninguna salida, debe contar con un proveedor de OIDC de IAM para su clúster. Si no se devuelve ninguna salida, debe crear un proveedor de OIDC de IAM para el clúster. Para obtener más información, consulte [Crear un proveedor de OIDC de IAM para su clúster](enable-iam-roles-for-service-accounts.md).

1. Copie los siguientes contenidos en su dispositivo. Reemplace *111122223333* por el ID de su cuenta. Reemplace *region-code* por la región de AWS en la que se encuentra el clúster. Reemplace *EXAMPLED539D4633E53DE1B71EXAMPLE* con la salida que obtuvo en el paso anterior.

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE"
               },
               "Action": "sts:AssumeRoleWithWebIdentity",
               "Condition": {
                   "StringEquals": {
                       "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com",
                       "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:aws-load-balancer-controller"
                   }
               }
           }
       ]
   }
   ```

1. Creación del rol de IAM.

   ```
   aws iam create-role \
     --role-name AmazonEKSLoadBalancerControllerRole \
     --assume-role-policy-document file://"load-balancer-role-trust-policy.json"
   ```

1. Adjunte la política de IAM administrada por Amazon EKS requerida al rol de IAM. Reemplace *111122223333* por el ID de su cuenta.

   ```
   aws iam attach-role-policy \
     --policy-arn arn:aws:iam::111122223333:policy/AWSLoadBalancerControllerIAMPolicy \
     --role-name AmazonEKSLoadBalancerControllerRole
   ```

1. Copie los siguientes contenidos en su dispositivo. Reemplace *111122223333* por el ID de su cuenta. Después de reemplazar el texto, ejecute el comando modificado para crear el archivo `aws-load-balancer-controller-service-account.yaml`.

   ```
   cat >aws-load-balancer-controller-service-account.yaml <<EOF
   apiVersion: v1
   kind: ServiceAccount
   metadata:
     labels:
       app.kubernetes.io/component: controller
       app.kubernetes.io/name: aws-load-balancer-controller
     name: aws-load-balancer-controller
     namespace: kube-system
     annotations:
       eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/AmazonEKSLoadBalancerControllerRole
   EOF
   ```

1. Cree la cuenta de servicio de Kubernetes en el clúster. La cuenta de servicio de Kubernetes denominada `aws-load-balancer-controller` está anotada con el rol de IAM que creó con el nombre *AmazonEKSLoadBalancerControllerRole*.

   ```
   kubectl apply -f aws-load-balancer-controller-service-account.yaml
   ```

## Paso 2: instalar el `cert-manager`
<a name="lbc-cert"></a>

Instale el `cert-manager` con uno de los siguientes métodos para ingresar la configuración del certificado en los webhooks. Para obtener más información, consulte [Cómo empezar](https://cert-manager.io/docs/installation/#getting-started) en la *documentación de cert-manager*.

Se recomienda utilizar el registro del contenedor `quay.io` para realizar la instalación de `cert-manager`. Si los nodos no tienen acceso al registro contenedor de `quay.io`, instale `cert-manager` mediante Amazon ECR (consulte a continuación).

**Example**  

1. Si los nodos tienen acceso al registro de contenedores de `quay.io`, instale el `cert-manager` para ingresar la configuración del certificado en los webhooks.

   ```
   kubectl apply \
       --validate=false \
       -f https://github.com/jetstack/cert-manager/releases/download/v1.13.5/cert-manager.yaml
   ```

1. Instale el `cert-manager` con uno de los siguientes métodos para ingresar la configuración del certificado en los webhooks. Para obtener más información, consulte [Cómo empezar](https://cert-manager.io/docs/installation/#getting-started) en la *documentación de cert-manager*.

1. Descargue el manifiesto.

   ```
   curl -Lo cert-manager.yaml https://github.com/jetstack/cert-manager/releases/download/v1.13.5/cert-manager.yaml
   ```

1. Extraiga las siguientes imágenes y envíelas un repositorio al que tengan acceso sus nodos. Para obtener más información sobre cómo extraer, etiquetar y enviar las imágenes en su propio repositorio, consulte [Copiar una imagen de contenedor de un repositorio en otro repositorio](copy-image-to-repository.md).

   ```
   quay.io/jetstack/cert-manager-cainjector:v1.13.5
   quay.io/jetstack/cert-manager-controller:v1.13.5
   quay.io/jetstack/cert-manager-webhook:v1.13.5
   ```

1. Reemplace `quay.io` en el manifiesto de las tres imágenes por su propio nombre de registro. El siguiente comando supone que el nombre del repositorio privado es el mismo que el repositorio de origen. Sustituya *111122223333.dkr.ecr.region-code.amazonaws.com* por el registro privado.

   ```
   sed -i.bak -e 's|quay.io|111122223333.dkr.ecr.region-code.amazonaws.com|' ./cert-manager.yaml
   ```

1. Aplique el manifiesto.

   ```
   kubectl apply \
       --validate=false \
       -f ./cert-manager.yaml
   ```

## Paso 3: instalación del Controlador del equilibrador de carga de AWS
<a name="lbc-install"></a>

1. Descargue la especificación del controlador. Para obtener más información sobre el controlador, consulte la [documentación](https://kubernetes-sigs.github.io/aws-load-balancer-controller/) en GitHub.

   ```
   curl -Lo v2_14_1_full.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/v2.14.1/v2_14_1_full.yaml
   ```

1. Lleve a cabo las siguientes modificaciones en el archivo.

   1. Si ha descargado el archivo `v2_14_1_full.yaml`, ejecute el siguiente comando para eliminar la sección `ServiceAccount` del manifiesto. Si no elimina esta sección, se sobrescribirá la anotación obligatoria que hizo en la cuenta de servicio en un paso anterior. Al eliminar esta sección también conserva la cuenta de servicio que creó en un paso anterior si elimina el controlador.

      ```
      sed -i.bak -e '764,772d' ./v2_14_1_full.yaml
      ```

      Si ha descargado una versión de archivo diferente, abra el archivo en un editor y elimine las siguientes líneas.

      ```
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        labels:
          app.kubernetes.io/component: controller
          app.kubernetes.io/name: aws-load-balancer-controller
        name: aws-load-balancer-controller
        namespace: kube-system
      ---
      ```

   1. Reemplace `your-cluster-name` en la sección `Deployment` `spec` del archivo por el nombre del clúster. Para ello, reemplace *my-cluster* por el nombre del clúster.

      ```
      sed -i.bak -e 's|your-cluster-name|my-cluster|' ./v2_14_1_full.yaml
      ```

   1. Si los nodos no tienen acceso a los repositorios de imágenes de Amazon ECR de Amazon EKS, tiene que extraer la siguiente imagen y enviarla a un repositorio al que tengan acceso los nodos. Para obtener más información sobre cómo extraer, etiquetar y enviar una imagen a su propio repositorio, consulte [Copiar una imagen de contenedor de un repositorio en otro repositorio](copy-image-to-repository.md).

      ```
      public.ecr.aws/eks/aws-load-balancer-controller:v2.14.1
      ```

      Agregue el nombre del registro al manifiesto. El siguiente comando supone que el nombre del repositorio privado es el mismo que el repositorio de origen y agrega el nombre del registro privado al archivo. Sustituya *111122223333.dkr.ecr.region-code.amazonaws.com* por el registro. En esta línea se supone que ha asignado el mismo nombre al repositorio privado que al repositorio de origen. Si no es así, cambie el texto `eks/aws-load-balancer-controller` después del nombre del registro privado al nombre del repositorio.

      ```
      sed -i.bak -e 's|public.ecr.aws/eks/aws-load-balancer-controller|111122223333.dkr.ecr.region-code.amazonaws.com/eks/aws-load-balancer-controller|' ./v2_14_1_full.yaml
      ```

   1. (Necesario solo para IMDS restringido o Fargate)

      Si va a implementar el controlador en nodos de Amazon EC2 que tienen [acceso restringido al servicio de metadatos de instancias de Amazon EC2 (IMDS)](https://aws.github.io/aws-eks-best-practices/security/docs/iam/#restrict-access-to-the-instance-profile-assigned-to-the-worker-node), o si va a realizar una implementación en Nodos híbridos de Amazon EKS o Fargate, agregue los `following parameters` bajo `- args:`.

      ```
      [...]
      spec:
            containers:
              - args:
                  - --cluster-name=your-cluster-name
                  - --ingress-class=alb
                  - --aws-vpc-id=vpc-xxxxxxxx
                  - --aws-region=region-code
      
      
      [...]
      ```

1. Aplique el archivo.

   ```
   kubectl apply -f v2_14_1_full.yaml
   ```

1. Descargue el manifiesto `IngressClass` y `IngressClassParams` a su clúster.

   ```
   curl -Lo v2.14.1_ingclass.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/v2.14.1/v2_14_1_ingclass.yaml
   ```

1. Aplique el manifiesto al clúster.

   ```
   kubectl apply -f v2_14_1_ingclass.yaml
   ```

## Paso 4: verificar que el controlador se encuentre instalado
<a name="lbc-verify"></a>

1. Verifique que el controlador se encuentre instalado.

   ```
   kubectl get deployment -n kube-system aws-load-balancer-controller
   ```

   Un ejemplo de salida sería el siguiente.

   ```
   NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
   aws-load-balancer-controller   2/2     2            2           84s
   ```

   Recibe la salida anterior si ha implementado mediante Helm. Si ha implementado utilizando el manifiesto de Kubernetes, solo tiene una réplica.

1. Antes de utilizar el controlador para aprovisionar el recurso de AWS, el clúster debe cumplir requisitos específicos. Para obtener más información, consulte [Redirección de tráfico de aplicaciones y HTTP con los equilibradores de carga de aplicaciones](alb-ingress.md) y [Dirija el tráfico de TCP y UDP con equilibradores de carga de red](network-load-balancing.md).

# Migración de aplicaciones desde el Controlador de entrada de ALB obsoleto
<a name="lbc-remove"></a>

En este tema se explica cómo migrar desde versiones obsoletas de controladores. Más específicamente, se describe cómo eliminar las versiones obsoletas del Controlador del equilibrador de carga de AWS.
+ Las versiones obsoletas no se pueden actualizar. Primero debe eliminarlas y, a continuación, instalar una versión actual.
+ Las versiones obsoleta incluyen lo siguiente:
  +  Controlador de entradas de ALB de AWS para Kubernetes (“Controlador de entradas”), un predecesor del Controlador del equilibrador de carga de AWS.
  + Cualquier versión `0.1.x ` del Controlador del equilibrador de carga de AWS

## Eliminación de la versión obsoleta del controlador
<a name="lbc-remove-desc"></a>

**nota**  
Es posible que haya instalado la versión obsoleta con Helm o manualmente con manifiestos de Kubernetes. Realice el procedimiento utilizando la herramienta con la que la instaló originalmente.

1. Si ha instalado el gráfico de Helm `incubator/aws-alb-ingress-controller`, desinstálelo.

   ```
   helm delete aws-alb-ingress-controller -n kube-system
   ```

1. Si tiene la versión `0.1.x ` del gráfico `eks-charts/aws-load-balancer-controller` instalado, desinstálelo. La actualización de `0.1.x ` a la versión `1.0.0` no funciona debido a la incompatibilidad con la versión de la API webhook.

   ```
   helm delete aws-load-balancer-controller -n kube-system
   ```

1. Verifique si el controlador se encuentra instalado actualmente.

   ```
   kubectl get deployment -n kube-system alb-ingress-controller
   ```

   Esta es la salida si el controlador no está instalado.

   ```
   Error from server (NotFound): deployments.apps "alb-ingress-controller" not found
   ```

   Esta es la salida si el controlador está instalado.

   ```
   NAME                   READY UP-TO-DATE AVAILABLE AGE
   alb-ingress-controller 1/1   1          1         122d
   ```

1. Ingrese el siguiente comando para eliminar el controlador.

   ```
   kubectl delete -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.1.8/docs/examples/alb-ingress-controller.yaml
   kubectl delete -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.1.8/docs/examples/rbac-role.yaml
   ```

## Migración al Controlador del equilibrador de carga de AWS
<a name="lbc-migrate"></a>

Para migrar del Controlador de entrada de ALB para Kubernetes al Controlador del equilibrador de carga de AWS, haga lo siguiente:

1. Retire el controlador de entrada de ALB (consulte más arriba).

1.  [Instale el controlador del equilibrador de carga de AWS.](aws-load-balancer-controller.md#lbc-overview) 

1. Agregue una política adicional al rol de IAM utilizado por el Controlador del equilibrador de carga de AWS. Esta política permite al LBC administrar los recursos creados por el Controlador de entrada de ALB para Kubernetes.

1. Descargue la política de IAM. Esta política permite al Controlador del equilibrador de carga de AWS administrar los recursos creados por el Controlador de entrada de ALB para Kubernetes. También puede [ver la política](https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/iam_policy_v1_to_v2_additional.json).

   ```
   curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.14.1/docs/install/iam_policy_v1_to_v2_additional.json
   ```

1. Si su clúster está en las regiones de AWS AWS GovCloud (este de EE. UU.) o AWS GovCloud (oeste de EE. UU.), reemplace ` arn:aws: ` con `arn:aws-us-gov:`.

   ```
   sed -i.bak -e 's|arn:aws:|arn:aws-us-gov:|' iam_policy_v1_to_v2_additional.json
   ```

1. Cree la política de IAM y anote el ARN devuelto.

   ```
   aws iam create-policy \
     --policy-name AWSLoadBalancerControllerAdditionalIAMPolicy \
     --policy-document file://iam_policy_v1_to_v2_additional.json
   ```

1. Adjunte la política de IAM al rol de IAM utilizado por el Controlador del equilibrador de carga de AWS. Sustituya *your-role-name* por el nombre del rol, así como `AmazonEKSLoadBalancerControllerRole`.

   Si creó el rol con `eksctl`, para encontrar el nombre del rol que se creó, abra la [consola de AWS CloudFormation](https://console.aws.amazon.com/cloudformation) y seleccione la pila **eksctl-*my-cluster*-addon-iamserviceaccount-kube-system-aws-load-balancer-controller**. Seleccione la pestaña **Recursos**. El nombre del rol se encuentra en la columna de **ID físicos**.

   ```
   aws iam attach-role-policy \
     --role-name your-role-name \
     --policy-arn arn:aws:iam::111122223333:policy/AWSLoadBalancerControllerAdditionalIAMPolicy
   ```