Comment résoudre les problèmes liés aux équilibreurs de charge créés par le contrôleur de service Kubernetes dans Amazon EKS ?

Lecture de 7 minute(s)
0

Je n'arrive pas à créer un service Kubernetes soutenu par un équilibreur de charge sur Amazon Elastic Kubernetes Service (Amazon EKS).

Brève description

Amazon EKS utilise l'un des deux contrôleurs pour gérer un équilibreur de charge : AWS Load Balancer Controller ou le contrôleur de service Kubernetes. Les étapes de dépannage suivantes s'appliquent uniquement aux équilibreurs de charge gérés par le contrôleur de service Kubernetes. Pour en savoir plus, consultez The Service Controller sur le site Web du fournisseur de cloud Kubernetes AWS et Type LoadBalancer sur le site Web de Kubernetes.

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

  • les balises appropriées 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 ;
  • des équilibreurs de charge qui respectent les limites de votre compte ;
  • assez d'adresses IP gratuites sur vos sous-réseaux ;
  • un équilibreur de charge correctement configuré pour éviter les problèmes de délai de connexion;
  • des objectifs d'équilibrage de charge sains.

Si le problème persiste après avoir vérifié les éléments précédents, suivez les étapes de la rubrique Essayez des étapes de dépannage supplémentaires.

Résolution

Les étapes suivantes s'appliquent à l'équilibreur de charge classique et à l'équilibreur de charge réseau. Pour l'équilibreur de charge des applications, consultez la rubrique Équilibrage de charge des applications sur Amazon EKS.

**Remarque :**si vous recevez des erreurs lors de l'exécution des commandes de l'interface de ligne de commande AWS (AWS CLI), vérifiez que vous utilisez la version la plus récente de l'interface de ligne de commande AWS.

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

1.    Ouvrez la console Amazon VPC.

2.    Dans le volet de navigation, choisissez Subnets.

3.    Choisissez l'onglet Balises pour chaque sous-réseau, puis vérifiez qu'une balise existe. Par exemple :

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

**Remarque :**Dans ce cas, la valeur peut être partagée ou détenue.

Par défaut, le contrôleur découvre automatiquement les sous-réseaux. S'il existe plusieurs sous-réseaux par zone de disponibilité, le contrôleur donne la priorité aux sous-réseaux dans l'ordre suivant :

  • sous-réseaux avec la balise de rôle correcte : kubernetes.io/role/elb pour les sous-réseaux publics et kubernetes.io/role/internal-elb pour les sous-réseaux privés ;
  • Sous-réseaux avec la balise de cluster : kubernetes.io/cluster/cluster_NAME
  • Le sous-réseau qui apparaît en premier dans l'ordre lexicographique.

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

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

**Remarque :**pour savoir si un sous-réseau est public, consultez 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é possède une route vers Internet via une passerelle NAT ou une instance NAT, ou n'a aucune route vers Internet.

**Important :**Vous devez disposer de la balise à l'étape 4 pour créer un service d'équilibrage de charge connecté à Internet. Un équilibreur de charge connecté à Internet achemine les demandes des clients vers les cibles via 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 interne. Un équilibreur de charge interne utilise des adresses IP privées pour acheminer les demandes vers des cibles.

Définissez les autorisations AWS Identity and Access Management (IAM) requises pour le rôle IAM de votre cluster

1.    Ouvrez la console Amazon EKS.

2.    Dans le volet de navigation, choisissez Clusters.

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

  1.    Ouvrez la console IAM.

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

6.    Sélectionnez le rôle qui correspond à l'ARN du rôle IAM du cluster identifié à l'étape 3.

7.    Vérifiez que la stratégie gérée par AWS AmazoneksClusterPolicy est associée à votre rôle.

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

Utiliser une définition de service Kubernetes valide

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

Consultez l'exemple suivant de service Kubernetes soutenu par 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 la rubrique Équilibreur de charge interne et support TLS sur AWS sur le site Web de Kubernetes.

Par défaut, le contrôleur de service intégré de Kubernetes crée un équilibreur de charge classique. Pour la fourniture d'un Network Load Balancer, le service doit avoir l'annotation service.beta.kubernetes.io/aws-load-balancer-type: "nlb". Pour en savoir plus, consultez la rubrique Support des Network Load Balancer sur AWS sur le site Web de Kubernetes.

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

Par défaut, un compte AWS dispose d'un maximum de 20 équilibreurs de charge par région AWS.

Pour vérifier le nombre d'équilibreurs de charge dont vous disposez, ouvrez la console Amazon Elastic Compute Cloud (Amazon EC2). Choisissez ensuite Load Balancers dans le volet de navigation.

Si vous atteignez le nombre maximum d'équilibreurs de charge, vous pouvez demander une augmentation avec Service Quotas.

Vérifiez qu'il existe suffisamment d'adresses IP gratuites sur vos sous-réseaux

Pour créer un équilibreur de charge, chaque sous-réseau de cet équilibreur de charge doit disposer d'au moins huit adresses IP libres. Cette condition s’applique aussi bien à l'équilibreur de charge classique qu’à l'équilibreur de charge réseau.

Problèmes de délai de connexion

Si votre équilibreur de charge rencontre des problèmes de temporisation intermittents ou constants, il souffre peut-être d'un problème de configuration. Cela peut se produire lorsque le service principal ne parvient pas à gérer le trafic entrant ou que trop de demandes sont envoyées à l'équilibreur de charge. Pour en savoir plus, consultez l'article Comment résoudre les erreurs liées à l'« expiration du délai de connexion » d'Elastic Load Balancing ?

Vérifiez les bilans de surveillance de l’état de l'équilibreur de charge

Si vous ne configurez pas correctement le point de terminaison ou si le service principal ne répond pas aux demandes de surveillance de l'état de santé de l'équilibreur de charge, des problèmes de surveillance de l'état de l'équilibreur de charge se produisent.

Pour vérifier que l'équilibreur de charge pointe vers le bon point de terminaison, exécutez la commande AWS CLI describe-target-health :

aws elbv2 describe-target-health --target-group-arn arn:aws:elasticloadbalancing:us-west-2:1234567890:targetgroup/my-targets/6d0ecf831eec9f09

Pour vérifier la configuration du bilan de surveillance de l’état du groupe cible, exécutez la commande AWS CLI describe-target-groups :

aws elbv2 describe-target-groups --target-group-arns arn:aws:elasticloadbalancing:us-west-2:1234567890:targetgroup/my-targets/6d0ecf831eec9f09

Pour en savoir plus, voir Surveillance de l’état de vos groupes cibles.

Essayez d’autres étapes de résolution de problème

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

$ kubectl describe service my-elb-service

Si le service est correctement créé, vous recevez une sortie similaire à l'exemple suivant :

...  
...  
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éé correctement, vous recevez un message d'erreur.

Pour en savoir plus sur les messages d'erreur, consultez les ressources suivantes :

Informations connexes

Pourquoi un sous-réseau utilisé par les équilibreurs de charge de mon VPC n'a-t-il pas suffisamment d'adresses IP ?

Dépannage d'Amazon EKS

Résolvez les problèmes liés à vos équilibreurs de charge d'applications

Résoudre les problèmes liés à votre Classic Load Balancer

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an