Comment configurer le contrôleur d'entrée ALB sur un groupe de nœuds Amazon EC2 dans Amazon EKS ?

Dernière mise à jour : 02/10/2020

Je souhaite configurer le contrôleur d'entrée Application Load Balancer (ALB) 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 expliquent comment déployer le contrôleur d'entrée ALB sur un groupe de nœuds Amazon EC2 dans Amazon EKS.

Pour déployer le contrôleur d'entrée ALB sur AWS Fargate, consultez Comment configurer le contrôleur d'entrée ALB 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 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'autorité de certification racine. Vous pouvez obtenir l'empreinte numérique du certificat d'autorité de certification racine que votre cluster utilise avec oidc.eks.region-name.amazonaws.com.

Créer une stratégie IAM pour le contrôleur d'entrée ALB

La statégie Amazon EKS que vous créez permet au contrôleur d'entrée ALB d'effectuer des appels vers les API AWS en votre nom. Une bonne pratique consiste à 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 politique IAM pour le contrôleur d'entrée ALB à partir d'AWS GitHub, exécutez la commande suivante :

curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/master/docs/examples/iam-policy.json

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

aws iam create-policy \
--policy-name ALBIngressControllerIAMPolicy \
--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 d'entrée ALB.

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

5.    Pour attacher ALBIngressControllerIAMPolicy 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/ALBIngressControllerIAMPolicy \
--role-name role-name

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

6.    Pour créer un compte de service, un rôle de cluster et une liaison de rôle de cluster pour le contrôleur d'entrée ALB, exécutez la commande suivante :

curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/$VERSION/docs/examples/rbac-role.yaml

Remarque : remplacez $VERSION par la version du contrôleur d'entrée ALB que vous souhaitez déployer.

7.    Ouvrez le fichier rbac-role.yaml dans un éditeur de texte, puis apportez les modifications suivantes uniquement à la section ServiceAccount du fichier :

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

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

8.    Enregistrez le fichier rbac-role.yaml, puis exécutez la commande suivante :

kubectl apply -f rbac-role.yaml

Déployer le contrôleur d'entrée ALB

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

2.    Pour télécharger le fichier manifeste à partir d'AWS GitHub, exécutez la commande suivante :

curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/$VERSION/docs/examples/alb-ingress-controller.yaml

Remarque : remplacez $VERSION par la version du contrôleur d'entrée ALB que vous souhaitez déployer.

3.    Dans le fichier manifeste téléchargé, ajoutez le nom de votre cluster après la ligne --ingress-class = alb, puis enregistrez et fermez le fichier. Par exemple :

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

Pour trouver l'ID Amazon Virtual Private Cloud (Amazon VPC), exécutez la commande suivante dans AWS CLI :

aws eks describe-cluster --name cluster-name --query 'cluster.resourcesVpcConfig.vpcId' --output text

4.    Pour déployer le contrôleur d'entrée ALB, exécutez la commande suivante :

kubectl apply -f alb-ingress-controller.yaml

Déployer un exemple d'application pour tester le contrôleur d'entrée ALB

Déployez un exemple d'application pour vérifier que le contrôleur d'entrée ALB 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-alb-ingress-controller/$VERSION/docs/examples/2048/2048-namespace.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/$VERSION/docs/examples/2048/2048-deployment.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/$VERSION/docs/examples/2048/2048-service.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/$VERSION/docs/examples/2048/2048-ingress.yaml

Remarque : remplacez $VERSION par la version du contrôleur d'entrée ALB 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/2048-ingress -n 2048-game

Vous obtenez des résultats de ce type :

NAME           HOSTS    ADDRESS                                                                 PORTS       AGE
2048-ingress   *        example-2048game-2048ingr-6fa0-352729433.us-west-2.elb.amazonaws.com    80          24h

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 d'entrée ALB :

kubectl logs -n kube-system deployment.apps/alb-ingress-controller

Remarque : les journaux du contrôleur d'entrée ALB 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-alb-ingress-controller/$VERSION/docs/examples/2048/2048-namespace.yaml

Remarque : remplacez $VERSION par la version du contrôleur d'entrée ALB que vous souhaitez déployer.</p


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


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