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

Date de la dernière mise à jour : 10/03/2020

Je souhaite arrêter le trafic HTTPS sur les charges de travail Amazon Elastic Kubernetes Services (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 de service Kubernetes, vous devez :

  1. demander 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. 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 : si vous souhaitez utiliser un équilibreur de charge d'application, vous devez déployer le contrôleur d'entrée ALB. Lorsque vous déployez l'entrée, vous pouvez spécifier le certificat avec l'annotation alb.ingress.kubernetes.io/certificate-arn ou laisser le contrôleur d'entrée détecter automatiquement le certificat ACM en fonction de la valeur de l'hôte.

Remarque : la résiliation des connexions TLS sur un Network Load Balancer est prise en charge uniquement dans Kubernetes 1.15 et les versions ultérieures.

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 que les pods Kubernetes ne soient pas 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 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, veillez à obtenir l'URL du service approprié de type LoadBalancer dans la sortie de commande.

10.    Ouvrez la console Amazon EC2, puis choisissez Équilibreurs de charge.

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 positive renvoie une page Web avec des informations sur le client, notamment le nom d'hôte, les informations de pod, les valeurs de serveur, les informations de demande et les en-têtes de demande.


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


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