Comment détecter automatiquement les sous-réseaux que mon Application Load Balancer utilise dans Amazon EKS ?
Je souhaite détecter automatiquement les sous-réseaux que mon Application Load Balancer utilise dans Amazon Elastic Kubernetes Service (Amazon EKS).
Brève description
Pour identifier le sous-réseau utilisé par votre application Load Balancer, le contrôleur AWS Load Balancer aws-load-balancer-controller interroge les sous-réseaux du cluster. La requête utilise l’identification suivante comme filtre :
kubernetes.io/cluster/cluster-name shared kubernetes.io/role/elb 1 OR kubernetes.io/role/internal-elb 1
Remarque : Remplacez cluster-name par le nom de votre cluster Amazon EKS.
Pour permettre au contrôleur AWS Load Balancer de détecter automatiquement les sous-réseaux utilisés par votre Application Load Balancer, identifiez vos sous-réseaux.
Résolution
Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'AWS CLI.
Ajouter des identifications à des sous-réseaux
Procédez comme suit :
- Déployez le contrôleur AWS Load Balancer sur votre cluster Amazon EKS.
- Pour vérifier que vous avez correctement installé le contrôleur AWS Load Balancer, exécutez la commande suivante :
Remarque : Si vous avez déployé le contrôleur AWS Load Balancer dans un autre espace de noms, remplacez -n kube-system par l'espace de noms approprié.kubectl get deployment -n kube-system aws-load-balancer-controller - Créez une ressource d’entrée Kubernetes sur votre cluster avec l’annotation suivante :
Remarque : Le contrôleur AWS Load Balancer permet de créer des équilibreurs de charge. La ressource d’entrée configure l’Application Load Balancer pour acheminer le trafic HTTP et HTTPS vers différents pods de votre cluster.annotations: kubernetes.io/ingress.class: alb - Dans les annotations de l’objet d’entrée, saisissez interne pour créer un équilibreur de charge interne ou connecté à Internet pour créer un équilibreur de charge public :
-ou-alb.ingress.kubernetes.io/scheme: internal
Remarque : Vous pouvez utiliser des identifications pour la détection automatique plutôt que l’annotation manuelle alb.ingress.kubernetes.io/subnets.alb.ingress.kubernetes.io/scheme: internet-facing
Pour les versions de clusters 1.18 et versions antérieures, Amazon EKS ajoute l’identification suivante à tous les sous-réseaux transmis lors de la création du cluster :
Remarque : Remplacez CLUSTER_NAME par le nom de votre cluster.kubernetes.io/cluster/CLUSTER_NAME
L’identification kubernetes.io/cluster/CLUSTER_NAME n'est requise que si vous utilisez la version 2.1.1 ou une version antérieure du contrôleur AWS Load Balancer version 2.1.1. Amazon EKS n'ajoute ni ne supprime automatiquement cette étiquette. Bien que l’identification était requise pour les clusters antérieurs à la version 1.19, elle demeure sur les sous-réseaux même après les mises à niveau du cluster. - Pour vérifier que vos sous-réseaux utilisent les identifications appropriées, exécutez la commande describe-subnets de l'AWS CLI suivante :
Remarque : Remplacez your-subnet-abcdefghxyz par votre ID de sous-réseau.aws ec2 describe-subnets --subnet-ids your-subnet-abcdefghxyz - Pour déployer l'échantillon d’application, exécutez la commande suivante :
Remarque : La commande précédente crée un Application Load Balancer à partir de l'objet d’entrée.kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/examples/2048/2048_full.yaml - Pour vérifier qu'Amazon EKS a créé la ressource d’entrée et un Application Load Balancer associé, exécutez la commande suivante :
kubectl get ingress/2048-ingress -n game-2048
Résoudre les erreurs d’identification
Effectuez les actions suivantes en fonction de l'erreur qui s'affiche lorsque vous utilisez des identifications pour détecter automatiquement des sous-réseaux.
Problèmes liés aux autorisations refusées
Le rôle Gestion des identités et des accès AWS (AWS IAM) de votre compte AWS pour le contrôleur AWS Load Balancer doit disposer des autorisations requises. Si tel n'est pas le cas, le message d'erreur suivant s'affiche :
"{"level":"error","ts":1621443417.9175518,"logger":"controller","msg":"Reconciler error","controller":"ingress","name":" ingress-2048","namespace":" game-2048","error":"couldn't auto-discover subnets: UnauthorizedOperation: You are not authorized to perform this operation.\n\tstatus code: 403, request id: 72ee57ae-f804-4f81-b069-8b04114b67b0"}"
Pour résoudre ce problème, procédez comme suit :
-
Pour vérifier que votre compte de service est associé au contrôleur AWS Load Balancer, exécutez la commande suivante :
kubectl get deploy aws-load-balancer-controller -n kube-system -o yaml | grep -i serviceAccountRemarque : Si vous avez déployé le contrôleur AWS Load Balancer dans un autre espace de noms, remplacez -n kube-system par l'espace de noms approprié.
Exemple de sortie :serviceAccount: aws-load-balancer-controller serviceAccountName: aws-load-balancer-controller -
Pour identifier le rôle IAM associé au compte de service que vous avez associé au contrôleur AWS Load Balancer, exécutez la commande suivante :
kubectl describe sa aws-load-balancer-controller -n kube-system | grep role-arnExemple de sortie :
annotations: eks.amazonaws.com/role-arn: arn:aws:iam::abcdefxyz:role/eksctl-cluster18-addon-iamserviceaccount-kub-Role1-abcdefxyz
Remarque : Si vous n'utilisez pas de rôles IAM pour les comptes de service (IRSA), assurez-vous que le rôle IAM du composant master Amazon EKS dispose des autorisations requises. Pour consulter les autorisations requises, consultez iam_policy.json sur le site Web de GitHub.
Problème de détection d’un sous-réseau unique
L’un des messages d’erreur suivants s’affiche lorsque votre contrôleur AWS Load Balancer ne détecte pas au moins un sous-réseau :
"{"level":"error","ts":1608229710.3212903,"logger":"controller","msg":"Reconciler error","controller":"ingress","name":"ingress-2048","namespace":"game-2048","error":"couldn't auto-discover subnets: unable to resolve at least one subnet"}"
-ou-
"kubebuilder/controller "msg"="Reconciler error" "error"="failed to build LoadBalancer configuration due to
retrieval of subnets failed to resolve 2 qualified subnets. Subnets must contain the kubernetes.io/cluster/\u003ccluster name\u003e tag with a value of shared or owned and the kubernetes.io/role/elb tag signifying it should be used for ALBs Additionally, there must be at least 2 subnets with unique availability zones as required by ALBs. Either tag subnets to meet this requirement or use the subnets annotation on the ingress resource to explicitly call out what subnets to use for ALB creation. Les sous-réseaux qui ont été résolus étaient []" "controller"="alb-ingress-controller" "request"={"Namespace":"default","Name":"2048-ingress"}"
Pour résoudre ce problème, ajoutez les identifications appropriées à vos sous-réseaux afin de permettre au contrôleur AWS Load Balancer d’utiliser la détection automatique pour créer un équilibreur de charge :
Pour les sous-réseaux privés, ajoutez l’identification suivante :
kubernetes.io/role/internal-elb 1
Pour les sous-réseaux publics, ajoutez l’identification suivante :
kubernetes.io/role/elb 1
Remarque : Vous pouvez attribuer manuellement des sous-réseaux à votre équilibreur de charge à l’aide de l’annotation alb.ingress.kubernetes.io/subnets. Pour consulter les autorisations requises, consultez iam_policy.json sur le site Web de GitHub.
Identifiez vos sous-réseaux dans le format suivant, sans espaces de début ou de fin :
- Dans le champ Clé, saisissez kubernetes.io/cluster/your-cluster-name.
- Dans le champ Valeur, saisissez partagé ou détenu.
Si vous utilisez la version 2.2.1 ou une version antérieure du contrôleur AWS Load Balancer, vous devez identifier vos sous-réseaux avec le format précédent. L’identification est facultatif pour les versions 2.1.2 ou ultérieures.
Il est recommandé de baliser un sous-réseau dans les cas suivants :
- Vous avez plusieurs clusters qui s’exécutent dans le même cloud privé virtuel (VPC).
- Vous avez plusieurs services AWS qui partagent des sous-réseaux dans un VPC.
- Vous souhaitez avoir davantage de contrôle sur la répartition des équilibreurs de charge pour chaque cluster.
Erreurs de détection de plusieurs sous-réseaux
Le message d’erreur suivant s’affiche lorsque votre contrôleur AWS Load Balancer ne détecte pas au moins deux sous-réseaux qualifiés :
"{"level":"error","ts":"2024-08-12T19:01:27Z","msg":"Reconciler error","controller":"ingress","object":{"name":"ingress-2048","namespace":"game-2048"},"namespace":"game-2048","name":"ingress-2048","reconcileID":"1234567","error":"couldn't auto-discover subnets: unable to resolve at least one subnet (2 match VPC and tags: [kubernetes.io/role/internal-elb], 2 have fewer than 8 free IPs)"}"
Pour résoudre ce problème, procédez comme suit :
- Vérifiez que vous avez au moins deux sous-réseaux dans deux zones de disponibilité différentes.
Remarque : Il s’agit d’une condition préalable à la création d’un Application Load Balancer. Vous pouvez créer un Network Load Balancer avec un seul sous-réseau. - Pour chaque sous-réseau, spécifiez un bloc d’adresses CIDR avec au moins un masque de bits /27, tel que 10.0.0.0/27 et au moins huit adresses IP libres.
- Vérifiez que vous avez correctement mis en forme les identifications des sous-réseaux. Par exemple, les identifications ne peuvent comporter d’espace de début ou de fin.
- Sujets
- Containers
- Langue
- Français
Vidéos associées


Contenus pertinents
- demandé il y a 2 mois
- demandé il y a 3 ans
- demandé il y a 7 mois
- demandé il y a 3 ans