Comment arrêter le trafic HTTPS sur les charges de travail Amazon EKS avec ACM ?

Date de la dernière mise à jour : 28/07/2021

Je souhaite arrêter le trafic HTTPS sur les charges de travail Amazon Elastic Kubernetes Service (Amazon EKS) avec AWS Certificate Manager (ACM).

Brève description

Afin d'arrêter le trafic HTTPS au niveau d'Elastic Load Balancing pour un objet du service Kubernetes, vous devez :

  1. Demandez un certificat ACM public pour votre domaine personnalisé.
  2. Publiez votre service Kubernetes avec le type de champ 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 à partir du site web Kubernetes. L'annotation permet au serveur d'API Kubernetes d'associer ce certificat au Classic Load Balancer lors de sa création.
  4. Associer votre domaine personnalisé à l'équilibreur de charge.

La résolution s'applique si :

  • Vous disposez d'un cluster Amazon EKS actif avec les nœuds de travail associés.
  • Vous travaillez avec 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 (dispositif d'équilibrage de charge de réseau) est prise en charge uniquement dans Kubernetes 1.15 et les versions ultérieures. Pour plus d'informations, consultez Prise en charge de la résiliation TLS avec AWS NLB sur le site Web de Kubernetes.

Résolution

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

2.    Identifiez le nom ARN du certificat à utiliser avec le programme d'écoute 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 où kubectl est configuré :

$ kubectl get nodes

4.    Dans votre éditeur de texte, créez le fichier manifeste deployment.yaml en fonction de ce qui suit :

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 de déploiement Kubernetes, exécutez la commande suivante :

$ kubectl create -f deployment.yaml

6.    Pour vérifier que les pods Kubernetes sont 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. Vous pouvez utiliser cette étiquette comme sélecteur pour l'objet Service pour identifier un ensemble de pods.

7.    Dans votre éditeur de texte, créez le fichier manifeste service.yaml basé sur l'exemple suivant : Ensuite, modifiez l'annotation service.beta.kubernetes.io/aws-load-balancer-ssl-cert afin de 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 vous avez un grand nombre de services actifs s'exécutant dans votre cluster, obtenez l'URL du service approprié de type LoadBalancer dans la sortie de commande.

10.    Ouvrez la console Amazon Elastic Compute Cloud (Amazon EC2), puis choisissez Load Balancers.

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

12.    Pour ID de l'écouteur, vérifiez que le port de l'équilibreur de charge est le port 443.

13.    Pour Certificat SSL, 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é avec le protocole HTTPS suivant :

https://yourdomain.com

Une réponse réussie renvoie une page web avec les détails sur le client. Cette réponse inclut le nom de l'hôte, les informations du pod, les valeurs du serveur, les informations et les en-têtes de la demande.

Important : vous ne pouvez pas installer de certificats avec des clés RSA ou des clés EC de 4 096 bits sur 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 avec des clés RSA ou EC 4 096 bits sur AWS Identity and Access Management (IAM). Ensuite, utilisez l'ARN correspondant avec l'annotation service.beta.kubernetes.io/aws-load-balancer-ssl-cert.


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


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