Je souhaite détecter automatiquement les sous-réseaux utilisés par mon Application Load Balancer (ALB) dans Amazon Elastic Kubernetes Service (Amazon EKS).
Brève description
Vous pouvez baliser vos sous-réseaux AWS pour permettre au contrôleur AWS Load Balancer de détecter automatiquement les sous-réseaux utilisés pour les Application Load Balancers.
Résolution
1. Déployez le contrôleur AWS Load Balancer pour votre cluster Amazon EKS.
2. Vérifiez que le contrôleur AWS Load Balancer est installé :
kubectl get deployment -n kube-system aws-load-balancer-controller
Remarque : si le déploiement est effectué dans un espace de noms différent, remplacez -n kube-system par l'espace de noms approprié.
3. Créez une ressource d'entrée Kubernetes sur votre cluster avec l'annotation suivante :
annotations:
kubernetes.io/ingress.class: alb
Remarque : le contrôleur de l'équilibreur de charge AWS crée des équilibreurs de charge. La ressource d'entrée configure l'Application Load Balancer pour acheminer le trafic HTTP(S) vers différents pods au sein de votre cluster.
4. Ajoutez une annotation internal ou internet-facing pour spécifier où vous souhaitez que l'entrée crée votre équilibreur de charge :
alb.ingress.kubernetes.io/scheme: internal
-ou-
alb.ingress.kubernetes.io/scheme: internet-facing
Remarque : choisissez internal pour créer un équilibreur de charge interne ou internet-facing pour créer un équilibreur de charge public.
5. Utilisez des balises pour permettre au contrôleur d'entrée Application Load Balancer de créer un équilibreur de charge à l'aide de la découverte automatique. Par exemple :
kubernetes.io/role/internal-elb Set to 1 or empty tag value for internal load balancers
kubernetes.io/role/elb Set to 1 or empty tag value for internet-facing load balancers
Remarque : vous pouvez utiliser des balises pour la découverte automatique au lieu de l'annotation alb.ingress.kubernetes.io/subnets manuelle.
Exemple de sous-réseau avec les balises appropriées pour un cluster avec un équilibreur de charge interne :
kubernetes.io/role/internal-elb 1
Exemple de sous-réseau avec les balises appropriées pour un cluster avec un équilibreur de charge public :
kubernetes.io/role/elb 1
Remarque : Pour les versions 1.18 et antérieures du cluster, Amazon EKS ajoute la balise suivante à tous les sous-réseaux transmis lors de la création du cluster. La balise n'est pas ajoutée aux clusters de la version 1.19. Si vous utilisez la balise et que vous effectuez une mise à jour vers la version 1.19 du cluster à partir d'une version antérieure, vous n'avez pas besoin d'ajouter la balise à nouveau. La balise reste sur votre sous-réseau. Vous pouvez utiliser la balise suivante pour contrôler l'allocation d'un Application Load Balancer. Utilisez cette balise en plus des balises de sous-réseau nécessaires à l’allocation automatique d'un Application Load Balancer.
kubernetes.io/cluster/$CLUSTER_NAME shared
Important : le flux de travail du contrôleur AWS Load Balancer vérifie les balises de sous-réseau à la recherche des valeurs " " (chaîne vide) et 1. Pour les sous-réseaux privés, définissez la valeur de la balise kubernetes.io/role/internal-elb sur une chaîne vide ou 1. Pour les sous-réseaux publics, définissez la valeur de la balise kubernetes.io/role/elb sur une chaîne vide ou 1. Ces balises permettent de découvrir automatiquement vos sous-réseaux à partir des sous-réseaux VPC Amazon EKS de votre Application Load Balancer.
6. Vérifiez que vos sous-réseaux VPC Amazon EKS disposent des balises appropriées :
aws ec2 describe-subnets --subnet-ids your-subnet-xxxxxxxxxxxxxxxxx
7. Déployez un exemple d'application pour vérifier que le contrôleur AWS Load Balancer crée un Application Load Balancer à la suite 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
8. Vérifiez que la ressource d'entrée est créée et qu'elle dispose d'un Application Load Balancer :
kubectl get ingress/2048-ingress -n 2048-game
Un équilibreur de charge interne ou accessible sur Internet est créé, en fonction des annotations (alb.ingress.kubernetes.io/scheme:) que vous avez définies dans l'objet d'entrée et les sous-réseaux.