Comment puis-je configurer le contrôleur AWS Load Balancer sur un cluster Amazon EKS pour Fargate et déployer le jeu 2048 ?

Lecture de 7 minute(s)
0

Je souhaite configurer le contrôleur AWS Load Balancer sur un cluster Amazon Elastic Kubernetes Service (Amazon EKS) pour AWS Fargate. Après cela, je souhaite déployer le jeu 2048.

Brève description

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

Avant de configurer le contrôleur AWS Load Balancer sur un nouveau cluster Fargate, prenez les mesures suivantes :

  • Désinstallez le contrôleur Ingress AWS ALB pour Kubernetes. Le contrôleur AWS Load Balancer remplace les fonctionnalités du contrôleur Ingress AWS ALB.
  • Utilisez eksctl version 0.109.0 ou supérieure. Pour en savoir plus, consultez la page Installation du site Web eksctl.
  • Installez Helm sur le poste de travail.
  • Remplacez les valeurs des espaces réservés dans les extraits de code par vos propres valeurs.

Résolution

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

Pour créer un cluster et des politiques, 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 : 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. Autorisez le cluster à utiliser AWS Identity and Access Management (IAM) pour les comptes de service en exécutant la commande suivante :

    eksctl utils associate-iam-oidc-provider --cluster YOUR_CLUSTER_NAME --approve

    Remarque : la valeur FargateExecutionRole correspond au rôle utilisé pour que kubelet et kube-proxy exécutent votre pod Fargate. Cependant, ce n’est pas le rôle utilisé pour le pod Fargate (c’est-à-dire aws-load-balancer-controller). Pour les pods Fargate, vous devez utiliser le rôle IAM pour le compte de service. Pour en savoir plus, consultez la page Rôles IAM pour les comptes 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 :

    curl -o iam_policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.6.1/docs/install/iam_policy.json
  4. Créez une politique IAM à partir de la politique que vous avez téléchargée. Utilisez la commande suivante :

    aws iam create-policy \
    --policy-name AWSLoadBalancerControllerIAMPolicy \
    --policy-document file://iam_policy.json
  5. Créez un compte de service nommé aws-load-balancer-controller dans l’espace de noms kube-system pour le contrôleur AWS Load Balancer. Utilisez 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
  6. Exécutez l’une des commandes suivantes pour vérifier que le nouveau rôle de service est créé :

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

    -ou-

    kubectl get serviceaccount aws-load-balancer-controller --namespace kube-system

Installer le contrôleur AWS Load Balancer avec Helm

Pour installer le contrôleur AWS Load Balancer, 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. Mettez à jour le référentiel pour obtenir le graphique le plus récent :

      helm repo update eks
  3. Exécutez la commande suivante pour installer les Charts de Helm. Remarque : remplacez clusterName, region et vpcId par vos valeurs :

    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=<VPC_ID> \  
    --set serviceAccount.name=aws-load-balancer-controller \  
    -n kube-system
  4. Vérifiez que le contrôleur est installé avec succès :

    $ 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

Utilisez le contrôleur AWS Load Balancer pour créer un Application Load Balancer pour Ingress ou un Network Load Balancer. Utilisez l’un d’entre eux pour créer un service k8s. Pour déployer un exemple d’application appelé 2048 avec l’Application Load Balancer Ingress, procédez comme suit :

  1. Créez le profil Fargate requis pour le déploiement du jeu. Utilisez la commande suivante :

    eksctl create fargateprofile --cluster your-cluster --region your-region-code --name your-alb-sample-app --namespace game-2048
  2. Pour déployer l’exemple de jeu et vérifier que le contrôleur AWS Load Balancer crée une ressource Ingress ALB, exécutez la commande suivante :

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.6.1/docs/examples/2048/2048_full.yaml
  3. Après quelques minutes, vérifiez que la ressource Ingress a été créée en exécutant la commande suivante :

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

    Vous recevez le résultat suivant :

    NAME           CLASS    HOSTS   ADDRESS. PORTS   AGE
    ingress-2048   <none>   *       k8s-game2048-ingress2-xxxxxxxxxx-yyyyyyyyyy.us-

    Remarque : si votre Ingress n’est pas créé 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

    Les journaux peuvent contenir des messages d’erreur susceptibles de vous aider à diagnostiquer les problèmes liés à votre déploiement.

  4. Pour consulter l’exemple d’application, ouvrez un navigateur. Ensuite, accédez à l’URL ADRESSE issue de la sortie de commande précédente.
    Remarque : si vous ne voyez pas l’exemple d’application, patientez quelques minutes et actualisez votre navigateur.

Déployer un exemple d’application

Pour déployer un exemple d’application avec le service de mode d’adresse IP 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
  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.6.1/docs/examples/2048/2048_full.yaml
  3. Dans le manifeste de l’étape 2, supprimez cette section Ingress :

    apiVersion: networking.k8s.io/v1kind: 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 :

    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

    Vous recevez le résultat suivant :

    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:30159/TCP   23m
  7. Patientez quelques minutes jusqu’à ce que l’équilibreur de charge soit actif. Vérifiez ensuite que vous pouvez accéder au déploiement. Ouvrez le nom de domaine complet (FQDN) du NLB référencé dans la section IP EXTERNE d’un navigateur Web.

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, 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

La sortie de la commande journaux renvoie des messages d’erreur (avec des balises ou des sous-réseaux, par exemple). Ces messages d’erreur peuvent vous aider à corriger les erreurs courantes (sur le site Web GitHub Kubernetes). La commande obtenir les points de terminaison vous indique si les pods de déploiement sauvegardés sont correctement enregistrés. Les commandes obtenir ingress vous indiquent si les ressources Ingress sont déployées. Pour en savoir plus, consultez la page AWS Load Balancer Controller du site Web Kubernetes.

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