Pourquoi mon contrôleur AWS Load Balancer ne parvient-il pas à trouver mon sous-réseau dans Amazon EKS ?

Dernière mise à jour : 06/10/2021

Mon contrôleur AWS Load Balancer ne trouve pas mon sous-réseau dans Amazon Elastic Kubernetes Service (Amazon EKS).

Brève description

Vous recevez un message d'erreur si votre contrôleur AWS Load Balancer ne trouve pas votre sous-réseau dans Amazon EKS.

Si vous recevez le message d’erreur suivant, le rôle AWS Identity and Access Management (IAM) de votre compte de service pour le contrôleur AWS Load Balancer ne dispose pas des autorisations requises :

{"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"}

Pour résoudre l'erreur précédente, suivez les étapes de la section Résoudre l'erreur d'autorisation refusée :

-ou-

Si vous recevez l'erreur suivante, cela signifie que votre contrôleur AWS Load Balancer ne peut pas découvrir au moins un sous-réseau :

{"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"}

Pour résoudre l'erreur précédente, suivez les étapes de la section Résoudre l’erreur unique de découverte de sous-réseau :

-ou-

Si vous recevez l'une des erreurs suivantes, cela signifie que votre contrôleur AWS Load Balancer ne peut pas découvrir deux sous-réseaux qualifiés ou plus.

"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"}

Pour résoudre les erreurs précédentes, suivez les étapes de la section Résoudre plusieurs erreurs de découverte de sous-réseau :

Résolution

Résolvez l'erreur d'autorisation refusée

1.    Vérifiez que votre compte de service est associé au contrôleur AWS Load Balancer :

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

Sortie :

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

Remarque : si votre déploiement est effectué dans un espace de noms différent, remplacez -n kube-system par l'espace de noms approprié.

2.    Découvrez quel rôle IAM est attaché au compte de service associé au contrôleur AWS Load Balancer :

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

Sortie :

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

3.    Accordez des autorisations ec2:DescribeAvailabilityZones au rôle IAM que vous identifiez à l'étape 2.

Résolvez l'erreur unique de découverte de sous-réseau

1.    Ajoutez les balises appropriées sur vos sous-réseaux pour permettre au contrôleur d’entrée AWS Load Balancer de créer un équilibreur de charge à l'aide de la découverte automatique.

Exemple de balises de sous-réseaux privés :

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

Exemple de balises de sous-réseaux publics :

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

Remarque : vous pouvez attribuer manuellement des sous-réseaux à votre équilibreur de charge à l'aide de l'annotation alb.ingress.kubernetes.io/subnets. Pour plus d'informations, consultez les annotations d'entrée sur le site Web du contrôleur AWS Load Balancer.

Exemple de sous-réseau avec les balises appropriées pour un cluster avec un équilibreur de charge interne (sous-réseau privé) :

kubernetes.io/role/internal-elb          1

Exemple de sous-réseau avec les balises appropriées pour un cluster avec un équilibreur de charge public (sous-réseau public) :

kubernetes.io/role/elb

2.    Balisez vos sous-réseaux avec le format approprié.

Clé : kubernetes.io/cluster/your-cluster-name

Valeur : shared ou owned

Important : si vous utilisez le contrôleur AWS Load Balancer version 2.1.1 ou antérieure, vous devez baliser vos sous-réseaux dans le format précédent. Le balisage est facultatif pour les versions 2.1.2 ou ultérieures. Il est recommandé de baliser un sous-réseau si l'une des situations suivantes est vraie :

  • Vous disposez de plusieurs clusters exécutés dans le même VPC.
  • Vous disposez de plusieurs services AWS qui partagent des sous-réseaux dans un VPC.
  • Vous souhaitez davantage de contrôle sur l'emplacement de mise en service des équilibreurs de charge pour chaque cluster.

Résolvez plusieurs erreurs de découverte de sous-réseau

1.    Vérifiez que vous disposez d'au moins deux sous-réseaux dans deux zones de disponibilité différentes, ce qui est nécessaire pour créer un Application Load Balancer.

Remarque : vous pouvez créer un dispositif d'équilibrage de charge de réseau avec un seul sous-réseau.

2.    Pour chaque sous-réseau, spécifiez un bloc d'adresse CIDR avec un masque de bits d’au moins /27 (par exemple : 10.0.0.0/27) et au moins huit adresses IP libres.

3.    Vérifiez que les balises des sous-réseaux sont correctement formatées. Par exemple, les balises ne doivent comporter aucun espace de début ou de fin.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?