Comment configurer le contrôleur AWS Load Balancer sur un cluster Amazon EKS pour Fargate ?

Lecture de 8 minute(s)
0

Je souhaite configurer le contrôleur AWS Load Balancer sur un cluster Amazon Elastic Kubernetes Service (Amazon EKS) pour AWS Fargate.

Résolution

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.

Vous pouvez configurer le contrôleur AWS Load Balancer sans aucun déploiement de contrôleur Application Load Balancer Ingress existant.

Prérequis :

  • Désinstallez le contrôleur AWS ALB Ingress pour Kubernetes existant. Le contrôleur AWS Load Balancer remplace ses fonctionnalités.
  • Utilisez eksctl version 0.109.0 ou ultérieure. Pour en savoir plus, consultez la page Installation du site Web d’eksctl.
  • Installez Helm sur votre poste de travail.

Créer un cluster Amazon EKS, une politique de compte de service AWS et des politiques de contrôle d’accès basé sur les rôles

Procédez comme suit :

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

    eksctl create cluster \
      --name YOUR_CLUSTER_NAME \
      --version 1.28 \
      --fargate

    Remarque : Remplacez YOUR_CLUSTER_NAME par le nom de votre cluster. 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).

  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 : Remplacez YOUR_CLUSTER_NAME par le nom de votre cluster. Le **kubelet ** et le kube-proxy utilisent FargateExecutionRole pour exécuter votre pod Fargate. Cependant, FargateExecutionRole n'est pas le rôle IAM du pod Fargate. Pour les pods Fargate, vous devez utiliser le rôle IAM pour le compte de service.

  3. Pour télécharger une politique IAM qui autorise le contrôleur AWS Load Balancer à passer des appels vers les API AWS en votre nom, exécutez la commande suivante :

  4.  curl -o iam_policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.11.0/docs/install/iam_policy.json
  5. Pour créer une politique IAM à l'aide de la politique téléchargée, exécutez la commande create-policy de l’interface de ligne de commande AWS suivante :

    aws iam create-policy \
      --policy-name AWSLoadBalancerControllerIAMPolicy \
      --policy-document file://iam_policy.json
  6. Pour créer un compte de service pour le contrôleur AWS Load Balancer, exécutez la commande suivante :

    eksctl create iamserviceaccount \
      --cluster=YOUR_CLUSTER_NAME \
      --namespace=kube-system \
      --name=aws-load-balancer-controller \
      --attach-policy-arn=arn:aws:iam::AWS_ACCOUNT_ID:policy/AWSLoadBalancerControllerIAMPolicy \
      --override-existing-serviceaccounts \
      --approve

    Remarque : Remplacez YOUR_CLUSTER_NAME par le nom de votre cluster et AWS_ACCOUNT_ID par l’ID de votre compte. La commande précédente crée un compte de service nommé aws-load-balancer-controller dans l'espace de noms kube-system.

  7. Pour vérifier que le nouveau rôle de service est créé, exécutez l'une des commandes suivantes :

    eksctl get iamserviceaccount \
      --cluster=YOUR_CLUSTER_NAME \
      --name=aws-load-balancer-controller \
      --namespace=kube-system

    Remarque : Remplacez YOUR_CLUSTER_NAME par le nom de votre cluster.
    -ou-

    kubectl get serviceaccount aws-load-balancer-controller \
      --namespace kube-system \
      -o yaml

Installer le contrôleur AWS Load Balancer avec Helm

Procédez comme suit :

  1. Pour ajouter le graphique Amazon EKS à Helm, exécutez la commande suivante :

    helm repo add eks https://aws.github.io/eks-charts
  2. Pour mettre à jour le référentiel et extraire le dernier graphique, exécutez la commande suivante :

    helm repo update eks
  3. Pour installer le graphique Helm, exécutez la commande suivante :

    helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
      --set clusterName=YOUR_CLUSTER_NAME \
      --set serviceAccount.create=false \
      --set region=YOUR_REGION_CODE \
      --set vpcId=EKS_CLUSTER_VPC_ID \
      --set serviceAccount.name=aws-load-balancer-controller \
      --version 1.11.0 \
      -n kube-system

    Remarque : Remplacez YOUR_CLUSTER_NAME par le nom de votre cluster et YOUR_REGION_CODE par la région AWS de votre cluster. Remplacez également EKS_CLUSTER_VPC_ID par l'ID de cloud privé virtuel (VPC) du cluster.

  4. Pour vérifier que le contrôleur est correctement installé, exécutez la commande suivante :

    kubectl get deployment -n kube-system aws-load-balancer-controller

    Exemple de sortie :

    NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
    aws-load-balancer-controller   2/2     2            2           84s

Tester le contrôleur AWS Load Balancer

Pour tester votre mise en œuvre, utilisez le contrôleur AWS Load Balancer pour créer l'une des ressources suivantes :

  • Un Application Load Balancer pour l'entrée
  • Un Network Load Balancer dont le Type est LoadBalancer pour Service

Une ressource d'entrée achemine le trafic vers différents services en fonction de concepts Web tels que les URI, les noms d'hôte et les chemins. Il est recommandé d'utiliser une ressource d'entrée pour partager un équilibreur de charge avec plusieurs services ou pour contrôler le routage des services. Utilisez un Service LoadBalancer pour attribuer un équilibreur de charge dédié à votre service.

Remarque : Les étapes de test suivantes déploient un exemple d'application de jeu appelé 2048.

Créer un Application Load Balancer

Pour créer un Application Load Balancer pour l’entrée, procédez comme suit :

  1. Pour créer le profil Fargate requis pour le déploiement du jeu, exécutez la commande suivante :

    eksctl create fargateprofile \
      --cluster YOUR_CLUSTER_NAME \
      --region YOUR_REGION_CODE \
      --name your-alb-sample-app \
      --namespace game-2048

    Remarque : Remplacez YOUR_CLUSTER_NAME par le nom de votre cluster et YOUR_REGION_CODE par votre région.

  2. Pour déployer l'application, exécutez la commande suivante :

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.11.0/docs/examples/2048/2048_full.yaml
  3. Patientez quelques minutes. Puis, exécutez la commande suivante pour vérifier que le contrôleur AWS Load Balancer a créé une ressource d'entrée :

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

    Exemple de sortie :

    NAME         CLASS HOSTS ADDRESS                                                                PORTS AGE
    ingress-2048 alb   *     k8s-game2048-ingress2-xxxxxxxxxx-yyyyyyyyyy.region.elb.amazonaws.com   80    3d4h

    Si aucune ressource d’entrée n’apparaît après quelques minutes, exécutez la commande suivante pour consulter les journaux du contrôleur AWS Load Balancer :

    kubectl logs -n kube-system deployment.apps/aws-load-balancer-controller

    Vérifiez dans les journaux l’existence de messages d’erreur susceptibles de vous aider à diagnostiquer les problèmes liés à votre déploiement.

  4. Pour afficher l'application, ouvrez un navigateur, puis accédez à l'URL dans la sortie de la commande de ressource d’entrée.
    Remarque : Si l’application n’est pas visible, patientez quelques minutes et actualisez votre navigateur.

Créer un Network Load Balancer

Pour déployer une application avec le service de mode d’adresse IP de Network Load Balancer, procédez comme suit :

  1. Pour créer un profil Fargate, exécutez la commande suivante :

    eksctl create fargateprofile --cluster your-cluster --region your-region-code --name your-alb-sample-app --namespace game-2048

    Remarque : Remplacez your-cluster par le nom de votre cluster et your-region-code par la région de votre cluster.

  2. Pour obtenir le manifeste permettant de déployer le jeu 2048, exécutez la commande suivante :

    curl -o 2048-game.yaml https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.11.0/docs/examples/2048/2048_full.yaml
  3. Dans le manifeste, supprimez la section Entrée suivante :

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      namespace: game-2048
      name: ingress-2048
      annotations:
        alb.ingress.kubernetes.io/scheme: internet-facing
        alb.ingress.kubernetes.io/target-type: ip
    spec:
      ingressClassName: alb
      rules:
        - http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: service-2048           
                    port:
                      number: 80
  4. Modifiez l'objet Service pour utiliser les valeurs suivantes :

    apiVersion: v1
    kind: Service
    metadata:
      namespace: game-2048
      name: service-2048
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "ip"
        service.beta.kubernetes.io/aws-load-balancer-type: external
        service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
    spec:
      ports:
        - port: 80
          targetPort: 80
          protocol: TCP
      type: LoadBalancer
      selector:
        app.kubernetes.io/name: app-2048
  5. Pour créer le service et le manifeste de déploiement, exécutez la commande suivante :

    kubectl apply -f 2048-game.yaml
  6. Pour vérifier la création du service et le nom DNS du Network Load Balancer, exécutez la commande suivante :

    kubectl get svc -n game-2048

    Exemple de sortie :

    NAME           TYPE           CLUSTER-IP       EXTERNAL-IP                                                               PORT(S)        AGE
    service-2048   LoadBalancer   10.100.114.197   k8s-game2048-service2-xxxxxxxxxx-yyyyyyyyyy.us-east-2.elb.amazonaws.com   80:xxxxx/TCP   23m
  7. Patientez quelques minutes jusqu’à ce que l’équilibreur de charge soit actif. Pour vérifier que vous pouvez accéder au déploiement, ouvrez un navigateur Web. Puis, ouvrez le nom de domaine complet (FQDN) dans la sortie de la commande sous EXTERNAL-IP.

Résoudre les problèmes liés au contrôleur AWS Load Balancer

Si vous rencontrez des problèmes lors de la configuration du contrôleur AWS Load Balancer, exécutez les commandes suivantes :

kubectl logs -n kube-system deployment.apps/aws-load-balancer-controller
kubectl get endpoints -n game-2048
kubectl get ingress/ingress-2048 -n game-2048

Vérifiez la sortie de la commande logs pour les messages d'erreur, tels que des problèmes liés aux identifications ou aux sous-réseaux. Pour connaître les étapes de résolution des erreurs courantes, consultez la page Problèmes sur le site Web de GitHub. Aussi, consultez la section Comment résoudre les problèmes rencontrés lorsque j'utilise le contrôleur AWS Load Balancer pour créer un équilibreur de charge ?

La commande get endpoints vous indique si vous avez enregistré correctement les pods de déploiement sauvegardés. Les commandes get ingress vous indiquent si les ressources d’entrée sont déployées.

Pour en savoir plus, consultez la page Contrôleur AWS Load Balancer du site Web de Kubernetes.

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 mois