¿Cómo soluciono los problemas de los equilibradores de carga creados por el controlador de servicios de Kubernetes en Amazon EKS?
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.
- 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:
- Utilice los registros del plano de control de Amazon EKS.
- Obtenga más información sobre el servicio LoadBalancer de Kubernetes en el sitio web de Kubernetes.
- Consulte el proveedor de nube de AWS en el sitio web GitHub de Kubernetes.
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)
Vídeos relacionados
Contenido relevante
- OFICIAL DE AWSActualizada hace 7 meses
- OFICIAL DE AWSActualizada hace 7 meses
- OFICIAL DE AWSActualizada hace 8 meses
- OFICIAL DE AWSActualizada hace 2 años