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 : 11/04/2022

Je souhaite configurer un Application Load Balancer 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 l’Application Load Balancer à l’aide du contrôleur AWS Load Balancer sur un groupe de nœuds Amazon EC2 dans Amazon EKS. Si vous souhaitez créer un Network Load Balancer, consultez Contrôleur AWS Load Balancer.

Le contrôleur AWS Load Balancer doit être connecté à un point de terminaison de service AWS, tel qu'AWS Identity and Access Management (IAM), EC2, AWS Certificate Manager (ACM), Elastic Load Balancing, Amazon Cognito, AWS WAF ou AWS Shield. Cela signifie que vous devez disposer d'une connexion Internet sortante pour que le contrôleur AWS Load Balancer fonctionne. Pour plus d'informations, consultez Comment configurer mes sous-réseaux pour un cluster Amazon EKS ?

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

Étiqueter vos sous-réseaux pour permettre la détection automatique

Étiquetez les sous-réseaux Amazon VPC dans votre cluster Amazon EKS pour permettre à votre contrôleur AWS Load Balancer de détecter automatiquement des sous-réseaux lors de la création de la ressource de la ressource Application Load Balancer.

Pour les Application Load Balancers publics, vous devez disposer d'au moins deux sous-réseaux publics dans le VPC de votre cluster avec les identifications suivantes :

kubernetes.io/role/elb

Pour les Application Load Balancers publics, vous devez disposer d'au moins deux sous-réseaux privés dans le VPC de votre cluster avec les identifications suivantes :

kubernetes.io/role/internal-elb

Remarque : si vous recevez des erreurs lors de l'exécution de commandes AWS Command Line Interface (AWS CLI), veillez à utiliser la version la plus récente d'AWS CLI.

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 créez un rôle IAM avec eksctl, 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 disposez des identifications 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, par exemple « v1.6.0 ») 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 -Lo ingress-controller.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/$VERSION/v2_4_1_full.yaml

Remarque : remplacez $VERSION par la version (à partir du site Kubernetes SIGs GitHub, par exemple « v2.4.1 ») 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 public à 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, par exemple « v2.3.0 ») 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, par exemple « v2.3.0 ») du contrôleur AWS Load Balancer que vous souhaitez déployer.


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


Avez-vous besoin d'aide pour une question technique ou de facturation ?