Je souhaite utiliser des certificats de protocole TLS pour activer les connexions HTTPS pour mes applications Amazon Elastic Kubernetes Service (Amazon EKS).
Brève description
Pour activer les connexions HTTPS pour vos applications Amazon EKS, suivez ces étapes :
- Obtenez un certificat TLS valide pour votre domaine personnalisé.
- Utilisez le type de service d'équilibrage de charge pour exposer votre service Kubernetes, ou utilisez AWS Load Balancer Controller pour exposer votre objet d'entrée Kubernetes.
- Associez votre domaine personnalisé au DNS de l'équilibreur de charge.
Résolution
Obtention d’un certificat TLS valide pour votre domaine personnalisé
Pour obtenir un certificat TLS valide pour votre domaine personnalisé, procédez comme suit :
-
Demandez un certificat AWS Certificate Manager (ACM) public pour votre domaine personnalisé, ou chargez votre propre certificat TLS sur ACM.
-
Identifiez l’ARN du certificat que vous souhaitez utiliser avec l'écouteur HTTPS de l'équilibreur de charge.
-
Pour créer un exemple de déploiement NGINX, exécutez la commande suivante :
$ kubectl create deploy web --image=nginx --port 80 --replicas=3
-
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 -l app=web
**Remarque :**Les pods sont étiquetés app=web. Utilisez cette étiquette comme sélecteur pour l'objet de service afin d'identifier un ensemble de pods.
Utilisation du type de service d'équilibrage de charge pour exposer votre service Kubernetes
Remarque : pour utiliser l'objet d'entrée afin d'exposer votre application, suivez les instructions de la sectionUtilisation de l'objet d'entrée pour exposer votre service Kubernetes.
Pour utiliser le type de service d'équilibrage de charge afin d'exposer votre service Kubernetes, procédez comme suit :
-
Pour créer un fichier manifeste service.yaml, utilisez le type de service LoadBalancer :
cat <<EOF > loadbalancer.yaml
apiVersion: v1
kind: Service
metadata:
name: lb-service
annotations:
# Note that the backend talks over HTTP.
service.beta.kubernetes.io/aws-load-balancer-type: external
# 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}
# Run TLS only on the port named "https" below.
service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "https"
# By default In-tree controller will create a Classic LoadBalancer if you require a NLB uncomment below annotation.
# service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
spec:
selector:
app: web
ports:
- name: http
port: 80
targetPort: 80
- name: https
port: 443
targetPort: 80
type: LoadBalancer
EOF
-
Modifiez l'annotationservice.beta.kubernetes.io/aws-load-balancer-tls-cert pour inclure l'ARN de l'ACM.
-
Pour appliquer le fichier loadbalancer.yaml, exécutez la commande suivante :
$ kubectl create -f loadbalancer.yaml
-
Suivez les instructions de la section Association de votre domaine personnalisé au DNS de l'équilibreur de charge.
Utilisation de l'objet d'entrée pour exposer votre service Kubernetes
Remarque : la résolution suivante suppose que vous avez installé AWS Load Balancer Controller dans votre cluster Amazon EKS. Pour en savoir plus, consultez la page aws-load-balancer-controller sur le site Web de GitHub.
Pour utiliser l'objet d'entrée afin d'exposer votre service Kubernetes, procédez comme suit :
- Créez un service Kubernetes de type NodePort en vous basant sur l'exemple suivant :
cat <<EOF > ingressservice.yaml
apiVersion: v1
kind: Service
metadata:
name: web-nginx
spec:
ports:
- port: 80
targetPort: 80
protocol: TCP
type: NodePort
selector:
app: web
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: "web-nginx-ingress"
annotations:
# Below annotation is to specify if the loadbalancer is "internal" or "internet-facing"
alb.ingress.kubernetes.io/scheme: internet-facing
# TODO: Fill in with the ARN of your certificate.
alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:us-west-2:xxxx:certificate/xxxxxx
# TODO: Fill in the listening ports.
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
# Set HTTP to HTTPS redirects. Every HTTP listener configured is redirected to below mentioned port over HTTPS.
alb.ingress.kubernetes.io/ssl-redirect: '443'
labels:
app: web
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: "web-nginx"
port:
number: 80
EOF
Remarque : le manifeste d'entrée précédent écoute HTTP et HTTPS, met fin au protocole TLS sur l’Application Load Balancer, puis redirige HTTP vers le protocole HTTPS.
- Pour appliquer le fichier ingressservice.yaml, exécutez la commande suivante :
$ kubectl create -f ingressservice.yaml
Association de votre domaine personnalisé au DNS de l'équilibreur de charge
Pour associer votre domaine personnalisé au DNS de l'équilibreur de charge, procédez comme suit :
-
Pour renvoyer l'URL de DNS du service de type LoadBalancer, exécutez la commande suivante :
$ kubectl get service
-
Pour renvoyer l'URL de DNS du service de type Ingress, exécutez la commande suivante :
$ kubectl get ingress/web-nginx-ingress
-
Associez votre nom de domaine personnalisé au nom de votre équilibreur de charge.
-
Dans un navigateur Web, testez votre domaine personnalisé à l'aide du protocole HTTPS suivant :
https://yourdomain.com