Comment puis-je résoudre les problèmes lorsque j'utilise l'AWS Load Balancer Controller pour créer un équilibreur de charge ?

Lecture de 7 minute(s)
0

Je ne peux pas utiliser l'AWS Load Balancer Controller pour créer un Network Load Balancer ou un Application Load Balancer. Ou bien, l'équilibreur de charge n'est pas créé après la création des objets Service ou Ingress.

Brève description

Pour résoudre les problèmes liés à la création d'un équilibreur de charge, procédez comme suit :

  • Vérifiez que tous les prérequis sont remplis.
  • Vérifiez les annotations de l'objet Ingress (Application Load Balancer) ou Service (Network Load Balancer).
  • Consultez les journaux du pod de l'AWS Load Balancer Controller pour plus d'informations.
  • Si le cluster s'exécute sur AWS Fargate, vérifiez qu'un profil Fargate est créé pour l'espace de noms dans lequel se trouve l'objet Ingress ou Service.
  • Vérifiez qu'il n'y a pas de dépendances non traitées.

L'AWS Load Balancer Controller gère Elastic Load Balancing pour un cluster Amazon Elastic Kubernetes Service (Amazon EKS). Le contrôleur fournit les ressources suivantes :

  • Un Application Load Balancer lorsque vous créez un Ingress Kubernetes.
  • Un Network Load Balancer lorsque vous créez un Service Kubernetes du type LoadBalancer.
    Remarque : Avec AWS Load Balancer Controller version 2.3.0 ou ultérieure, vous pouvez créer un Network Load Balancer avec le type instance ou cible IP.

Résolution

Vérifiez que toutes les conditions requises sont remplies

Pour une liste des prérequis de l'Application Load Balancer, consultez la rubrique Équilibrage de charge des applications sur Amazon EKS. Pour une liste des prérequis du Network Load Balancer, consultez la rubrique Équilibrage de charge du réseau sur Amazon EKS.

1.    Vérifiez que vous avez correctement provisionné l'AWS Load Balancer Controller. Il est recommandé d'utiliser la version 2.4.4 ou ultérieure.

2.    Vérifiez le nombre de sous-réseaux. L'Application Load Balancer doit comporter au moins deux sous-réseaux dans différentes zones de disponibilité. Le Network Load Balancer doit comporter au moins un sous-réseau. Les sous-réseaux doivent avoir au moins huit adresses IP disponibles. Pour plus d'informations, consultez la rubrique Création d'un cloud privé virtuel (VPC).

3.    Vous devez utiliser la balise suivante dans certains scénarios :

  • Clé : "kubernetes.io/cluster/cluster-name"
  • Valeur : "shared" ou "owned"

Pour un Application Load Balancer

Vous devez baliser un groupe de sécurité dans les scénarios suivants :

  • Vous utilisez plusieurs groupes de sécurité associés à un composant master.
  • Vous utilisez la version 2.1.1 ou antérieure de l'AWS Load Balancer Controller.

Pour un Network Load Balancer

Si vous utilisez la version 2.1.1 ou antérieure de l'AWS Load Balancer Controller, vous devez baliser les sous-réseaux.

Pour plus d'informations sur l'utilisation de la console Amazon EC2 pour ajouter des balises, consultez la rubrique Utilisation des balises à l'aide de la console. Pour plus d'informations sur l'utilisation de l'interface de ligne de commande AWS (AWS CLI) pour ajouter des balises, consultez la rubrique Utilisation des balises à l'aide de la ligne de commande.

Remarque : Si des erreurs surviennent lors de l'exécution des commandes de l'AWS CLI, assurez-vous que vous utilisez la version la plus récente de l'AWS CLI.

4.    Si les ID de sous-réseau ne sont pas explicitement spécifiés sous forme d'annotations dans l'objet Service ou dans l'objet Ingress, assurez-vous que les sous-réseaux possèdent les balises suivantes. Sans ces balises, Subnet Auto Discovery (sur le site Web GitHub) ne fonctionne pas :

Balise de sous-réseaux privés :

  • Clé : "kubernetes.io/role/internal-elb"
  • Valeur : "1"

Balise de sous-réseaux publics :

  • Clé : "kubernetes.io/role/elb"
  • Valeur : "1"

Vérifiez les annotations de l'objet Ingress ou Service

Vérifiez les annotations sur l'objet Service ou les annotations sur l'objet Ingress.

Remarque : Les autres annotations utilisent des valeurs par défaut. Pour la liste de toutes les annotations disponibles prises en charge par l'AWS Load Balancer Controller pour l'équilibrage de la charge des applications, consultez la rubrique Annotations Ingress sur GitHub. Pour la liste de toutes les annotations disponibles prises en charge par l'AWS Load Balancer Controller pour l'équilibrage de la charge réseau, consultez la rubrique Annotations Service sur GitHub.

Application Load Balancer

  • kubernetes.io/ingress.class: alb: IngressClassParams est une définition de ressource personnalisée (CRD) spécifique à l'AWS Load Balancer Controller. Vous pouvez utiliser ce CRD avec le champ du paramètre IngressClass (sur le site Web de Kubernetes). Utilisez ce paramètre pour appliquer les paramètres d'un ensemble d'Ingress.

Network Load Balancer

  • Avec des cibles IP : Utilisez service.beta.kubernetes.io/aws-load-balancer-type: "external" et service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "ip".
  • Avec des cibles d'instance : Utilisez service.beta.kubernetes.io/aws-load-balancer-type: "external" et service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "instance".

Pour afficher l'objet Service ou Ingress, exécutez l'une des commandes suivantes. Remplacez SERVICE-NAME, INGRESS-NAME et NAMESPACE par les valeurs adaptées à votre cas d'utilisation :

kubectl describe service SERVICE-NAME -n NAMESPACE  

kubectl describe ingress INGRESS-NAME -n NAMESPACE

Exécutez l'une des commandes suivantes pour modifier l'objet Service ou Ingress. Dans les exemples suivants, remplacez SERVICE-NAME, INGRESS-NAME et NAMESPACE par les valeurs correspondant à votre cas d'utilisation.

kubectl edit service SERVICE-NAME -n NAMESPACE  

kubectl edit ingress INGRESS-NAME -n NAMESPACE

Consultez les journaux du pod de l'AWS Load Balancer Controller pour plus d'informations

Pour consulter les journaux de l'AWS Load Balancer Controller, exécutez la commande suivante :

kubectl logs -n kube-system deployment.apps/aws-load-balancer-controller

En cas de problème, vous verrez le message Reconciler error s'afficher. Un message d'erreur détaillé s'affiche également expliquant pourquoi la création ou la mise à jour d'un objet Ingress ou d'un équilibrage de charge de service échoue. Cet échec se produit probablement pour les raisons suivantes :

  • Si l'erreur se produit lorsque le contrôleur essaie d'effectuer des appels API AWS, cela est dû à un problème d'autorisation ou de connectivité. Vérifiez les autorisations AWS Identity and Access Management (IAM) du contrôleur. Assurez-vous ensuite que les groupes de sécurité ou les listes de contrôle d'accès au réseau (ACL réseau) ne rejettent pas explicitement les connexions sortantes.
  • Si l'erreur se produit à la configuration de l'objet, cela signifie que vous avez un Ingress ou une spécification Service mal formée ou que vos annotations sont incorrectes. Vérifiez les annotations relatives à l'Application Load Balancer ou au Network Load Balancer sur GitHub.

Si aucun des pods du contrôleur n'affiche de journaux, assurez-vous que les pods du contrôleur sont en cours d'exécution :

kubectl get deployment -n kube-system aws-load-balancer-controller

Vérifiez qu'un profil Fargate est créé pour l'espace de noms dans lequel se trouve l'objet Ingress ou Service

Lorsque les pods cibles s'exécutent sur Fargate, vous devez inclure le type de cible IP. Pour vérifier que vous avez un profil Fargate pour l'espace de noms dans lequel se trouve l'objet Ingress ou Service, exécutez les commandes suivantes. Remplacez CLUSTER-NAME par le nom de votre cluster :

eksctl get fargateprofile --cluster CLUSTER-NAME -o yaml

Pour créer un profil Fargate, exécutez la commande suivante. Remplacez CLUSTER-NAME, REGION, FARGATE-PROFILE-NAME et NAMESPACE par les valeurs correspondant à votre cas d'utilisation :

eksctl create fargateprofile --cluster CLUSTER-NAME --region REGION --name FARGATE-PROFILE-NAME --namespace NAMESPACE

Vérifiez qu'il n'y a pas de dépendances non traitées

Amazon EKS ajoute les règles suivantes au groupe de sécurité du nœud :

  • Une règle relative aux appels entrants pour le trafic client.
  • Une règle relative aux appels entrants pour chaque sous-réseau d'équilibreur de charge du VPC pour chaque Network Load Balancer que vous créez (pour la surveillance de l'état).

Si Amazon EKS essaie de créer des règles qui dépassent le nombre maximum de règles pour un groupe de sécurité, le déploiement de votre équilibreur de charge risque d'échouer.

Pour vous assurer que vous respectez toutes les dépendances, consultez la documentation correspondante. Pour Application Load Balancer, consultez la rubrique Équilibrage de charge des applications sur Amazon EKS. Pour le Network Load Balancer, consultez la rubrique Équilibrage de charge réseau sur Amazon EKS. Par exemple, si vous utilisez un Application Load Balancer, l'objet Service doit spécifier le NodePort ou le LoadBalancer pour utiliser le mode trafic d'instance.

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