Comment puis-je 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 ?

Date de la dernière mise à jour : 29/10/2021

Je ne parviens pas à créer un dispositif d'équilibrage de charge de réseau (NLB) ni un Application Load Balancer (ALB) à l'aide du contrôleur d'équilibreur de charge AWS (anciennement appelé contrôleur d'entrée ALB). Ou, l'équilibreur de charge n'est pas créé après la création des objets Service ou Entrée. Comment puis-je résoudre ce problème ?

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 (ALB) ou Service (NLB).
  • 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 réside l'objet Entrée ou Service.
  • Vérifiez s'il existe des dépendances non résolues.

Résolution

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

Pour obtenir la liste des conditions préalables relatives à ALB, consultez Répartition de charge d'applications sur Amazon Elastic Kubernetes Service (Amazon EKS). Pour obtenir la liste des conditions préalables concernant NLB, consultez Répartition de charge de réseau sur Amazon EKS.

1.    Vérifiez que le contrôleur d'équilibreur de charge AWS est correctement alloué.

2.    Vérifiez le nombre de sous-réseaux. ALB nécessite au moins deux sous-réseaux et NLB au moins un sous-réseau. Pour plus d'informations, consultez Afficher votre sous-réseau.

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é attaché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 dispositif d'équilibrage de charge de réseau

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 Utilisation d'identifications à l'aide de la console. Pour plus d'informations sur l'ajout d'identifications à l'aide d'AWS Command Line Interface, consultez 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, assurez-vous d'utiliser la version la plus récente d'AWS CLI.

4.    À 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 fonction 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 (ALB) ou Service (NLB)

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.

Application Load Balancer

  • kubernetes.io/ingress.class : alb (garantit que les objets Entrée utilisent le contrôleur d'équilibreur de charge AWS)

Dispositif d'équilibrage de charge de réseau

  • Avec les cibles IP : service.beta.kubernetes.io/aws-load-balancer-type: « externe » service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: « ip »
  • Avec les cibles d'instances : service.beta.kubernetes.io/aws-load-balancer-type: « externe » 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 NOM DE SERVICE/NOM D'ENTRÉE et ESPACE DE NOMS par les valeurs correctes pour 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 de contrôleur n'affiche de journal, assurez-vous que les pods de 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érifier qu'un profil Fargate a été créé pour l'espace de noms dans lequel réside l'objet Entrée ou Service

Exécutez les commandes suivantes pour vérifier qu'un profil Fargate a été créé pour l'espace de noms dans lequel réside l'objet Entrée ou Service. Dans l'exemple suivant, remplacez NOM DU CLUSTER 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 NOM DU CLUSTER, RÉGION, NOM DU PROFIL FARGATE et ESPACE DE NOMS par les valeurs correctes pour votre cas d'utilisation.

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

Vérifier s'il existe des dépendances non résolues

Consultez la documentation pour vous assurer que toutes les dépendances sont respectées. Pour ALB, voir Répartition de charge d'applications sur EKS. Pour NLB, voir Répartition de charge de réseau sur Amazon EKS.

Par exemple, si vous utilisez ALB, l'objet Service doit spécifier le paramètre NodePort ou LoadBalancer pour que vous puissiez utiliser le mode de trafic d'instance.


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


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