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
-
Cree una carga de trabajo que desea exponer a Internet.
-
Cree un recurso de
IngressClassParamsy 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. -
Cree un recurso de
IngressClassy especifique que el modo automático de EKS será el controlador del recurso. -
Cree un recurso de
Ingressque 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.
Información sobre cómo Etiquetado de subredes para el modo automático de EKS.
Paso 1: creación de una carga de trabajo
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
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
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
En la siguiente tabla, se enumeran los campos que puede establecer en un recurso IngressClassParams. La configuración se aplica a todos los Ingresses que usan IngressClass.
| Campo | Descripción | Ejemplo de valor |
|---|---|---|
|
|
Define si el equilibrador de carga de aplicación es interno o está orientado a Internet |
|
|
|
Establece el nombre del ALB. El nombre puede tener hasta 32 caracteres. Anula la anotación |
|
|
|
Restringe los espacios de nombres que pueden usar esta IngressClass |
|
|
|
Agrupa varios ingresos para compartir un único equilibrador de carga de aplicación |
|
|
|
Establece el tipo de dirección IP para el ALB. Los valores válidos son |
|
|
|
Lista de identificadores de subred para la implementación del equilibrador de carga de aplicación |
|
|
|
Filtra etiquetas para seleccionar subredes para el ALB. Cada filtro tiene un |
|
|
|
Los ARN de los certificados SSL que se van a utilizar |
|
|
|
Establece la política de seguridad para los oyentes HTTPS. Anula la anotación |
|
|
|
Bloques de CIDR a los que se permite acceder al ALB. Anula la anotación |
|
|
|
Los identificadores de las listas de prefijos gestionadas que pueden acceder al ALB. Anula la anotación |
|
|
|
Establece el tipo de destino para los grupos de destino. Los valores válidos son |
|
|
|
Etiquetas personalizadas para los recursos de AWS |
|
|
|
Atributos específicos del equilibrador de carga |
|
|
|
Establece los atributos de oyente en los oyentes que definan sus Ingresses. Cada entrada hace coincidir un oyente por |
|
|
|
Reserva una capacidad mínima para el ALB, en unidades de capacidad del equilibrador de carga (LCU). Establezca en |
|
|
|
ID del grupo del Administrador de direcciones IP (IPAM) de Amazon VPC que un ALB con acceso a Internet usa para sus direcciones IPv4 públicas. Anula la anotación |
|
Consideraciones
-
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-listsoalb.ingress.kubernetes.io/conditions.*). -
Para establecer los valores de ListenerAttribute para todos los Ingresses de una IngressClass, use el campo
listenersen IngressClassParams. Para obtener más información, consulte Referencia de IngressClassParams. -
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 |
|---|---|---|
|
|
|
Cambio de versión de la API |
|
|
|
Compatibilidad con múltiples ARN de certificados |
|
|
|
Se modificó el esquema de coincidencia de subredes |
|
|
|
Se ha cambiado el nombre del campo para los atributos del oyente |
|
|
|
Solo se admite la ortografía |
|
|
No admitido |
Use la anotación |
|
|
No admitido |
Use la anotación |
|
|
No admitido |
Use la anotación |
Anotaciones de ingreso
| Anteriores | New | Descripción |
|---|---|---|
|
|
No admitido |
Utilice |
|
|
No admitido |
Especifique grupos en IngressClass únicamente |
|
|
No admitido |
En su lugar, utilice WAF v2 |
|
|
No admitido |
En su lugar, utilice WAF v2 |
|
|
No admitido |
No se admite el plan de ejecución en seco actualmente |
|
|
No admitido |
No se admite la creación de certificados de ACM actualmente |
|
|
No admitido |
No se admite el ARN de ACM PCA actualmente |
|
|
Compatible con RBAC adicional |
Conceda al controlador del equilibrador de carga acceso |
TargetGroupBinding
| Anteriores | New | Descripción |
|---|---|---|
|
|
|
Cambio de versión de la API |
|
|
|
Especificación explícita del tipo de destino |
|
|
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.