Comment résoudre les problèmes liés aux équilibreurs de charge de service pour Amazon EKS ?

Date de la dernière mise à jour : 24/08/2021

Je ne peux pas créer un service Kubernetes basé sur un équilibreur de charge dans Amazon Elastic Kubernetes Service (Amazon EKS).

Brève description

Pour résoudre les problèmes liés à votre équilibreur de charge de service, vérifiez que vous disposez des éléments suivants :

  • Les balises correctes pour vos sous-réseaux Amazon Virtual Private Cloud (Amazon VPC)
  • Les autorisations AWS Identity and Access Management (IAM) requises pour le rôle IAM de votre cluster
  • Une définition de service Kubernetes valide
  • Équilibreurs de charge qui restent dans la limite de votre compte
  • Assez d'adresses IP libres sur vos sous-réseaux

Si vous rencontrez toujours un problème après avoir vérifié tous les éléments précédents, suivez les étapes de la section Essayer des étapes de résolution des problèmes supplémentaires.

Résolution

Remarque : les étapes suivantes s'appliquent au Classic Load Balancer et au Network Load Balancer. Pour l'Application Load Balancer, consultez la section Application Load Balancing sur Amazon EKS.

Utiliser les balises correctes pour vos sous-réseaux Amazon VPC

1.    Ouvrez la console AWS VPC.

2.    Dans le volet de navigation, sélectionnezSubnets (Sous-réseaux).

3.    Sélectionnez l'onglet Balises pour chaque sous-réseau, puis confirmez qu'une balise existe. Par exemple :

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

4.    Pour vos sous-réseaux publics, vérifiez que la balise suivante existe :

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

Remarque : pour voir si un sous-réseau est un sous-réseau public, vérifiez la table de routage associée au sous-réseau. Un sous-réseau public possède une route vers une passerelle Internet (igw-xxxxxxxxxxx). Un sous-réseau privé a une route vers Internet via une passerelle NAT ou une instance NAT, ou aucune route vers Internet du tout.

Important : Vous devez disposer de la balise à l'étape 4 pour créer un service d'équilibreur de charge accessible sur Internet.

5.    Pour vos sous-réseaux privés, vérifiez que la balise suivante existe :

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

Important : vous devez disposer de la balise à l'étape 5 pour créer un service d'équilibreur de charge accessible en interne.

Définir les autorisations IAM requises pour le rôle IAM de votre cluster

1.    Ouvrez la console Amazon EKS.

2.    Dans le panneau de navigation, sélectionnez Clusters.

3.    Sélectionnez votre cluster, puis notez votre ARN de rôle IAM de cluster.

4.    Ouvrez la console IAM.

5.    Dans le volet de navigation, choisissez Roles (Rôles).

6.    Sélectionnez le rôle correspondant à l'ARN de rôle IAM de cluster que vous avez identifié à l'étape 3.

7.    Vérifiez que la stratégie gérée AWS AmazonEKSClusterPolicy est attachée à votre rôle.

Remarque : le plan de contrôle Amazon EKS assume le rôle IAM précédent pour créer un équilibreur de charge pour votre service.

Utiliser une définition de service Kubernetes valide

1.    Dans le fichier YAML de votre service Kubernetes, vérifiez que spec.type est défini sur LoadBalancer.

Voici un exemple de service Kubernetes basé sur un équilibreur de charge :

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

Remarque : pour personnaliser votre service avec une annotation différente, consultez Équilibreur de charge interne et Prise en charge TLS sur AWS. Si vous utilisez un contrôleur d'équilibreur de charge AWS pour gérer un dispositif d'équilibrage de charge de réseau, vos annotations doivent correspondre à la définition du service Kubernetes. Pour en savoir plus, consultez la section Équilibrage de charge réseau sur Amazon EKS.

Vérifier que vos équilibreurs de charge se trouvent dans la limite de votre compte

Un compte AWS possède un maximum de 20 équilibreurs de charge par région AWS par défaut.

Pour vérifier le nombre d'équilibreurs de charge dont vous disposez, ouvrez la console Amazon Elastic Compute Cloud (Amazon EC2). Sélectionnez ensuite Équilibreurs de charge dans le panneau de navigation.

Si vous avez atteint le nombre maximal d'équilibreurs de charge, vous pouvez demander une augmentation avec Service Quotas.

Vérifier qu'il y a assez d'adresses IP libres sur vos sous-réseaux

Pour créer un équilibreur de charge, chaque sous-réseau de cet équilibreur de charge doit avoir au moins huit adresses IP libres. Cette opération est obligatoire pour le Classic Load Balancer et le Network Load Balancer.

Essayer des étapes de résolution des problèmes supplémentaires

Pour rechercher dans le service Kubernetes un message d'erreur qui peut vous aider à résoudre le problème, exécutez la commande suivante :

$ kubectl describe service my-elb-service

Si le service est créé avec succès, la sortie est similaire à ce qui suit :

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

Si le service n'est pas créé avec succès, vous recevez un message d'erreur.

Pour en savoir plus sur le message d'erreur, vous pouvez :


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


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