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/01/2020

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

Brève description

Pour dépanner 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 Résolution des problèmes .

Résolution

Remarque : Les étapes suivantes s'appliquent au Classic Load Balancer et au Network Load Balancer. Pour l'équilibreur de charge d'application, consultez ALB Ingress Controller on Amazon EKS.

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.    Choisissez l'onglet Tags (Balises) pour chaque sous-réseau, puis confirmez qu'une balise existe. Consultez l'exemple suivant :

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.

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.

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.

Équilibreurs de charge qui restent 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 EC2, puis choisissez Load Balancers (Équilibreurs de charge) dans le volet de navigation.

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

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.

Résolution des problèmes

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 obtenir plus d'informations sur le message d'erreur, vous pouvez :


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

Cette page peut-elle être améliorée ?


Vous avez besoin d’aide ?