Comment résoudre les problèmes liés à la création d'un équilibreur de charge à l'aide du contrôleur d'équilibreur de charge AWS ?

Lecture de 7 minute(s)
0

Je ne parviens pas à créer un Network Load Balancer ou un Application Load Balancer avec le contrôleur d'équilibreur de charge AWS. Ou, l'équilibreur de charge n'est pas créé après la création des objets Service ou Entrée.

Brève description

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

  • Assurez-vous que toutes les conditions préalables sont remplies.
  • Vérifiez les annotations de l'objet Entrée (Application Load Balancer) ou Service (Network Load Balancer).
  • Consultez les journaux du pod du contrôleur d'équilibreur de charge AWS pour obtenir des informations supplémentaires.
  • Si le cluster s'exécute sur AWS Fargate, vérifiez qu'un profil Fargate a été créé pour l'espace de noms dans lequel se trouve l'objet Entrée ou Service.
  • Vérifiez les dépendances non traitées.

Le contrôleur d'équilibreur de charge AWS gère Elastic Load Balancing pour un cluster EKS. Le contrôleur fournit les ressources suivantes :

  • Un Application Load Balancer lorsque vous créez une entrée Kubernetes.
  • Un Network Load Balancer lorsque vous créez un service Kubernetes de type LoadBalancer. Auparavant, un Network Load Balancer pour Kubernetes était utilisé pour les cibles d'instance, et le contrôleur d'équilibreur de charge AWS était utilisé pour les cibles d'IP. Avec la version 2.3.0 ou ultérieure du contrôleur d'équilibreur de charge AWS, vous pouvez créer un Network Load Balancer en utilisant l'un ou l'autre type de cible. Pour plus d'informations, consultez la section Type de cible.

Résolution

S'assurer que toutes les conditions préalables sont remplies

Pour obtenir la liste des conditions préalables concernant l'Application Load Balancer, consultez la section Équilibrage de charge des applications sur Amazon EKS. Pour obtenir la liste des conditions préalables concernant le Network Load Balancer, consultez la section Équilibrage de charge des réseaux sur Amazon EKS.

1.    Vérifiez que le contrôleur d'équilibreur de charge AWS est correctement alloué. Une bonne pratique consiste à utiliser la version 2.4.4 ou ultérieure.

2.    Vérifiez le nombre de sous-réseaux. Application Load Balancer a besoin d'au moins deux sous-réseaux dans différentes zones de disponibilité. Network Load Balancer a besoin d'au moins un sous-réseau. Les sous-réseaux doivent disposer d'au moins huit adresses IP disponibles. Pour plus d'informations, consultez la section Afficher vos VPC.

3.    Vous devez utiliser l'identification suivante dans certains scénarios :

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

Si vous utilisez un Application Load Balancer

Vous devez étiqueter exactement sur un groupe de sécurité dans les scénarios suivants :

  • Vous utilisez plusieurs groupes de sécurité associés au composant master.
  • Vous utilisez le contrôleur d'équilibreur de charge AWS version v2.1.1 ou antérieure.

Si vous utilisez un Network Load Balancer

Si vous utilisez le contrôleur d'équilibreur de charge AWS version v2.1.1 ou antérieure, les sous-réseaux doivent être étiquetés.

Pour plus d'informations sur l'ajout d'identifications à partir de la console Amazon EC2, consultez la section Utilisation d'identifications à l'aide de la console. Pour plus d'informations sur l'ajout d'identifications à l'aide de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Utilisation des identifications à l'aide de la ligne de commande.

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

4.FSPÀ moins que les ID de sous-réseaux ne soient explicitement spécifiés en tant qu'annotations dans l'objet Service ou Entrée, assurez-vous que les sous-réseaux comportent les identifications suivantes. Sans ces identifications, la Détection automatique des sous-réseaux ne fonctionnera pas.

Identifications de sous-réseaux privés :

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

Identifications de sous-réseaux publics :

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

Vérifier les annotations de l'objet Entrée ou Service

Vérifiez les annotations de l'objet Service ou celles de l'objet Entrée. Les annotations nécessaires à la configuration d'un équilibreur de charge sont les suivantes :

Remarque : les autres annotations utilisent des valeurs par défaut. Pour obtenir la liste de toutes les annotations disponibles prises en charge par le contrôleur d'équilibreur de charge AWS pour l'équilibrage de charge des applications, consultez Ingress Annotations (Annotations d'entrée) sur GitHub. Pour obtenir la liste de toutes les annotations disponibles prises en charge par le contrôleur d'équilibreur de charge AWS pour l'équilibrage de charge des réseaux, consultez Service annotations (Annotations de service) sur GitHub.

Application Load Balancer

Network Load Balancer

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

Exécutez l'une des commandes suivantes pour afficher l'objet Service ou Entrée. Dans l'exemple suivant, remplacez NOM DE SERVICE/NOM D'ENTRÉE et ESPACE DE NOMS par les valeurs correctes pour 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 Entrée. Dans les exemples suivants, remplacez SERVICE-NAME/INGRESS-NAME et NAMESPACE avec les valeurs correspondant à votre cas d'utilisation.

kubectl edit service <SERVICE-NAME> -n <NAMESPACE>

kubectl edit ingress <INGRESS-NAME> -n <NAMESPACE>

Consulter les journaux du pod du contrôleur d'équilibreur de charge AWS pour obtenir des informations supplémentaires

Exécutez la commande suivante pour consulter les journaux du contrôleur d'équilibreur de charge AWS :

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

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

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

Si le cluster s'exécute sur Fargate, vérifiez qu'un profil Fargate a été créé pour l'espace de noms dans lequel se trouve l'objet Entrée ou Service.

Le type de cible IP est obligatoire lorsque les pods cibles s'exécutent sur Fargate. Exécutez les commandes suivantes pour vérifier qu'un profil Fargate a été créé pour l'espace de noms dans lequel se trouve l'objet Entrée ou Service. Dans l'exemple suivant, 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. Dans l'exemple suivant, 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érifier les dépendances non traitées

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

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

Le déploiement d'un service de type LoadBalancer peut échouer si Amazon EKS tente de créer des règles qui dépassent le nombre maximal de règles autorisé pour un groupe de sécurité.

Consultez la documentation pour vous assurer que toutes les dépendances sont respectées. Pour l'Application Load Balancer, consultez la section Équilibrage de charge des applications sur Amazon EKS. Pour le Network Load Balancer, consultez la section Équilibrage de charge des réseaux sur Amazon EKS. Par exemple, si vous utilisez un Application Load Balancer, l'objet Service doit préciser le NodePort ou le LoadBalancer de manière à pouvoir utiliser le mode de trafic d'instance.


AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 mois