Comment configurer le contrôleur d'entrée ALB sur un cluster Amazon EKS for Fargate ?

Dernière mise à jour : 25/09/2020

Je souhaite configurer le contrôleur d’entrée de Équilibreur de charge d'application (ALB) sur un cluster Amazon Elastic Kubernetes Service (Amazon EKS) pour AWS Fargate.

Brève description

Avant de suivre les étapes de la section Solution tenez compte des éléments suivants :

  • Mettre en retrait les fichiers YAML correctement à l'aide d'espaces et non pas da tabulations.
  • Remplacez les valeurs d'espace réservé par vos propres valeurs lorsque <placeholder-value> figure dans une commande.
  • Notez que la variable --region n'est pas utilisée dans les commandes suivantes, car la valeur par défaut de votre région AWS est utilisée. Pour vérifier la valeur par défaut, exécutez la commande aws configure. Pour modifier la région AWS, utilisez l'indicateur -region.
  • Notez qu'Amazon EKS for Fargate est disponible uniquement dans les régions AWS USA Est (Virginie du Nord), USA Est (Ohio), Europe (Irlande) et Asie-Pacifique (Tokyo).
  • Utilisez eksctl version 0.11.1 ou une version ultérieure.

Solution

Créer un cluster Amazon EKS, une politique de compte de service et des politiques RBAC

1.    Pour utiliser eksctl afin de créer un cluster Amazon EKS for Fargate, exécutez la commande suivante :

$ eksctl create cluster --name your-cluster-name --version 1.14 --fargate

Remarque : il n'est pas nécessaire de créer un rôle d'exécution de pod Fargate pour les clusters qui utilisent uniquement des pods Fargate (--fargate). Vous pouvez utiliser un cluster Amazon EKS existant, mais le cluster doit exécuter Kubernetes version 1.14 et la version eks.5 de la plateforme Amazon EKS.

2.    Pour autoriser le cluster à utiliser AWS Identity and Access Management (IAM) pour les comptes de service, exécutez la commande suivante :

$ eksctl utils associate-iam-oidc-provider --cluster your-cluster-name --approve

Remarque : FargateExecutionRole est le rôle sur lequel les kubelet et kube-proxy exécutent votre pod Fargate, mais pas le rôle du pod Fargate (c'est-à-dire, alb-ingress-controller). Pour le pod Fargate, vous devez utiliser le rôle IAM pour le compte de service.

3.    Créez une politique IAM pour le compte de service à l'aide des autorisations appropriées du site Web Kubernetes GitHub, et notez l'Amazon Resource Name (ARN) de la stratégie IAM.

Remarque : Le contrôleur d'entrée ALB nécessite plusieurs appels d'API pour mettre en service les composants ALB du type de ressource d'entrée.

4.    Pour créer un compte de service, exécutez la commande suivante :

$ eksctl create iamserviceaccount --name your-service-account-name --namespace kube-system --cluster your-cluster-name --attach-policy-arn IAM-policy-arn --approve --override-existing-serviceaccounts

5.    Pour vérifier que le nouveau rôle de service a été créé, exécutez la commande suivante :

$ eksctl get iamserviceaccount --cluster your-cluster-name --name your-service-account-name --namespace your-namespace

Remarque : Le nom du rôle commence par eksctl-<cluster-name> -addon-iamserviceaccount-.

6.    Pour créer des autorisations RBAC et un compte de service pour le contrôleur d'entrée ALB, exécutez la commande suivante :

$ curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.1.4/docs/examples/rbac-role.yaml

7.    Ouvrez le fichier rbac-role.yaml dans un éditeur de texte, puis apportez les modifications suivantes uniquement à la section ServiceAccount :

apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    app.kubernetes.io/name: alb-ingress-controller
  annotations:                                                                              # Add the annotations line
    eks.amazonaws.com/role-arn: arn:aws:iam::YOUR_AWS_ACCOUNT_ID:role/YOUR_IAM_ROLE_NAME    # Add the IAM role
  name: alb-ingress-controller
  namespace: kube-system

8.    Enregistrez le fichier rbac-role.yaml, puis exécutez la commande suivante :

$ kubectl apply -f rbac-role.yaml

Configuration du contrôleur d'entrée ALB

Pour exécuter le contrôleur d'entrée ALB en tant que pod Fargate, vous devez utiliser iam-per-pods.

Remarque : À des fins de test uniquement, ajoutez AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY en tant que variables d'environnement dans le fichier alb-ingress-controller.yaml. Il est recommandé de créer des rôles IAM pour les comptes de service.

1.    Pour télécharger le fichier YAML pour le contrôleur, exécutez la commande suivante :

$ curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.1.4/docs/examples/alb-ingress-controller.yaml

2.    Ouvrez le fichier alb-ingress-controller.yaml dans un éditeur de texte, puis effectuez les modifications suivantes :

    spec:
      containers:
      - args:
        - --ingress-class=alb
        - --cluster-name=your-cluster-name    #<-- Add the cluster name
        - --aws-vpc-id=vpc-xxxxxxxxxxxxxxxxx    #<-- Add the VPC ID 
        - --aws-region=eu-west-1    #<-- Add the region 
        image: docker.io/amazon/aws-alb-ingress-controller:v1.1.4    #<======= Please make sure the Image is 1.1.4 and above. 
        imagePullPolicy: IfNotPresent

3.    Pour appliquer le fichier alb-ingress-controller.yaml, exécutez la commande suivante :

$ kubectl apply -f alb-ingress-controller.yaml

4.    Pour vérifier le statut du déploiement alb-ingress-controller, exécutez la commande suivante :

$ kubectl rollout status deployment alb-ingress-controller -n kube-system

Test du contrôleur d'entrée ALB

Vous pouvez créer des ressources d’entrée ALB et un profil Fargate pour tester le contrôleur d'entrée ALB.

1.    Dans la console Amazon EKS, créez un profil Fargate pour l'espace de noms Jeu 2048 ou exécutez la commande suivante pour créer le profil à l'aide d'eksctl:

$ eksctl create fargateprofile --namespace 2048-game --cluster your-cluster-name

Remarque : si vous créez le profil avec la console Amazon EKS, utilisez les sous-réseaux privés associés à votre Amazon Virtual Private Cloud (Amazon VPC). Aucune adresse IP publique n'est affectée aux pods s'exécutant sur Fargate. Les profils Fargate prennent en charge uniquement les sous-réseaux privés (sans route directe vers une passerelle Internet).

2.    Pour télécharger le fichier 2048-ingress exécutez la commande suivante :

$ curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.1.4/docs/examples/2048/2048-ingress.yaml

3.    Ouvrez le fichier 2048-ingress dans un éditeur de texte, puis apportez les modifications suivantes aux annotations :

 annotations:
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip                       # Add this annotation
    alb.ingress.kubernetes.io/security-groups: your-security-group  # Custom security group

Remarque : Le contrôleur d'entrée ALB fonctionne uniquement en mode IP sur Amazon EKS for Fargate. Pour plus d'informations, consultez les annotations Ingress sur le site Web AWS du contrôleur d’entrée ALB.

4.    Pour appliquer les fichiers du déploiement de test, exécutez les commandes suivantes :

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.1.4/docs/examples/2048/2048-namespace.yaml
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.1.4/docs/examples/2048/2048-deployment.yaml
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.1.4/docs/examples/2048/2048-service.yaml
$ kubectl apply -f 2048-ingress.yaml

5.    Pour afficher la page 2048 à l'aide de l'adresse que vous recevez, exécutez la commande suivante :

$ kubectl get ingress/2048-ingress -n 2048-game

La sortie de la commande doit avoir le nom de domaine complet (FQDN) de l'équilibreur de charge auquel vous pouvez accéder à partir d'un navigateur Web.

Dépannage du contrôleur d'entrée ALB

Si vous rencontrez des problèmes pour configurer le contrôleur d'entrée ALB, exécutez les commandes suivantes :

$ kubectl logs your-alb-ingress-controller -n kube-system
$ kubectl get endpoints -A
$ kubectl get ingress/2048-ingress -n 2048-game

La sortie de la commande logs renvoie des messages d'erreur (par exemple, avec des balises ou des sous-réseaux) qui peuvent vous aider à éliminer les erreurs courantes. Les commandes get endpoints (obtenir les points de terminaisons) et get ingress (obtenir l’entrée) peuvent montrer les ressources d'entrée qui ne sont pas déployées avec succès.

Si vous exécutez le fichier YAML pour le contrôleur d'entrée ALB sans remplacer l'image par 1.1.4, vous recevez une erreur indiquant que le contrôleur d'entrée ALB ne parvient pas à trouver l'ID d'instance. Pour éliminer cette erreur, consultez aws-alb-ingress-controller sur le site Web Kubernetes GitHub.

Remarque : L'image 1.1.3v comporte les configurations nécessaires pour vérifier l'interface réseau de votre instance Amazon Elastic Compute Cloud (Amazon EC2). Pour permettre au contrôleur d'entrée ALB de s'exécuter sur Fargate, le code d'image est modifié pour rechercher les interfaces réseau Elastic associées au lieu des nœuds de travail Amazon EC2.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?