¿Cómo soluciono los problemas de los equilibradores de carga creados por el controlador de servicios de Kubernetes en Amazon EKS?

8 minutos de lectura
0

No puedo crear un servicio de Kubernetes respaldado por un equilibrador de carga en Amazon Elastic Kubernetes Service (Amazon EKS).

Descripción breve

Amazon EKS usa uno de los dos controladores para administrar un equilibrador de carga: AWS Load Balancer Controller o el controlador de servicios de Kubernetes. Los siguientes pasos de solución de problemas solo se aplican a los equilibradores de carga administrados por el controlador de servicios de Kubernetes. Para obtener más información, consulte The Service Controller (El controlador de servicios) en el sitio web de AWS Cloud Provider de Kubenetes y escriba LoadBalancer en el sitio web de Kubernetes.

Para solucionar problemas con el equilibrador de carga de servicios, compruebe que cuenta con las siguientes configuraciones:

  • Las etiquetas correctas para sus subredes de Amazon Virtual Private Cloud (Amazon VPC)
  • Los permisos de AWS Identity and Access Management (IAM) necesarios para el rol de IAM de su clúster
  • Una definición de servicio de Kubernetes válida
  • Equilibradores de carga que se mantienen dentro del límite de su cuenta
  • Suficientes direcciones IP gratuitas en sus subredes
  • Un equilibrador de carga configurado correctamente para evitar problemas de tiempo de espera de conexión
  • Objetivos de equilibrador de carga en buen estado

Si sigue teniendo problemas después de comprobar todos los elementos anteriores, siga los pasos de la sección Otros pasos de solución de problemas.

Resolución

Los siguientes pasos se aplican al equilibrador de carga clásico y al equilibrador de carga de red. En el caso del equilibrador de carga de aplicaciones, consulte Equilibrio de carga de aplicaciones en Amazon EKS.

Nota: Si recibe errores al ejecutar los comandos de la interfaz de la línea de comandos de AWS (AWS CLI), asegúrese de utilizar la versión más reciente de AWS CLI.

Utilice las etiquetas correctas para sus subredes de Amazon VPC

1.    Abra la consola de Amazon VPC.

2.    En el panel de navegación, elija Subnets (Subredes).

3.    Elija la pestaña Tags (Etiquetas) para cada subred y, a continuación, confirme que existe una etiqueta. Por ejemplo:

Key: kubernetes.io/cluster/yourEKSClusterName  
Value: shared

Nota: En este caso, el Value (Valor) se puede compartir o poseer.

De forma predeterminada, el controlador descubre automáticamente las subredes. Si hay varias subredes por zona de disponibilidad, el controlador prioriza las subredes en el siguiente orden:

  • Subredes con la etiqueta de rol correcta: kubernetes.io/role/elb para subredes públicas y kubernetes.io/role/internal-elb para subredes privadas
  • Subredes con la etiqueta de clúster: kubernetes.io/cluster/CLUSTER_NAME
  • La subred que ocupa el primer lugar en orden lexicográfico

4.    En el caso de las subredes públicas, confirme que existe la siguiente etiqueta:

Key: kubernetes.io/role/elb  
Value: 1

Nota: Para ver si una subred es pública, compruebe la tabla de enrutamiento que está asociada a la subred. Una subred pública tiene una ruta a una puerta de enlace de Internet (igw-xxxxxxxxxxx). Una subred privada tiene una ruta a Internet a través de una puerta de enlace NAT o una instancia de NAT, o no tiene ninguna ruta a Internet.

Importante: Debe tener la etiqueta del paso 4 para crear un servicio de equilibrador de carga con acceso a Internet. Un equilibrador de carga orientado a Internet dirige las solicitudes de los clientes a los objetivos a través de Internet.

5.    En el caso de las subredes privadas, confirme que existe la siguiente etiqueta:

Key: kubernetes.io/role/internal-elb  
Value: 1

Importante: Debe tener la etiqueta del paso 5 para crear un servicio de equilibrador de carga interno. Un equilibrador de carga interno usa direcciones IP privadas para dirigir las solicitudes a los destinos.

Defina los permisos de AWS Identity and Access Management (IAM) necesarios para el rol de IAM de su clúster

1.    Abra la consola de Amazon EKS.

2.    En el panel de navegación, seleccione Clusters (Clústeres).

3.    Seleccione su clúster y, a continuación, anote el ARN del rol de IAM del clúster.

  1.     Abra la consola de IAM.

5.    En el panel de navegación, seleccione Roles (Roles).

6.    Seleccione el rol que coincida con el ARN del rol de IAM del clúster que identificó en el paso 3.

7.    Confirme que la política administrada de AWS AmazonEKSClusterPolicy esté asociada a su rol.

Nota: El plano de control de Amazon EKS asume el rol de IAM anterior para crear un equilibrador de carga para su servicio.

Uso de una definición de servicio de Kubernetes válida

En el archivo YAML de su servicio de Kubernetes, compruebe que spec.type esté configurado en LoadBalancer.

Consulte el siguiente ejemplo de un servicio de Kubernetes respaldado por un equilibrador de carga:

apiVersion: v1  
kind: Service  
metadata:  
  annotations:  
    # This annotation is only required if you are creating an internal facing ELB. Remove this annotation to create public facing ELB.  
    service.beta.kubernetes.io/aws-load-balancer-internal: "true"  
  name: nginx-elb  
  labels:  
    app: nginx  
spec:  
  type: LoadBalancer  
  ports:  
  - name: "http"  
    port: 80  
    targetPort: 80  
  selector:  
    app: nginx

Nota: Para personalizar su servicio con una anotación diferente, consulte Balanceador de carga interno y Soporte para TLS en AWS en el sitio web de Kubernetes.

De forma predeterminada, el controlador de servicios integrado de Kubernetes crea un equilibrador de carga clásico. Para el suministro del equilibrador de carga de red, el servicio debe tener la anotación service.beta.kubernetes.io/aws-load-balancer-type: «nlb». Para obtener más información, consulte Soporte para Balanceador de Carga de Red (NLB) en AWS en el sitio web de Kubernetes.

Compruebe que sus equilibradores de carga estén dentro del límite de su cuenta

De forma predeterminada, una cuenta de AWS tiene un máximo de 20 equilibradores de carga por región de AWS.

Para comprobar cuántos equilibradores de carga tiene, abra la consola de Amazon Elastic Compute Cloud (Amazon EC2). A continuación, seleccioneLoad Balancers (Equilibradores de carga) en el panel de navegación.

Si alcanza el número máximo de equilibradores de carga, puede solicitar un aumento con Service Quotas.

Verifique que haya suficientes direcciones IP libres en sus subredes

Para crear un equilibrador de carga, cada subred de ese equilibrador de carga debe tener un mínimo de ocho direcciones IP libres. Esto es necesario tanto para el equilibrador de carga clásico como para el equilibrador de carga de red.

Problemas de tiempo de espera de conexión

Si el equilibrador de carga tiene problemas de tiempo de espera intermitentes o constantes, es posible que haya un problema con su configuración. Esto puede ocurrir cuando el servicio de backend no puede gestionar el tráfico entrante o se envían demasiadas solicitudes al equilibrador de carga. Para obtener más información, consulte ¿Cómo soluciono los problemas de “Connection timed out” (Tiempo de espera de conexión agotado) de Elastic Load Balancing?

Verificación de las comprobaciones de estado del equilibrador de carga

Si no configura correctamente el punto de conexión o el servicio de backend no responde a las solicitudes de comprobación de estado, se producen problemas con la comprobación del estado del equilibrador de carga.

Para comprobar que el equilibrador de carga apunta al punto de conexión correcto, ejecute el comando describe-target-health de la AWS CLI:

aws elbv2 describe-target-health --target-group-arn arn:aws:elasticloadbalancing:us-west-2:1234567890:targetgroup/my-targets/6d0ecf831eec9f09

Para comprobar la configuración de comprobación de estado del grupo objetivo, ejecute el comando describe-target-groups de la AWS CLI:

aws elbv2 describe-target-groups --target-group-arns arn:aws:elasticloadbalancing:us-west-2:1234567890:targetgroup/my-targets/6d0ecf831eec9f09

Para obtener más información, consulte Health checks for your target groups (Comprobaciones de estado para sus grupos objetivo).

Otros pasos de solución de problemas

Para comprobar si hay un mensaje de error en el servicio de Kubernetes que pueda servir para solucionar el problema, ejecute el siguiente comando describe-service:

$ kubectl describe service my-elb-service

Si el servicio se ha creado correctamente, recibirá un resultado similar al siguiente ejemplo:

...  
...  
Events:  
  Type    Reason                Age   From                Message  
  ----    ------                ----  ----                -------  
  Normal  EnsuringLoadBalancer  47s   service-controller  Ensuring load balancer  
  Normal  EnsuredLoadBalancer   44s   service-controller  Ensured load balancer

Si el servicio no se ha creado correctamente, recibirá un mensaje de error.

Para obtener más información sobre los mensajes de error, consulte los siguientes recursos:

Información relacionada

Why does a subnet in use by load balancers in my VPC have insufficient IP addresses? (¿Por qué una subred que utilizan los equilibradores de carga de mi VPC no tiene suficientes direcciones IP?)

Solución de problemas de Amazon EKS

Troubleshoot your Application Load Balancers (Solución de problemas del equilibrador de carga de aplicación)

Troubleshoot your Classic Load Balancer (Solución de problemas del equilibrador de carga clásico)

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año