¿Cómo puedo solucionar problemas al crear un balanceador de carga con el controlador del balanceador de carga de AWS?

Última actualización: 29/10/2021

No puedo crear un balanceador de carga de red (NLB) ni un balanceador de carga de aplicaciones (ALB) con el controlador del balanceador de carga de AWS (anteriormente conocido como controlador de entrada del ALB). O bien, el balanceador de carga no se crea después de crear el servicio o los objetos de entrada. ¿Cómo puedo solucionar este problema?

Descripción corta

Para solucionar problemas de creación del balanceador de carga, haga lo siguiente:

  • Asegúrese de que se cumplen todos los requisitos previos.
  • Verifique las anotaciones del objeto de entrada (ALB) o servicio (NLB).
  • Consulte los registros del pod del controlador del balanceador de carga de AWS para obtener información adicional.
  • Si el clúster se ejecuta en AWS Fargate, compruebe que se haya creado un perfil de Fargate para el espacio de nombres en el que reside el objeto de entrada o servicio.
  • Compruebe que no haya dependencias sin abordar.

Resolución

Asegúrese de que se cumplen todos los requisitos previos.

Para obtener una lista de los requisitos previos del ALB, consulte Balanceador de carga de aplicaciones en Amazon Elastic Kubernetes Service (Amazon EKS). Para obtener una lista de los requisitos previos del NLB, consulte Balanceador de carga de red en Amazon EKS.

1.    Compruebe que el controlador del balanceador de carga de AWS se haya aprovisionado correctamente.

2.    Verifique el número de subredes. ALB necesita al menos dos subredes y NLB necesita al menos una. Para obtener más información, consulte Ver la subred.

3.    Debe utilizar la siguiente etiqueta en determinados escenarios:

  • Clave: “kubernetes.io/cluster/cluster-name”
  • Valor: “shared” (compartido) o “owned” (propio)

Si utiliza un balanceador de carga de aplicaciones

Debe etiquetar exactamente un grupo de seguridad en los siguientes escenarios:

  • Utiliza varios grupos de seguridad adjuntos al nodo de trabajo.
  • Utiliza el controlador del balanceador de carga de AWS versión v2.1.1 o anterior.

Si utiliza un balanceador de carga de red

Si utiliza el controlador del balanceador de carga de AWS versión v2.1.1 o anterior, las subredes deben etiquetarse.

Para obtener información sobre cómo agregar etiquetas desde la consola de Amazon EC2, consulte Trabajar con etiquetas mediante la consola. Para obtener información sobre cómo agregar etiquetas mediante la interfaz de línea de comandos de AWS, consulte Trabajar con etiquetas mediante la línea de comandos.

Nota: si recibe errores al ejecutar comandos de AWS CLI, asegúrese de que utiliza la versión más reciente de AWS CLI.

4.    A menos que los ID de subred se especifiquen explícitamente como anotaciones en el objeto de entrada o servicio, asegúrese de que las subredes tengan las siguientes etiquetas. Sin estas etiquetas, la detección automática de subred no funcionará.

Etiqueta de subredes privadas:

  • Clave: “kubernetes.io/role/internal-elb”
  • Valor: “1”

Etiqueta de subredes públicas:

  • Clave: “kubernetes.io/role/elb”
  • Valor: “1”

Verifique las anotaciones del objeto de entrada (ALB) o servicio (NLB)

Compruebe las anotaciones del objeto de servicio o las anotaciones del objeto de entrada. Las anotaciones necesarias para configurar un balanceador de carga son las siguientes:

Nota: Otras anotaciones utilizan valores predeterminados.

Balanceador de carga de aplicaciones

  • kubernetes.io/ingress.class: alb (garantiza que los objetos de entrada utilicen el controlador del balanceador de carga de AWS)

Balanceador de carga de red

  • Con destinos IP: service.beta.kubernetes.io/aws-load-balancer-type: “external” service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: “ip”
  • Con destinos de instancia: service.beta.kubernetes.io/aws-load-balancer-type: “external” service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: “instance”

Ejecute uno de los comandos siguientes para ver el objeto de servicio o entrada. En el siguiente ejemplo, sustituya SERVICE-NAME/INGRESS-NAME y NAMESPACE por los valores correctos para el caso de uso.

kubectl describe service <SERVICE-NAME> -n <NAMESPACE>
kubectl describe ingress <INGRESS-NAME> -n <NAMESPACE>

Ejecute uno de los comandos siguientes para editar el objeto de servicio o entrada. En los siguientes ejemplos, sustituya SERVICE-NAME/INGRESS-NAME y NAMESPACE por los valores correctos para el caso de uso:

kubectl edit service <SERVICE-NAME> -n <NAMESPACE>
kubectl edit ingress <INGRESS-NAME> -n <NAMESPACE>

Revise los registros del pod del controlador del balanceador de carga de AWS para obtener información adicional

Ejecute el siguiente comando para revisar los registros del controlador del balanceador de carga de AWS:

kubectl logs -n kube-system deployment.apps/aws-load-balancer-controller

Si ninguno de los pods del controlador muestra registros, asegúrese de que los pods del controlador estén en ejecución:

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

Si el clúster se ejecuta en Fargate, compruebe que se ha creado un perfil de Fargate para el espacio de nombres en el que reside el objeto entrada o servicio

Ejecute los siguientes comandos para comprobar que se haya creado un perfil de Fargate para el espacio de nombres en el que reside el objeto de entrada o servicio. En el siguiente ejemplo, reemplace CLUSTER-NAME por el nombre del clúster.

eksctl get fargateprofile --cluster <CLUSTER-NAME> -o yaml

Para crear un perfil de Fargate, ejecute el siguiente comando. En el siguiente ejemplo, sustituya CLUSTER-NAME, REGION, FARGATE-PROFILE-NAME y NAMESPACE por los valores correctos para el caso de uso.

eksctl create fargateprofile --cluster <CLUSTER-NAME> --region <REGION> --name <FARGATE-PROFILE-NAME> --namespace <NAMESPACE>

Comprobar si hay dependencias sin abordar

Revise la documentación para asegurarse de que se cumplen todas las dependencias. Para el ALB, consulte Balanceador de carga de aplicaciones en EKS. Para el NLB, consulte Balanceador de carga de red en Amazon EKS.

Por ejemplo, si utiliza el ALB, el objeto de servicio debe especificar NodePort o LoadBalancer para utilizar el modo de tráfico de instancias.


¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?