Création d’une IngressClass pour configurer un équilibreur de charge Application Load Balancer - Amazon EKS

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

  1. Créez une charge de travail que vous souhaitez exposer à Internet.

  2. 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.

  3. Créez une ressource IngressClass en spécifiant que le mode automatique EKS sera le contrôleur utilisé pour cette ressource.

  4. Créez une ressource Ingress qui 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 dans la documentation Kubernetes.

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

scheme

Définit si l’ALB est interne ou orienté Internet

internet-facing

namespaceSelector

Limite les espaces de noms autorisés à utiliser cette IngressClass

environment: prod

group.name

Regroupe plusieurs ressources Ingress pour partager un même ALB

retail-apps

ipAddressType

Définit le type d’adresse IP de l’ALB

dualstack

subnets.ids

Répertorie les ID de sous-réseaux pour le déploiement de l’ALB

subnet-xxxx, subnet-yyyy

subnets.tags

Filtres de balises pour sélectionner les sous-réseaux destinés à l’ALB

Environment: prod

certificateARNs

ARN des certificats SSL à utiliser

arn:aws:acm:region:account:certificate/id

tags

Balises personnalisées pour les ressources AWS

Environment: prod, Team: platform

loadBalancerAttributes

Attributs spécifiques à l’équilibreur de charge

idle_timeout.timeout_seconds: 60

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

elbv2.k8s.aws/v1beta1

eks.amazonaws.com/v1

Modifications de version d’API

spec.certificateArn

spec.certificateARNs

Prise en charge de plusieurs certificats ARN

spec.subnets.tags

spec.subnets.matchTags

Modification du schéma de correspondance des sous-réseaux

spec.listeners.listenerAttributes

Non pris en charge

Pas encore pris en charge par le mode automatique EKS

Annotations Ingress

Précédent New Description

kubernetes.io/ingress.class

Non pris en charge

Utilisation de spec.ingressClassName sur les objets Ingress

alb.ingress.kubernetes.io/group.name

Non pris en charge

Spécification de groupes dans IngressClass uniquement

alb.ingress.kubernetes.io/waf-acl-id

Non pris en charge

Utilisation de WAF v2 à la place

alb.ingress.kubernetes.io/web-acl-id

Non pris en charge

Utilisation de WAF v2 à la place

alb.ingress.kubernetes.io/shield-advanced-protection

Non pris en charge

Intégration Shield désactivée

alb.ingress.kubernetes.io/auth-type: oidc

Non pris en charge

Type d’authentification OIDC non pris en charge actuellement

TargetGroupBinding

Précédent New Description

elbv2.k8s.aws/v1beta1

eks.amazonaws.com/v1

Modifications de version d’API

spec.targetType facultatif

spec.targetType obligatoire

Spécifications explicite du type de cible

spec.networking.ingress.from

Non pris en charge

Ne prend plus en charge NLB sans groupes de sécurité