Comment faire pour configurer un Application Load Balancer à l'aide du contrôleur AWS Load Balancer sur un groupe de nœuds Amazon EC2 dans Amazon EKS ?

Dernière mise à jour : 15/03/2021

Je souhaite configurer un Application Load Balancer (ALB) en utilisant un contrôleur AWS Load Balancer sur un groupe de nœuds Amazon Elastic Compute Cloud (Amazon EC2) dans Amazon Elastic Kubernetes Service (Amazon EKS).

Brève description

Les étapes suivantes vous montrent comment déployer le contrôleur AWS Load Balancer sur un groupe de nœuds Amazon EC2 dans Amazon EKS. Si vous souhaitez créer un équilibreur de charge Network Load Balancer, consultez Contrôleur AWS Load Balancer.

Pour déployer le contrôleur AWS Load Balancer sur AWS Fargate, consultez Comment configurer le contrôleur AWS Load Balancer sur un cluster Amazon EKS pour Fargate ?

Résolution

Remarque : si vous recevez des erreurs lors de l'exécution de commandes depuis l'interface de ligne de commande AWS (AWS CLI), veillez à utiliser la version la plus récente de l'interface de ligne de commande AWS.

Créer un fournisseur d'identité OIDC pour votre cluster

Pour créer un fournisseur d'identité OpenID Connect (OIDC) pour votre cluster à utiliser avec les rôles AWS Identity and Access Management (IAM) pour les comptes de service, utilisez eksctl ou l'AWS Management Console.

Vous pouvez également utiliser l'interface de ligne de commande AWS (CLI) pour créer un fournisseur d'identité OIDC pour votre cluster. Par exemple :

ISSUER_URL=$(aws eks describe-cluster --name cluster-name \
  --query "cluster.identity.oidc.issuer" --region region-name --output text)
aws iam create-open-id-connect-provider \
  --url ${ISSUER_URL} \
  --thumbprint-list ca-thumbprint \
  --client-id-list sts.amazonaws.com \
  --region region-name

Remarque : remplacez cluster-name par votre nom de cluster, region-name par le nom de votre région AWS et ca-thumbprint par l'empreinte numérique de votre certificat d'une autorité de certification racine. Vous pouvez obtenir l' empreinte numérique du certificat d'une autorité de certification racine utilisé par votre cluster avec oidc.eks.region-name.amazonaws.com.

Créer une stratégie IAM pour le contrôleur AWS Load Balancer

La stratégie Amazon EKS que vous créez permet au contrôleur AWS Load Balancer d'effectuer des appels vers les API AWS en votre nom. Il est recommandé d'utiliser des rôles AWS IAM pour les comptes de service lorsque vous accordez l'accès aux API AWS.

1.    Pour télécharger un document de stratégie IAM pour le contrôleur AWS Load Balancer à partir d'AWS GitHub, exécutez l'une des commandes suivantes en fonction de votre région.

Toutes les régions autres que les régions de Chine :

curl -o iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/iam_policy.json

-ou-

Les régions de Chine Pékin et Ningxia :

curl -o iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/iam_policy_cn.json

2.    Pour créer une stratégie IAM nommée AWSLoadBalancerControllerIAMPolicy pour votre profil d'instance de nœud de travail, exécutez la commande suivante :

aws iam create-policy \
    --policy-name AWSLoadBalancerControllerIAMPolicy \
    --policy-document file://iam-policy.json

3.    Notez l'Amazon Resource Name (ARN) de la politique qui est renvoyée dans les résultats de l'étape 2.

4.    Utilisez le rôle IAM existant ou créez un nouveau rôle IAM pour le contrôleur AWS Load Balancer.

Conseil : Si vous utilisez eksctl pour créer un rôle IAM, utilisez le paramètre —attach-policy-arn avec l'ARN de la stratégie IAM AWSLoadBalancerControllerIAMPolicy.

5.    Pour attacher AWSLoadBalancerControllerIAMPolicy aux rôles IAM que vous avez identifiés précédemment, exécutez la commande suivante :

aws iam attach-role-policy \
--policy-arn arn:aws:iam::111122223333:policy/AWSLoadBalancerControllerIAMPolicy \
--role-name role-name

Remarque : remplacez 111122223333 par votre ID de compte AWS et role-name par votre nom de rôle IAM.

Déployer le contrôleur AWS Load Balancer

1.    Vérifiez que vous avez les balises nécessaires pour l'équilibreur de charge associé à vos sous-réseaux.

2.    Installez cert-manager afin que vous puissiez injecter la configuration du certificat dans les webhooks.

Pour Kubernetes 1.16 ou version ultérieure :

kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/$VERSION/cert-manager.yaml

Pour Kubernetes 1.15 ou version antérieure :

kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/$VERSION/cert-manager-legacy.yaml

Remarque : Remplacez $VERSION par la version (à partir du site Jetstack GitHub) du gestionnaire de certificats que vous souhaitez déployer.

3.    Dans le fichier manifeste téléchargé pour le contrôleur AWS Load Balancer à partir d'AWS GitHub, exécutez la commande suivante :

curl -o ingress-controller.yaml https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/$VERSION/docs/install/v2_1_0_full.yaml

Remarque : Remplacez $VERSION par la version (à partir du site Kubernetes SIGs GitHub) du contrôleur AWS Load Balancer que vous souhaitez déployer.

4.    Modifiez le nom de cluster de votre cluster. Par exemple :

spec:
    containers:
    - args:
        - --cluster-name=your-cluster-name # edit the cluster name
        - --ingress-class=alb

5.    Mettez uniquement à jour la section ServiceAccount du fichier. Par exemple :

apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/name: aws-load-balancer-controller
  annotations:                                                                        # Add the annotations line
    eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/role-name              # Add the IAM role
  name: aws-load-balancer-controller
  namespace: kube-system

Remarque : remplacez 111122223333 par votre ID de compte AWS et role-name par votre nom de rôle IAM.

6.    Pour déployer le contrôleur AWS Load Balancer, exécutez la commande suivante :

kubectl apply -f ingress-controller.yaml

Déployer un exemple d'application pour tester le contrôleur AWS Load Balancer

Déployez un exemple d'application pour vérifier que le contrôleur AWS Load Balancer crée un Application Load Balancer à cause de l'objet d'entrée.

1.    Pour déployer un jeu appelé 2048 comme exemple d'application, exécutez les commandes suivantes :

kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/$VERSION/docs/examples/2048/2048_full.yaml

Remarque : Remplacez $VERSION par la version (à partir du site Kubernetes SIGs GitHub) du contrôleur AWS Load Balancer que vous souhaitez déployer.

2.    Pour vérifier que la ressource Ingress a été créée, patientez quelques minutes, puis exécutez la commande suivante :

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

Vous obtenez une sortie similaire à ce qui suit:

NAME           CLASS    HOSTS   ADDRESS                                                                   PORTS   AGE
ingress-2048   <none>   *       k8s-game2048-ingress2-xxxxxxxxxx-yyyyyyyyyy.us-west-2.elb.amazonaws.com   80      2m32s

Si votre entrée n'est pas créée après quelques minutes, exécutez la commande suivante pour afficher les journaux du contrôleur AWS Load Balancer :

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

Remarque : les journaux du contrôleur AWS Load Balancer peuvent afficher des messages d'erreur pour vous aider à résoudre les problèmes liés à votre déploiement.

3.    Pour afficher l'exemple d'application, ouvrez un navigateur Web, puis accédez à l'adresse URL de la sortie de l'étape 2.

4.    Pour nettoyer l'exemple d'application, exécutez la commande suivante :

kubectl delete -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/$VERSION/docs/examples/2048/2048_full.yaml

Remarque : Remplacez $VERSION par la version (à partir du site Kubernetes SIGs GitHub) du contrôleur AWS Load Balancer que vous souhaitez déployer.


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


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