

 **Aidez à améliorer cette page** 

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Pour contribuer à ce guide de l'utilisateur, cliquez sur le GitHub lien **Modifier cette page sur** qui se trouve dans le volet droit de chaque page.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Créez un IngressClass pour configurer un Application Load Balancer
<a name="auto-configure-alb"></a>

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 suggère d'utiliser des équilibreurs de charge d'application (ALB) pour gérer 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 ?](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) 

Le mode automatique EKS crée et configure les équilibreurs de charge d'application ()ALBs. 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.

1. Créez une `IngressClassParams` ressource en spécifiant AWS des valeurs de configuration spécifiques telles que le certificat à utiliser SSL/TLS et les sous-réseaux VPC.

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

1. 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`.

## Conditions préalables
<a name="_prerequisites"></a>
+ 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](tag-subnets-auto.md).

## Étape 1 : créer une charge de travail
<a name="_step_1_create_a_workload"></a>

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
<a name="_step_2_create_ingressclassparams"></a>

Créez un `IngressClassParams` objet pour spécifier AWS des options de configuration spécifiques pour l'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
<a name="_step_3_create_ingressclass"></a>

Créez un `IngressClass` qui fait référence aux valeurs de configuration AWS spécifiques définies dans la `IngressClassParams` ressource dans un fichier nommé`alb-ingressclass.yaml`. 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 [IngressClassParams Référence](#ingress-reference).

Appliquez la configuration à votre cluster :

```
kubectl apply -f alb-ingressclass.yaml
```

## Étape 4 : créer une ressource Ingress
<a name="_step_4_create_ingress"></a>

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](https://kubernetes.io/docs/concepts/services-networking/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
<a name="_step_5_check_status"></a>

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
<a name="_step_6_cleanup"></a>

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 AWS compte.

## IngressClassParams Référence
<a name="ingress-reference"></a>

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 qui peuvent l'utiliser 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`   |  Liste des sous-réseaux pour le déploiement IDs d'ALB  |   `subnet-xxxx, subnet-yyyy`   | 
|   `subnets.tags`   |  Filtres de balises pour sélectionner les sous-réseaux destinés à l’ALB  |   `Environment: prod`   | 
|   `certificateARNs`   |  ARNs de certificats SSL à utiliser  |   ` arn:aws: acm:region:account:certificate/id`   | 
|   `tags`   |  Tags personnalisés pour les AWS ressources  |   `Environment: prod, Team: platform`   | 
|   `loadBalancerAttributes`   |  Attributs spécifiques à l’équilibreur de charge  |   `idle_timeout.timeout_seconds: 60`   | 

## Considérations
<a name="_considerations"></a>
+ Vous ne pouvez pas utiliser les annotations sur et IngressClass pour configurer les équilibreurs de charge avec le mode automatique EKS. IngressClass la configuration doit être effectuée via IngressClassParams. Cependant, vous pouvez utiliser des annotations sur des ressources d'entrée individuelles pour configurer le comportement de l'équilibreur de charge (tel que `alb.ingress.kubernetes.io/security-group-prefix-lists` ou). `alb.ingress.kubernetes.io/conditions.*`
+ Vous ne pouvez pas effectuer de réglage [ListenerAttribute](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_ListenerAttribute.html)avec le mode automatique EKS.
+ Vous devez mettre à jour le rôle IAM du cluster pour permettre la propagation des balises depuis Kubernetes vers les ressources Load AWS Balancer. Pour de plus amples informations, veuillez consulter [AWS Balises personnalisées pour les ressources EKS Auto](auto-cluster-iam-role.md#tag-prop).
+ Pour plus d'informations sur l'association de ressources au mode automatique EKS ou au AWS Load Balancer Controller autogéré, consultez. [Référence de migration](migrate-auto.md#migration-reference)
+ 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](auto-troubleshoot.md).
+ Pour des considérations supplémentaires concernant l’utilisation de la fonctionnalité d’équilibrage de charge du mode automatique EKS, consultez [Équilibrage de charge](auto-networking.md#auto-lb-consider).

Les tableaux suivants fournissent une comparaison détaillée des modifications IngressClassParams, des annotations d'entrée et des TargetGroupBinding configurations 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
<a name="_ingressclassparams"></a>


| Précédent | Nouveau | Description | 
| --- | --- | --- | 
|   `elbv2.k8s.aws/v1beta1`   |   `eks.amazonaws.com/v1`   |  Modifications de version d’API  | 
|   `spec.certificateArn`   |   `spec.certificateARNs`   |  Support pour plusieurs certificats ARNs  | 
|   `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
<a name="_ingress_annotations"></a>


| Précédent | Nouveau | 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écifier les 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
<a name="_targetgroupbinding"></a>


| Précédent | Nouveau | 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é  | 

Pour utiliser la TargetGroupBinding fonctionnalité personnalisée, vous devez étiqueter le groupe cible avec la eks-cluster-name balise eks : avec le nom du cluster afin d'accorder au contrôleur les autorisations IAM nécessaires. Sachez que le contrôleur supprimera le groupe cible lorsque la TargetGroupBinding ressource ou le cluster sera supprimé.