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 :
- Demander un certificat ACM public pour votre domaine personnalisé.
- Publier votre service Kubernetes avec le champ type défini sur LoadBalancer.
- 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.
- 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.