En utilisant AWS re:Post, vous acceptez les AWS re:Post Conditions d’utilisation

Comment configurer un Application Load Balancer via le contrôleur AWS Load Balancer sur un groupe de nœuds Amazon EC2 dans Amazon EKS ?

Lecture de 7 minute(s)
0

Je souhaite configurer un Application Load Balancer via le 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

Connectez le contrôleur AWS Load Balancer aux points de terminaison de l'un des services AWS suivants :

  • Gestion des identités et des accès AWS (AWS IAM)
  • Amazon EC2
  • AWS Certificate Manager (ACM)
  • Elastic Load Balancing (ELB)
  • Amazon Cognito
  • AWS WAF
  • AWS Shield

Pour que le contrôleur AWS Load Balancer fonctionne, vous devez disposer d'une connexion Internet sortante. Pour en savoir plus, consultez la page Comment configurer mes sous-réseaux pour un cluster Amazon EKS ?

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

Résolution

Étiquetage de vos sous-réseaux pour permettre la découverte automatique

Étiquetez les sous-réseaux Amazon Virtual Private Cloud (Amazon VPC) dans votre cluster Amazon EKS. Votre contrôleur AWS Load Balancer peut ainsi découvrir automatiquement les sous-réseaux lorsque vous créez 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 étiquettes suivantes :

kubernetes.io/role/elb

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

kubernetes.io/role/internal-elb

Création d’un fournisseur d'identité OIDC pour votre cluster

Utilisez eksctl ou la console de gestion AWS pour créer un fournisseur d'identité OpenID Connect (OIDC) à utiliser avec les rôles IAM pour les comptes de service.

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

Vous pouvez également utiliser 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 le nom de votre cluster, region-name par votre région AWS et ca-thumbprint par l'empreinte numérique de votre certificat CA racine. Vous pouvez obtenir l'empreinte numérique du certificat CA racine que votre cluster utilise avec oidc.eks.region-name.amazonaws.com.

Création d'une politique IAM pour le contrôleur AWS Load Balancer

La politique Amazon EKS que vous créez permet au contrôleur AWS Load Balancer d'effectuer des appels vers les API AWS. Lorsque vous accordez l'accès aux API AWS, il est recommandé d'utiliser des rôles AWS IAM pour les comptes de service.

  1. Téléchargez une politique IAM pour le contrôleur AWS Load Balancer depuis GitHub. Exécutez l'une des commandes suivantes, en fonction de votre région.
    Toutes les régions à l'exception de la Chine :

    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

    Régions de Pékin et du Ningxia en Chine :

    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 politique IAM nommée AWSLoadBalancerControllerIAMPolicy pour votre profil d'instance de composant master, exécutez la commande suivante :

    aws iam create-policy \    --policy-name AWSLoadBalancerControllerIAMPolicy \
        --policy-document file://iam-policy.json
  3. Notez l'ARN de la politique qui est renvoyé dans la sortie.

  4. Utilisez le rôle IAM existant ou créez un nouveau rôle IAM pour le contrôleur AWS Load Balancer.
    Remarque : pour utiliser eksctl afin de créer un rôle IAM, utilisez le paramètre —attach-policy-arn avec l'ARN de la politique IAM AWSLoadBalancerControllerIAMPolicy.

  5. Pour attacher AWSLoadBalancerControllerIAMPolicy aux rôles IAM, 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 identifiant de compte AWS et role-name par le nom de votre rôle IAM.

Déploiement du contrôleur AWS Load Balancer

  1. Vérifiez que vous disposez des étiquettes requises pour l'équilibreur de charge associé à vos sous-réseaux.

  2. Installez cert-manager afin de pouvoir injecter la configuration du certificat dans les webhooks. Utilisez Kubernetes version 1.16 ou ultérieure pour exécuter la commande suivante :

    kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/$VERSION/cert-manager.yaml
  3. Dans le fichier manifeste que vous avez téléchargé depuis le site de GitHub, exécutez la commande suivante :

    curl -Lo ingress-controller.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/$VERSION/v2_6_2_full.yaml

    Remarque : remplacez $VERSION par la version du contrôleur AWS Load Balancer que vous souhaitez déployer et modifiez le nom du fichier, par exemple v2_6_2_full.yaml pour la version 2.6.2. Pour en savoir plus, consultez le référentiel Kubernetes sur le site de GitHub. 

  4. Modifiez le nom de votre cluster dans cluster-name. Par exemple :

    spec:    
        containers:
        - args:
            - --cluster-name=your-cluster-name # edit the cluster name
            - --ingress-class=alb
  5.  Mettez à jour uniquement 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 identifiant de compte et role-name par le nom de votre 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éploiement d’un échantillon d'application pour tester le contrôleur AWS Load Balancer

Déployez un échantillon d'application pour vérifier que le contrôleur AWS Load Balancer crée un Application Load Balancer public en raison de l'objet d’entrée.

  1. Pour déployer un jeu appelé 2048 en tant qu'échantillon d'application, exécutez la commande suivante :
    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 (provenant de la page Kubernetes SIGs du site web GitHub) du contrôleur AWS Load Balancer que vous souhaitez déployer.
  2. Pour vérifier que la ressource d’entrée a été créée, attendez quelques minutes, puis exécutez la commande suivante :
    kubectl get ingress/ingress-2048 -n game-2048
    Vous obtiendrez une sortie similaire à l’exemple suivant :
    NAME           CLASS    HOSTS   ADDRESS                                                                   PORTS   AGEingress-2048   <none>   *       k8s-game2048-ingress2-xxxxxxxxxx-yyyyyyyyyy.us-west-2.elb.amazonaws.com   80      2m32s
     
  3. Si votre entrée n’est pas créée 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
    Remarque : les journaux du contrôleur AWS Load Balancer affichent souvent des messages d'erreur pour vous aider à résoudre les problèmes liés à votre déploiement.
  4. Pour consulter l'échantillon d'application, ouvrez un navigateur Web, puis accédez à l'adresse URL figurant dans le sortie de l'étape 2.
  5. Pour effacer l'échantillon 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 (provenant de la page Kubernetes SIGs du site web GitHub) du contrôleur AWS Load Balancer que vous souhaitez déployer.

Informations connexes

Comment résoudre les problèmes liés aux équilibreurs de charge créés par le contrôleur de service Kubernetes dans Amazon EKS ?

Comment résoudre les problèmes rencontrés lorsque j'utilise le contrôleur AWS Load Balancer pour créer un équilibreur de charge ?

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an