Comment résilier le trafic HTTPS sur des charges de travail Amazon EKS avec ACM ?

Lecture de 4 minute(s)
0

Je souhaite résilier le trafic HTTPS sur des charges de travail Amazon Elastic Kubernetes Service (Amazon EKS) avec AWS Certificate Manager (ACM).

Brève description

Pour résilier le trafic HTTPS au niveau de l’Elastic Load Balancing pour un objet Kubernetes Service, vous devez :

  1. Demander un certificat ACM public pour votre domaine personnalisé.
  2. Publier votre service Kubernetes avec le champ type défini sur LoadBalancer.
  3. Spécifier l'Amazon Resource Name (ARN) de votre certificat ACM sur votre service Kubernetes à l'aide de l'annotation service.beta.kubernetes.io/aws-load-balancer-ssl-cert du site Web de Kubernetes. Cette annotation permet au serveur API Kubernetes d'associer ce certificat au Classic Load Balancer lors de sa création.
  4. Associer votre domaine personnalisé au DNS de l'équilibreur de charge.

La résolution suivante part du principe que :

  • Vous disposez d'un cluster Amazon EKS actif avec des composants master associés.
  • Vous utilisez un Classic Load Balancer.

Remarque : pour utiliser un Application Load Balancer, vous devez déployer l'équilibrage de charge des applications sur Amazon EKS.

Remarque : la résiliation des connexions TLS sur un Network Load Balancer est uniquement prise en charge dans Kubernetes version 1.15 ou ultérieure. Pour en savoir plus, consultez la page Support TLS termination with AWS NLB du site Web de Kubernetes.

Résolution

1.    Demandez un certificat ACM public pour votre domaine personnalisé.

2.    Identifiez l’ARN du certificat que vous souhaitez utiliser avec l'écouteur HTTPS de l'équilibreur de charge.

3.    Pour identifier les nœuds enregistrés dans votre cluster Amazon EKS, exécutez la commande suivante dans l'environnement dans lequel kubectl est configuré :

$ kubectl get nodes

4.    Dans votre éditeur de texte, créez un fichier manifeste deployment.yaml basé sur l’exemple suivant :

apiVersion: apps/v1
kind: Deployment
metadata:
  name: echo-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: echo-pod
  template:
    metadata:
      labels:
        app: echo-pod
    spec:
      containers:
      - name: echoheaders
        image: k8s.gcr.io/echoserver:1.10
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080

5.    Pour créer un objet Deployment Kubernetes, exécutez la commande suivante :

$ kubectl create -f deployment.yaml

6.    Pour vérifier que les pods Kubernetes sont bien déployés dans votre cluster Amazon EKS, exécutez la commande suivante :

$ kubectl get pods

Remarque : les pods sont étiquetés app=echo-pod. Utilisez cette étiquette comme sélecteur pour l'objet Service afin d'identifier un ensemble de pods.

7.    Dans votre éditeur de texte, créez un fichier manifeste service.yaml basé sur l'exemple suivant. Modifiez ensuite l'annotation service.beta.kubernetes.io/aws-load-balancer-ssl-cert pour fournir l'ARN ACM de l'étape 2.

apiVersion: v1
kind: Service
metadata:
  name: echo-service
  annotations:
    # Note that the backend talks over HTTP.
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
    # TODO: Fill in with the ARN of your certificate.
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:{region}:{user id}:certificate/{id}
    # Only run SSL on the port named "https" below.
    service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "https"
spec:
  selector:
    app: echo-pod
  ports:
  - name: http
    port: 80
    targetPort: 8080
  - name: https
    port: 443
    targetPort: 8080
  type: LoadBalancer

8.    Pour créer un objet Service, exécutez la commande suivante :

$ kubectl create -f service.yaml

9.    Pour renvoyer l'URL DNS du service de type LoadBalancer, exécutez la commande suivante :

$ kubectl get service

Remarque : si de nombreux services actifs sont en cours d'exécution dans votre cluster, récupérez l'URL du service adéquat de type LoadBalancer à partir de la sortie de la commande.

10.    Ouvrez la console Amazon Elastic Compute Cloud (Amazon EC2), puis sélectionnez Équilibreurs de charge.

11.    Sélectionnez votre équilibreur de charge, puis sélectionnez l’onglet Écouteurs.

12.    Pour Listener ID, vérifiez que le port de votre équilibreur de charge est défini sur 443.

13.    Pour SSL Certificate, vérifiez que le certificat SSL que vous avez défini dans le fichier YAML est attaché à votre équilibreur de charge.

14.    Associez votre nom de domaine personnalisé au nom de votre équilibreur de charge.

15.    Dans un navigateur Web, testez votre domaine personnalisé à l'aide du protocole HTTPS suivant :

https://yourdomain.com

Une réponse positive renvoie une page Web contenant des informations sur le client. Cette réponse inclut le nom d'hôte, les informations du pod, les valeurs du serveur, les informations de demande et les en-têtes de demande.

Important : vous ne pouvez pas installer de certificats avec des clés EC ou RSA de 4 096 bits dans votre équilibreur de charge via l'intégration à ACM. Pour utiliser les clés avec votre équilibreur de charge, vous devez télécharger des certificats contenant des clés EC ou RSA de 4 096 bits dans Gestion des identités et des accès AWS (AWS IAM). Utilisez ensuite l'ARN correspondant avec l'annotation service.beta.kubernetes.io/aws-load-balancer-ssl-cert.


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