Aidez à améliorer cette page
Pour contribuer à ce guide de l’utilisateur, cliquez sur le lien Modifier cette page sur GitHub qui se trouve dans le volet droit de chaque page.
Création d’une IngressClass pour configurer un équilibreur de charge Application Load Balancer
Le mode automatique EKS automatise les tâches courantes liées à l’équilibrage de charge, y compris l’exposition des applications du cluster à Internet.
AWS recommande d’utiliser des équilibreurs de charge Application Load Balancers (ALB) pour traiter le trafic HTTP et HTTPS. Les équilibreurs de charge Application Load Balancer peuvent acheminer les requêtes en fonction de leur contenu. Pour plus d’informations sur les équilibreurs de charge Application Load Balancer, consultez Qu’est-ce qu’un Application Load Balancer ?
Le mode automatique EKS crée et configure des équilibreurs de charge Application Load Balancer (ALB). Par exemple, le mode automatique EKS crée un équilibreur de charge lorsque vous créez un objet Kubernetes Ingress et le configure pour acheminer le trafic vers votre charge de travail dans le cluster.
Présentation
-
Créez une charge de travail que vous souhaitez exposer à Internet.
-
Créez une ressource
IngressClassParams, en spécifiant les valeurs de configuration AWS, telles que le certificat à utiliser pour SSL/TLS et les sous-réseaux VPC. -
Créez une ressource
IngressClassen spécifiant que le mode automatique EKS sera le contrôleur utilisé pour cette ressource. -
Créez une ressource
Ingressqui associe un chemin et un port HTTP à une charge de travail du cluster.
Le mode automatique EKS créera un équilibreur de charge Application Load Balancer pointant vers la charge de travail définie dans la ressource Ingress, en utilisant la configuration définie dans la ressource IngressClassParams.
Prérequis
-
Le mode automatique EKS activé sur un cluster Amazon EKS
-
Kubectl configuré pour se connecter à votre cluster
-
Vous pouvez utiliser
kubectl apply -f <filename>pour appliquer les exemples de fichiers YAML de configuration ci-dessous à votre cluster.
-
Note
Le mode automatique EKS nécessite l’ajout de balises sur les sous-réseaux afin d’identifier les sous-réseaux publics et privés.
Si vous avez créé votre cluster avec eksctl, ces balises sont déjà présentes.
Découvrez comment Baliser les sous-réseaux pour le mode automatique EKS.
Étape 1 : créer une charge de travail
Tout d’abord, créez une charge de travail que vous souhaitez exposer à Internet. Il peut s’agir de n’importe quelle ressource Kubernetes qui gère le trafic HTTP, telle qu’un déploiement ou un service.
Cet exemple utilise un service HTTP simple appelé service-2048, qui écoute sur le port 80. Créez ce service et son déploiement en appliquant le manifeste 2048-deployment-service.yaml suivant :
--- apiVersion: apps/v1 kind: Deployment metadata: name: deployment-2048 spec: selector: matchLabels: app.kubernetes.io/name: app-2048 replicas: 2 template: metadata: labels: app.kubernetes.io/name: app-2048 spec: containers: - image: public.ecr.aws/l6m2t8p7/docker-2048:latest imagePullPolicy: Always name: app-2048 ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: service-2048 spec: ports: - port: 80 targetPort: 80 protocol: TCP type: NodePort selector: app.kubernetes.io/name: app-2048
Appliquez la configuration à votre cluster :
kubectl apply -f 2048-deployment-service.yaml
Les ressources répertoriées ci-dessus seront créées dans l’espace de noms par défaut. Vous pouvez le vérifier en exécutant la commande suivante :
kubectl get all -n default
Étape 2 : créer IngressClassParams
Créez un objet IngressClassParams pour spécifier AWS des options de configuration spécifiques pour l’équilibreur de charge Application Load Balancer. Dans cet exemple, nous créons une ressource IngressClassParams nommée alb (qui sera utilisée à l’étape suivante), afin de définir le mode de fonctionnement de l’équilibreur de charge comme internet-facing, dans un fichier appelé alb-ingressclassparams.yaml.
apiVersion: eks.amazonaws.com/v1 kind: IngressClassParams metadata: name: alb spec: scheme: internet-facing
Appliquez la configuration à votre cluster :
kubectl apply -f alb-ingressclassparams.yaml
Étape 3 : créer IngressClass
Créez une ressource IngressClass dans un fichier nommé alb-ingressclass.yaml, qui référence les valeurs de configuration AWS spécifiques définies dans la ressource IngressClassParams. Notez le nom de la ressource IngressClass. Dans cet exemple, la ressource IngressClass et la ressource IngressClassParams portent toutes deux le nom alb.
Utilisez l’annotation is-default-class pour indiquer si les ressources Ingress doivent utiliser cette classe par défaut.
apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: alb annotations: # Use this annotation to set an IngressClass as Default # If an Ingress doesn't specify a class, it will use the Default ingressclass.kubernetes.io/is-default-class: "true" spec: # Configures the IngressClass to use EKS Auto Mode controller: eks.amazonaws.com/alb parameters: apiGroup: eks.amazonaws.com kind: IngressClassParams # Use the name of the IngressClassParams set in the previous step name: alb
Pour plus d’informations sur les options de configuration, consultez Référence IngressClassParams.
Appliquez la configuration à votre cluster :
kubectl apply -f alb-ingressclass.yaml
Étape 4 : créer une ressource Ingress
Créez une ressource Ingress dans un fichier nommé alb-ingress.yaml. Le but de cette ressource est d’associer les chemins et les ports de l’équilibreur de charge Application Load Balancer aux charges de travail de votre cluster. Dans cet exemple, nous créons une ressource Ingress nommée 2048-ingress qui achemine le trafic vers un service nommé service-2048 sur le port 80.
Pour plus d’informations sur la configuration de cette ressource, consultez Ingress
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: 2048-ingress spec: # this matches the name of IngressClass. # this can be omitted if you have a default ingressClass in cluster: the one with ingressclass.kubernetes.io/is-default-class: "true" annotation ingressClassName: alb rules: - http: paths: - path: /* pathType: ImplementationSpecific backend: service: name: service-2048 port: number: 80
Appliquez la configuration à votre cluster :
kubectl apply -f alb-ingress.yaml
Étape 5 : vérifier l’état
Utilisez kubectl pour afficher l’état de la ressource Ingress. Il peut falloir quelques minutes pour que l’équilibreur de charge soit disponible.
Utilisez le nom de la ressource Ingress définie à l’étape précédente. Par exemple :
kubectl get ingress 2048-ingress
Une fois la ressource prête, extrayez le nom de domaine de l’équilibreur de charge.
kubectl get ingress 2048-ingress -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'
Pour afficher le service dans un navigateur web, vérifiez le port et le chemin indiqués dans la résolution Ingress.
Étape 6 : nettoyage
Pour nettoyer l’équilibreur de charge, utilisez la commande suivante :
kubectl delete ingress 2048-ingress kubectl delete ingressclass alb kubectl delete ingressclassparams alb
Le mode automatique EKS supprimera automatiquement l’équilibreur de charge associé dans votre compte AWS.
Référence IngressClassParams
Le tableau ci-dessous constitue une référence rapide des options de configuration les plus courantes.
| Champ | Description | Exemple de valeur |
|---|---|---|
|
|
Définit si l’ALB est interne ou orienté Internet |
|
|
|
Limite les espaces de noms autorisés à utiliser cette IngressClass |
|
|
|
Regroupe plusieurs ressources Ingress pour partager un même ALB |
|
|
|
Définit le type d’adresse IP de l’ALB |
|
|
|
Répertorie les ID de sous-réseaux pour le déploiement de l’ALB |
|
|
|
Filtres de balises pour sélectionner les sous-réseaux destinés à l’ALB |
|
|
|
ARN des certificats SSL à utiliser |
|
|
|
Balises personnalisées pour les ressources AWS |
|
|
|
Attributs spécifiques à l’équilibreur de charge |
|
Considérations
-
Vous ne pouvez pas utiliser d’annotations sur une IngressClass pour configurer les équilibreurs de charge avec le mode automatique EKS.
-
Vous ne pouvez pas définir ListenerAttribute avec le mode automatique EKS.
-
Vous devez mettre à jour le rôle IAM du cluster afin d’activer la propagation des balises de Kubernetes vers les ressources de l’équilibreur de charge AWS Load Balancer. Pour de plus amples informations, consultez Balises AWS personnalisées pour les ressources EKS Auto.
-
Pour plus d’informations sur l’association des ressources avec le mode automatique EKS ou avec le contrôleur d’équilibreur de charge AWS Load Balancer Controller, consultez Référence de migration.
-
Pour plus d’informations sur la résolution des problèmes liés aux équilibreurs de charge, consultez Résolution des problèmes avec le mode automatique EKS.
-
Pour des considérations supplémentaires concernant l’utilisation de la fonctionnalité d’équilibrage de charge du mode automatique EKS, consultez Equilibrage de charge.
Les tableaux suivants présentent une comparaison détaillée des modifications apportés aux ressources IngressClassParams, aux annotations Ingress, et aux configurations TargetGroupBinding pour le mode automatique EKS. Ces tableaux mettent en évidence les principales différences entre la fonctionnalité d’équilibrage de charge du mode automatique EKS et le contrôleur d’équilibreur de charge open source, notamment l’évolution des versions d’API, les fonctionnalités obsolètes et les nouveaux noms de paramètres.
IngressClassParams
| Précédent | New | Description |
|---|---|---|
|
|
|
Modifications de version d’API |
|
|
|
Prise en charge de plusieurs certificats ARN |
|
|
|
Modification du schéma de correspondance des sous-réseaux |
|
|
Non pris en charge |
Pas encore pris en charge par le mode automatique EKS |
Annotations Ingress
| Précédent | New | Description |
|---|---|---|
|
|
Non pris en charge |
Utilisation de |
|
|
Non pris en charge |
Spécification de groupes dans IngressClass uniquement |
|
|
Non pris en charge |
Utilisation de WAF v2 à la place |
|
|
Non pris en charge |
Utilisation de WAF v2 à la place |
|
|
Non pris en charge |
Intégration Shield désactivée |
|
|
Non pris en charge |
Type d’authentification OIDC non pris en charge actuellement |
TargetGroupBinding
| Précédent | New | Description |
|---|---|---|
|
|
|
Modifications de version d’API |
|
|
|
Spécifications explicite du type de cible |
|
|
Non pris en charge |
Ne prend plus en charge NLB sans groupes de sécurité |