Creación de una IngressClass para configurar el equilibrador de carga de aplicación - Amazon EKS

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

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?

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.

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

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

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

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

Aprenda cómo Etiquetado de subredes para el modo automático de EKS.

Paso 1: creación de una carga de trabajo

Cree una carga de trabajo que desea exponer a Internet. Puede ser cualquier recurso de Kubernetes que sirva tráfico HTTP, como una implementación o un servicio. Para este ejemplo, utilizamos un servicio HTTP simple llamado service-2048 que sirve el tráfico HTTP en el puerto 80.

Paso 2: creación de IngressClassParams

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

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.

Aplique la configuración al clúster:

kubectl apply -f alb-ingressclass.yaml

Paso 4: creación del ingreso

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

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

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

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

  • No puede usar las anotaciones en una IngressClass para configurar los equilibradores de carga 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.

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

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

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

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

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

spec.listeners.attributes

Nomenclatura de atributos simplificada

Anotaciones de ingreso

Anteriores New Descripción

kubernetes.io/ingress.class

No compatible

Utilice spec.ingressClassName en objetos de ingreso

alb.ingress.kubernetes.io/group.name

No compatible

Especifique grupos en IngressClass únicamente

alb.ingress.kubernetes.io/waf-acl-id

No compatible

En su lugar, utilice WAF v2

alb.ingress.kubernetes.io/web-acl-id

No compatible

En su lugar, utilice WAF v2

alb.ingress.kubernetes.io/shield-advanced-protection

No compatible

Integración de Shield desactivada

alb.ingress.kubernetes.io/auth-type: oidc

No compatible

Actualmente, no se admite el tipo de autenticación OIDC

TargetGroupBinding

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 compatible

Ya no es compatible con equilibradores de carga de red sin grupos de seguridad