Comment résoudre les erreurs d'AWS Load Balancer Controller dans Amazon EKS ?
Lorsque j'essaie d'installer avec Elastic Load Balancing (ELB), des erreurs d'AWS Load Balancer Controller s'affichent dans Amazon Elastic Kubernetes Service (Amazon EKS).
Résolution
Erreurs de création d'objets d'entrée
Si vous essayez de créer un objet d'entrée et que vous n'avez pas configuré correctement le service Webhook ou que le certificat de service a expiré, l'un des messages d'erreur suivants alors peut s'afficher :
« Erreur du serveur (InternalError) : erreur lors de la création de « sample.yaml » : Une erreur interne s'est produite : échec de l'appel du webhook « mservice.elbv2.k8s.aws » : échec de l'appel du webhook : Publiez « https://aws-load-balancer-webhook-service.default.svc:443/mutate-v1-service?timeout=10s » : aucun point de terminaison disponible pour le service « aws-load-balancer-webhook-service » »
« Une erreur interne s'est produite : échec de l'appel au webhook « vingress.elbv2.k8s.aws » : Publiez « https://aws-load-balancer-webhook-service.kube-system.svc:443/validate-networking-v1beta1-ingress?timeout=10s » : x509 : le certificat a expiré ou n'est pas encore valide »
Pour résoudre ces problèmes, vérifiez l'état du déploiement d'AWS Load Balancer Controller, vérifiez les configurations de service et validez les dates d'expiration des certificats.
Pour identifier la CA racine et résoudre l'erreur, procédez comme suit :
-
Exécutez la commande suivante pour vérifier que les pods aws-load-balancer s'exécutent correctement :
kubectl get pods -n kube-system | grep aws-load-balancerExemple de sortie :
aws-load-balancer-controller-df9b89cf7-hbsrd 1/1 Running 0 26d -
Exécutez la commande suivante pour confirmer que aws-load-balancer-webhook-service existe et que le point de terminaison existe pour aws-load-balancer :
kubectl get svc -n kube-systemExemple de sortie :
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE aws-load-balancer-webhook-service ClusterIP 10.100.219.187 "none" 443/TCP 86dDans la sortie, vérifiez que aws-load-balancer-webhook-service est répertorié et vérifiez que vous avez attribué une adresse CLUSTER-IP valide. Vérifiez que le PORT indique 443/TCP pour la communication du webhook.
-
Exécutez la commande suivante pour vérifier que vous avez correctement connecté les services :
kubectl get ep -n kube-systemExemple de sortie :
NAME ENDPOINTS AGE aws-load-balancer-webhook-service 172.31.3.28:9443 86dRemarque : Dans la sortie, vérifiez que le aws-load-balancer-webhook-service possède une valeur ENDPOINTS. Le port de point de terminaison doit comporter 9443 pour indiquer que le service Webhook est correctement configuré.
-
Exécutez la commande suivante pour vérifier si le certificat a expiré :
kubectl get secret -n kube-system aws-load-balancer-webhook-tls -ojsonpath="{.data.ca\.crt}" | base64 -d | openssl x509 -noout -textExemple de sortie :
Validity Not Before: [START_DATE] Not After : [END_DATE]Remarque : Vérifiez que la date courante se situe entre les dates Pas avant et Pas après. Si la date Pas après est dépassée, le certificat a expiré.
-
(Facultatif) Si le certificat est expiré, exécutez alors la commande suivante :
kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v1.13.5/cert-manager.yaml
Si les problèmes persistent, réinstallez alors AWS Load Balancer Controller pour résoudre les problèmes liés à la configuration des webhooks, aux points de terminaison de service ou à la gestion des certificats. Désinstallez l'installation actuelle d'AWS Load Balancer Controller, puis réinstallez AWS Load Balancer Controller avec Helm.
Remarque : Si vous supprimez AWS Load Balancer Controller, il ne supprime pas l'objet d'entrée.
Les cibles ne s'enregistrent pas pour les erreurs de Network Load Balancer ou d'Application Load Balancer
Si les cibles n'enregistrent pas l'existence d'un Network Load Balancer ou d'un Application Load Balancer, il est alors possible qu'une erreur s'affiche même si vous avez installé AWS Load Balancer Controller et que le service est déployé.
Exécutez la commande suivante pour vérifier si la liaison au groupe cible existe :
kubectl get targetgroupbinding -A
Si la liaison au groupe cible existe, vérifiez alors la configuration du réseau pour vous assurer que la communication est ouverte entre les cibles et l'ELB.
Si la liaison au groupe cible n'existe pas, créez-en alors une.
Exemple :
apiVersion: elbv2.k8s.aws/v1beta1 kind: TargetGroupBinding metadata: name: red-tgb namespace: red-ns spec: serviceRef: name: red-service port: 80 targetGroupARN: arn:aws:elasticloadbalancing:region:account-id:targetgroup/target-group-name/target-group-id
Remarque : Remplacez region par la région AWS. Remplacez account-id par l'ID du compte AWS. Remplacez target-group-name par le nom du groupe cible. Remplacez target-group-id par l'ID du groupe cible.
Problèmes de connectivité avec le service Webhook
Erreurs de définition de ressources personnalisées
L'AWS Load Balancer Controller doit disposer des définitions de ressources personnalisées (CRD) requises pour le service Webhook. Pour plus d'informations, consultez Ressources personnalisées sur le site Web de Kubernetes. Si vous essayez de vous connecter sans les CRD requis, un message d'erreur semblable au suivant peut alors s'afficher :
« Erreur du serveur (InternalError) : erreur lors de la création de « targetgroupbinding.yaml » : Une erreur interne s'est produite : échec de l'appel au webhook « mtargetgroupbinding.elbv2.k8s.aws » :
Impossible d'appeler le webhook : Publiez « https://aws-load-balancer-webhook-service.kube-system.svc:443/mutate-elbv2-k8s-aws-v1beta1-targetgroupbinding?timeout=30s » :
net/http demande annulée pendant l'établissement de la connexion (Client.Timeout dépassé lors de l'attente des en-têtes) »
Pour résoudre ce problème, exécutez la commande suivante pour confirmer que vous avez installé des CRD dans le cluster :
kubectl get crds | grep target
Exemple de sortie :
targetgroupbindings.elbv2.k8s.aws 2023-11-29T14:40:39Z
Si la sortie est vide, cela signifie que les CRD ne sont pas correctement installés sur le cluster. Pour installer les CRD, exécutez la commande suivante :
kubectl apply -f https://raw.githubusercontent.com/aws/eks-charts/master/stable/aws-load-balancer-controller/crds/crds.yaml
Valider la connectivité interne avec le service Webhook
Il est recommandé d'autoriser la communication entre les composants master. Cependant, les groupes de sécurité peuvent avoir des règles restrictives qui empêchent la communication avec le service Webhook.
Pour que l'AWS Load Balancer Controller puisse créer et modifier des ressources, celles-ci doivent être en mesure de communiquer avec le service. Pour autoriser cette communication, vérifiez que le groupe de sécurité des composants master contient les règles suivantes.
Règles entrantes :
Port Source 443 worker-node-security-group-id
Remarque : Remplacez worker-node-security-group-id par l'ID du groupe de sécurité.
Règles sortantes :
Port Destination 443 worker-node-security-group-id
Remarque : Remplacez worker-node-security-group-id par l'ID du groupe de sécurité.
Valider la connectivité entre les composants master et le service ELB
Le point de terminaison d'un VPC permet la communication entre les composants master AWS Load Balancer Controller et les points de terminaison du service ELB. Si le cluster Amazon EKS privé n'a pas accès à Internet, vous devez alors configurer un point de terminaison d'un cloud privé virtuel (VPC).
Les points de terminaison d'un VPC créent également une interface réseau élastique que vous pouvez associer à un groupe de sécurité. Assurez-vous que le groupe de sécurité qui est attaché au point de terminaison d'un VPC contient la règle d'entrée suivante :
Port Source 443 worker-node-security-group-id
Remarque : Remplacez worker-node-security-group-id par l'ID du groupe de sécurité.
Erreurs de paramètre CreateTargetGroupInput.Port non valides
Par défaut, le contrôleur crée Application Load Balancer en mode Instance. Le mode Instance est compatible avec les services NodePort, mais peut entrer en conflit, car le mode Instance nécessite une allocation de port de nœud. Pour plus d'informations, consultez Annotations d'entrée sur le site Web de Kubernetes. Si l'allocation de port entraîne des échecs de création de groupes cibles, le message d'erreur suivant peut alors s'afficher :
« Échec du modèle de déploiement en raison de InvalidParameter : 1 erreur (s) de validation trouvée (s). - valeur de champ minimale de 1, CreateTargetGroupInput.Port. »
Pour résoudre ce problème, procédez comme suit pour sélectionner le mode approprié pour Application Load Balancer :
Pour le mode Instance, procédez comme suit :
- Configurez le type comme NodePort :
Remarque : Remplacez service-name par le nom du service et namespace-name par le nom de l'espace de noms.apiVersion: v1 kind: Service metadata: name: service-name namespace: namespace-name spec: type: NodePort ports: - protocol: TCP port: 80 targetPort: 80 - Créez l'entrée avec le mode Instance :
alb.ingress.kubernetes.io/target-type: instance
Pour le mode IP, procédez comme suit :
- Configurez le type en tant que ClusterIP :
Remarque : Remplacez service-name par le nom du service et namespace-name par le nom de l'espace de noms.apiVersion: v1 kind: Service metadata: name: service-name namespace: namespace-name spec: type: ClusterIP ports: - protocol: TCP port: 80 targetPort: 80 - Ajoutez l'annotation suivante à l'entrée :
alb.ingress.kubernetes.io/target-type: ip
Erreurs d'installation d'AWS Load Balancer Controller
Si vous installez AWS Load Balancer Controller et que le manifeste ne possède pas les autorisations correctes, un message d'erreur similaire au suivant peut alors s'afficher :
« Échec de l'avertissement 8s (x8 sur 88s) kubelet Erreur : le conteneur comprend runAsNonRoot et l'image sera exécutée en tant que racine (pod : « aws-load-balancer-controller-5c6c66fc48-49rm4_kube-system(924608a2-da7a-4786-ae74-051bb47ea84e) », conteneur : contrôleur) »
Pour résoudre cette erreur, procédez comme suit :
-
Exécutez la commande suivante pour modifier le déploiement d’AWS Load Balancer Controller :
kubectl edit deployment -n kube-system aws-load-balancer-controller -
Dans la configuration de déploiement, localisez la section Conteneurs, puis ajoutez les paramètres securityContext suivants.
Exemple de configuration :apiVersion: apps/v1 kind: Deployment spec: template: spec: containers: - name: aws-load-balancer-controller image: public.ecr.aws/eks/aws-load-balancer-controller:v2.13.3 securityContext: runAsNonRoot: true runAsUser: 1000
Une fois que vous avez modifié le déploiement, de nouveaux pods se lancent avec les nouvelles valeurs de configuration.
- Sujets
- Containers
- Langue
- Français

Contenus pertinents
demandé il y a 4 ans
demandé il y a 6 mois
demandé il y a 4 ans
demandé il y a un an