¿Por qué el controlador del balanceador de carga de AWS no puede encontrar mi subred en Amazon EKS?

Actualización más reciente: 06-10-2021

El controlador del balanceador de carga de AWS no puede encontrar mi subred en Amazon Elastic Kubernetes Service (Amazon EKS).

Descripción breve

Aparece un error si el controlador del balanceador de carga de AWS no puede encontrar la subred en Amazon EKS.

Si recibe el siguiente error, significa que el rol de AWS Identity and Access Management (IAM) de la cuenta de servicio correspondiente al controlador del balanceador de carga de AWS no tiene los permisos necesarios:

{"level":"error","ts":1621443417.9175518,"logger":"controller","msg":"Reconciler error","controller":"ingress","name":" ingress-2048","namespace":" game-2048","error":"couldn't auto-discover subnets: UnauthorizedOperation: You are not authorized to perform this operation.\n\tstatus code: 403, request id: 72ee57ae-f804-4f81-b069-8b04114b67b0"}

Para resolver el error anterior, siga los pasos que se indican en la sección Resolver el error de permiso denegado:

-o bien-

Si recibe el siguiente error, significa que el controlador del balanceador de carga de AWS no puede detectar al menos una subred:

{"level":"error","ts":1608229710.3212903,"logger":"controller","msg":"Reconciler error","controller":"ingress","name":"ingress-2048","namespace":"game-2048","error":"couldn't auto-discover subnets: unable to discover at least one subnet"}

Para resolver el error anterior, siga los pasos que se indican en la sección Resolver el error de detección de una sola subred:

-o bien-

Si recibe alguno de los siguientes errores, significa que el controlador del balanceador de carga de AWS no puede descubrir dos o más subredes cualificadas.

"msg"="Reconciler error" "error"="failed to build LoadBalancer configuration due to failed to resolve 2 qualified subnet with at least 8 free IP Addresses for ALB
{"level":"error","ts":1606329481.2930484,"logger":"controller","msg":"Reconciler error","controller":"ingress","name":"reciter-ing","namespace":"reciter","error":"InvalidSubnet: Not enough IP space available in subnet-xxxxxxxxxxxxxx. ELB requires at least 8 free IP addresses in each subnet.\n\tstatus code: 400, request id: 2a37780c-f411-xxxxx-xxxxx-xxxxxxxxx"}

Para resolver los errores anteriores, siga los pasos que se indican en la sección Resolver errores de detección de múltiples subredes:

Resolución

Resuelva el error de permiso denegado

1.    Verifique que la cuenta de servicio esté asociada al controlador del balanceador de carga de AWS:

$ kubectl get deploy aws-load-balancer-controller -n kube-system -o yaml | grep -i serviceAccount

Salida:

serviceAccount: aws-load-balancer-controller
serviceAccountName: aws-load-balancer-controller

Nota: Si la implementación se realiza en un espacio de nombres diferente, remplace -n kube-system por el espacio de nombres adecuado.

2.    Consulte qué rol de IAM está asociado a la cuenta de servicio asociada al controlador del balanceador de carga de AWS:

$ kubectl describe sa aws-load-balancer-controller -n kube-system | grep role-arn

Salida:

annotations: eks.amazonaws.com/role-arn: arn:aws:iam::xxxxxxxxxxx:role/eksctl-cluster18-addon-iamserviceaccount-kub-Role1-xxxxxxxxxxxxx

3.    Conceda permisos ec2:DescribeAvailabilityZones al rol de IAM que identifica en el paso 2.

Resuelva el error de detección de una sola subred

1.    Agregue las etiquetas apropiadas en las subredes para permitir que el controlador de ingreso del balanceador de carga de AWS cree un balanceador de carga mediante la detección automática.

Ejemplo de etiquetas de subredes privadas:

kubernetes.io/role/internal-elb                Set to 1 or empty tag value for internal load balancers

Ejemplo de etiquetas de subredes públicas:

kubernetes.io/role/elb                         Set to 1 or empty tag value for internet-facing load balancers

Nota: Puede asignar subredes manualmente al balanceador de carga mediante la anotación alb.ingress.kubernetes.io/subnets. Para obtener más información, consulte Anotaciones de ingreso en el sitio web del controlador del balanceador de carga de AWS.

Ejemplo de una subred con las etiquetas apropiadas para un clúster con un balanceador de carga interno (subred privada):

kubernetes.io/role/internal-elb          1

Ejemplo de una subred con las etiquetas apropiadas para un clúster con un balanceador de carga público (subred pública):

kubernetes.io/role/elb

2.    Etiquete las subredes con el formato adecuado.

Clave: kubernetes.io/cluster/your-cluster-name

Valor: compartido o propio

Importante: Si utiliza la versión v2.1.1 o anteriores del controlador del balanceador de carga de AWS, debe etiquetar las subredes con el formato anterior. El etiquetado es opcional para las versiones 2.1.2 o posteriores. Es una práctica recomendada etiquetar una subred en caso de que se cumpla alguna de las siguientes condiciones:

  • Tiene varios clústeres que se ejecutan en la misma VPC.
  • Tiene varios servicios de AWS que comparten subredes en una VPC.
  • Desea ejercer un mayor control sobre dónde se aprovisionan los balanceadores de carga para cada clúster.

Resolver los errores de descubrimiento de múltiples subredes

1.    Confirme que tiene al menos dos subredes en dos zonas de disponibilidad diferentes. Este es un requisito para crear un balanceador de carga de aplicaciones.

Nota: Puede crear un balanceador de carga de red con una sola subred.

2.    Para cada subred, especifique un bloque CIDR con al menos una máscara de bits /27 (por ejemplo: 10.0.0.0/27) y al menos ocho direcciones IP libres.

3.    Confirme que lasetiquetas de las subredes tengan el formato correcto. Por ejemplo, las etiquetas no deben tener espacios al principio ni al final.


¿Le resultó útil este artículo?


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