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

5 minutos de lectura
0

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

Descripción breve

Si su controlador del equilibrador de carga de AWS no puede encontrar la subred en Amazon EKS, entonces recibirá un error. Para solucionar el error, siga los pasos pertinentes para el mensaje de error que reciba.

El siguiente error ocurre cuando el rol de AWS Identity and Access Management (IAM) de la cuenta del controlador del equilibrador 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-

El siguiente error ocurre cuando el controlador del equilibrador 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-

Los siguientes errores ocurren cuando el controlador del equilibrador 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.    Ingrese el siguiente comando para verificar que la cuenta de servicio esté asociada al controlador del equilibrador de carga de AWS:

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

Obtendrá un resultado similar al siguiente:

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

Nota: Si el despliegue se realiza en un espacio de nombres diferente, reemplace -n kube-system por el espacio de nombres adecuado.

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

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

Obtendrá un resultado similar al siguiente:

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 equilibrador de carga de AWS cree un equilibrador de carga mediante la detección automática.

El siguiente es un ejemplo de etiquetas de subredes privadas:

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

El siguiente es un ejemplo de etiquetas de subredes privadas:

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

Nota: Puede asignar subredes manualmente al equilibrador 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 equilibrador de carga de AWS.

El siguiente es un ejemplo de una subred con las etiquetas apropiadas para un clúster con un equilibrador de carga interno (subred privada):

kubernetes.io/role/internal-elb          1

El siguiente es un ejemplo de una subred con las etiquetas apropiadas para un clúster con un equilibrador 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 equilibrador de carga de aplicación.

Nota: Puede crear un equilibrador 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 las etiquetas de las subredes tengan el formato correcto. Por ejemplo, las etiquetas no pueden tener espacios al principio ni al final.


OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 5 meses