

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

# Creación de una IngressClass para configurar el equilibrador de carga de aplicación
<a name="auto-configure-alb"></a>

El modo automático de EKS automatiza las tareas rutinarias de equilibrio de carga, incluida la exposición de las aplicaciones del clúster a Internet.

 AWS sugiere usar equilibradores de carga de aplicación (ALB) para atender el tráfico HTTP y HTTPS. Los equilibradores de carga de aplicación pueden dirigir las solicitudes en función del contenido de la solicitud. Para obtener más información sobre los equilibradores de carga de aplicación, consulte [¿Qué es un equilibrador de carga de aplicación?](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) 

El modo automático de EKS crea y configura equilibradores de carga de aplicación (ALB). Por ejemplo, el modo automático de EKS crea un equilibrador de carga cuando se crea un objeto de Kubernetes de `Ingress` y lo configura de modo que dirija el tráfico a la carga de trabajo del clúster.

 **Información general** 

1. Cree una carga de trabajo que desea exponer a Internet.

1. Cree un recurso de `IngressClassParams` y especifique los valores de configuración específicos de AWS, como el certificado que se utilizará para SSL/TLS y las subredes de la VPC.

1. Cree un recurso de `IngressClass` y especifique que el modo automático de EKS será el controlador del recurso.

1. Cree un recurso de `Ingress` que asocie una ruta HTTP y un puerto a una carga de trabajo de clúster.

El modo automático de EKS creará un equilibrador de carga de aplicación que apunte a la carga de trabajo especificada en el recurso de `Ingress`, con la configuración del equilibrador de carga especificada en el recurso de `IngressClassParams`.

## Requisitos previos
<a name="_prerequisites"></a>
+ El modo automático de EKS habilitado en un clúster de Amazon EKS
+ Kubectl configurado para establecer conexión con el clúster
  + Puede utilizar `kubectl apply -f <filename>` para aplicar al clúster los archivos YAML de configuración de ejemplo que aparecen a continuación.

**nota**  
El modo automático de EKS requiere etiquetas de subred para identificar las subredes públicas y privadas.  
Si creó el clúster con `eksctl`, ya dispone de estas etiquetas.  
Información sobre cómo [Etiquetado de subredes para el modo automático de EKS](tag-subnets-auto.md).

## Paso 1: creación de una carga de trabajo
<a name="_step_1_create_a_workload"></a>

Para comenzar, cree una carga de trabajo que desee exponer a Internet. Puede ser cualquier recurso de Kubernetes que sirva tráfico HTTP, como una implementación o un servicio.

En este ejemplo, se utiliza un servicio HTTP simple llamado `service-2048` que escucha en el puerto `80`. Para crear este servicio y su implementación, aplique el siguiente manifiesto, `2048-deployment-service.yaml`:

```
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-2048
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: app-2048
  replicas: 2
  template:
    metadata:
      labels:
        app.kubernetes.io/name: app-2048
    spec:
      containers:
        - image: public.ecr.aws/l6m2t8p7/docker-2048:latest
          imagePullPolicy: Always
          name: app-2048
          ports:
            - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: service-2048
spec:
  ports:
    - port: 80
      targetPort: 80
      protocol: TCP
  type: NodePort
  selector:
    app.kubernetes.io/name: app-2048
```

Aplique la configuración al clúster:

```
kubectl apply -f 2048-deployment-service.yaml
```

Los recursos enumerados anteriormente se crearán en el espacio de nombres predeterminado. Para verificarlo, ejecute el siguiente comando:

```
kubectl get all -n default
```

## Paso 2: creación de IngressClassParams
<a name="_step_2_create_ingressclassparams"></a>

Cree un objeto de `IngressClassParams` para especificar opciones de configuración específicas de AWS para el equilibrador de carga de aplicación. En este ejemplo, creamos un recurso `IngressClassParams` denominado `alb` (que utilizará en el siguiente paso) que especifica el esquema del equilibrador de carga, tal como se muestra `internet-facing` en un archivo llamado `alb-ingressclassparams.yaml`.

```
apiVersion: eks.amazonaws.com/v1
kind: IngressClassParams
metadata:
  name: alb
spec:
  scheme: internet-facing
```

Aplique la configuración al clúster:

```
kubectl apply -f alb-ingressclassparams.yaml
```

## Paso 3: creación de IngressClass
<a name="_step_3_create_ingressclass"></a>

Cree una `IngressClass` que haga referencia a los valores de configuración específicos de AWS establecidos en el recurso `IngressClassParams` en un archivo llamado `alb-ingressclass.yaml`. Anote el nombre de la `IngressClass`. En este ejemplo, se asigna el nombre de `alb` tanto a la `IngressClass` como a los `IngressClassParams`.

Utilice la anotación `is-default-class` para controlar si los recursos de `Ingress` deben usar esta clase de forma predeterminada.

```
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: alb
  annotations:
    # Use this annotation to set an IngressClass as Default
    # If an Ingress doesn't specify a class, it will use the Default
    ingressclass.kubernetes.io/is-default-class: "true"
spec:
  # Configures the IngressClass to use EKS Auto Mode
  controller: eks.amazonaws.com/alb
  parameters:
    apiGroup: eks.amazonaws.com
    kind: IngressClassParams
    # Use the name of the IngressClassParams set in the previous step
    name: alb
```

Para obtener más información acerca de las opciones de configuración, consulte [Referencia de IngressClassParams](#ingress-reference).

Aplique la configuración al clúster:

```
kubectl apply -f alb-ingressclass.yaml
```

## Paso 4: creación del ingreso
<a name="_step_4_create_ingress"></a>

Cree un recurso `Ingress` en un archivo llamado `alb-ingress.yaml`. El propósito de este recurso es asociar las rutas y los puertos del equilibrador de carga de aplicación a las cargas de trabajo del clúster. Para este ejemplo, creamos un recurso `Ingress` denominado `2048-ingress` que enruta el tráfico a un servicio denominado `service-2048` en el puerto 80.

Para obtener más información sobre la configuración de este recurso, consulte [Ingreso](https://kubernetes.io/docs/concepts/services-networking/ingress/) en la documentación de Kubernetes.

```
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: 2048-ingress
spec:
  # this matches the name of IngressClass.
  # this can be omitted if you have a default ingressClass in cluster: the one with ingressclass.kubernetes.io/is-default-class: "true"  annotation
  ingressClassName: alb
  rules:
    - http:
        paths:
          - path: /*
            pathType: ImplementationSpecific
            backend:
              service:
                name: service-2048
                port:
                  number: 80
```

Aplique la configuración al clúster:

```
kubectl apply -f alb-ingress.yaml
```

## Paso 5: comprobación del estado
<a name="_step_5_check_status"></a>

Utilice `kubectl` para encontrar el estado de `Ingress`. El equilibrador de carga puede tardar unos minutos en estar disponible.

Utilice el nombre del recurso de `Ingress` que definió en el paso anterior. Por ejemplo:

```
kubectl get ingress 2048-ingress
```

Una vez que el recurso esté listo, recupere el nombre de dominio del equilibrador de carga.

```
kubectl get ingress 2048-ingress -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'
```

Para ver el servicio en un navegador web, revise el puerto y la ruta especificados en el recurso de `Ingress`.

## Paso 6: Efectúe una limpieza
<a name="_step_6_cleanup"></a>

Para limpiar el equilibrador de carga, utilice el siguiente comando:

```
kubectl delete ingress 2048-ingress
kubectl delete ingressclass alb
kubectl delete ingressclassparams alb
```

El modo automático de EKS eliminará automáticamente el equilibrador de carga asociado en la cuenta de AWS.

## Referencia de IngressClassParams
<a name="ingress-reference"></a>

La siguiente tabla es una referencia rápida de las opciones de configuración que se utilizan con mayor frecuencia.


| Campo | Descripción | Ejemplo de valor | 
| --- | --- | --- | 
|  `scheme`  | Define si el equilibrador de carga de aplicación es interno o está orientado a Internet |  `internet-facing`  | 
|  `namespaceSelector`  | Restringe los espacios de nombres que pueden usar esta IngressClass |  `environment: prod`  | 
|  `group.name`  | Agrupa varios ingresos para compartir un único equilibrador de carga de aplicación |  `retail-apps`  | 
|  `ipAddressType`  | Establece el tipo de dirección IP para el equilibrador de carga de aplicación |  `dualstack`  | 
|  `subnets.ids`  | Lista de identificadores de subred para la implementación del equilibrador de carga de aplicación |  `subnet-xxxx, subnet-yyyy`  | 
|  `subnets.tags`  | Etiquete los filtros para seleccionar las subredes del equilibrador de carga de aplicación |  `Environment: prod`  | 
|  `certificateARNs`  | Los ARN de los certificados SSL que se van a utilizar |  ` arn:aws:acm:region:account:certificate/id`  | 
|  `tags`  | Etiquetas personalizadas para los recursos de AWS |  `Environment: prod, Team: platform`  | 
|  `loadBalancerAttributes`  | Atributos específicos del equilibrador de carga |  `idle_timeout.timeout_seconds: 60`  | 

## Consideraciones
<a name="_considerations"></a>
+ No puede usar las anotaciones en una IngressClass para configurar los equilibradores de carga con el modo automático de EKS. La configuración de IngressClass debe realizarse a través de IngressClassParams. Sin embargo, puede usar anotaciones en los recursos de entrada individuales para configurar el comportamiento del equilibrador de carga (por ejemplo, `alb.ingress.kubernetes.io/security-group-prefix-lists` o `alb.ingress.kubernetes.io/conditions.*`).
+ No puede configurar [ListenerAttribute](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_ListenerAttribute.html) con el Modo automático de EKS.
+ Debe actualizar el rol de IAM del clúster para permitir la propagación de etiquetas desde Kubernetes a los recursos del equilibrador de carga de AWS. Para obtener más información, consulte [Etiquetas personalizadas de AWS para los recursos del modo automático de EKS](auto-cluster-iam-role.md#tag-prop).
+ Para obtener información sobre la asociación de recursos con el modo automático de EKS o con el controlador del equilibrador de carga de AWS autoadministrado, consulte [Referencia para las migraciones](migrate-auto.md#migration-reference).
+ Para obtener información sobre cómo solucionar problemas con los equilibradores de carga, consulte [Solución de problemas del modo automático de EKS](auto-troubleshoot.md).
+ Para conocer más aspectos a tener en cuenta a la hora de utilizar la capacidad de equilibrio de carga del modo automático de EKS, consulte [Equilibrio de carga](auto-networking.md#auto-lb-consider).

Las siguientes tablas proporcionan una comparación detallada de los cambios en las configuraciones de IngressClassParams, Ingress Annotations y TargetGroupBinding para el modo automático de EKS. Estas tablas destacan las principales diferencias entre la capacidad de equilibrio de carga del modo automático de EKS y el controlador del equilibrador de carga de código abierto, incluidos los cambios en la versión de la API, las características obsoletas y la actualización de los nombres de los parámetros.

### IngressClassParams
<a name="_ingressclassparams"></a>


| Anteriores | New | Descripción | 
| --- | --- | --- | 
|  `elbv2.k8s.aws/v1beta1`  |  `eks.amazonaws.com/v1`  | Cambio de versión de la API | 
|  `spec.certificateArn`  |  `spec.certificateARNs`  | Compatibilidad con múltiples ARN de certificados | 
|  `spec.subnets.tags`  |  `spec.subnets.matchTags`  | Se modificó el esquema de coincidencia de subredes | 
|  `spec.listeners.listenerAttributes`  | No admitido | Etiquetas que aún no son compatibles con el Modo automático de EKS | 

### Anotaciones de ingreso
<a name="_ingress_annotations"></a>


| Anteriores | New | Descripción | 
| --- | --- | --- | 
|  `kubernetes.io/ingress.class`  | No admitido | Utilice `spec.ingressClassName` en objetos de ingreso | 
|  `alb.ingress.kubernetes.io/group.name`  | No admitido | Especifique grupos en IngressClass únicamente | 
|  `alb.ingress.kubernetes.io/waf-acl-id`  | No admitido | En su lugar, utilice WAF v2 | 
|  `alb.ingress.kubernetes.io/web-acl-id`  | No admitido | En su lugar, utilice WAF v2 | 
|  `alb.ingress.kubernetes.io/shield-advanced-protection`  | No admitido | Integración de Shield desactivada | 
|  `alb.ingress.kubernetes.io/auth-type: oidc`  | No admitido | Actualmente, no se admite el tipo de autenticación OIDC | 

### TargetGroupBinding
<a name="_targetgroupbinding"></a>


| Anteriores | New | Descripción | 
| --- | --- | --- | 
|  `elbv2.k8s.aws/v1beta1`  |  `eks.amazonaws.com/v1`  | Cambio de versión de la API | 
|  `spec.targetType` opcional |  `spec.targetType` obligatorio | Especificación explícita del tipo de destino | 
|  `spec.networking.ingress.from`  | No admitido | Ya no es compatible con equilibradores de carga de red sin grupos de seguridad | 

Para utilizar la característica TargetGroupBinding personalizada, debe etiquetar el grupo de destino con la etiqueta eks:eks-cluster-name con el nombre del clúster para conceder al controlador los permisos de IAM necesarios. Tenga en cuenta que el controlador eliminará el grupo de destino cuando se elimine el recurso TargetGroupBinding o el clúster.