Comment installer Kubernetes Cert-Manager et configurer Let's Encrypt

0
293

Cert-Manager automatise le provisionnement des certificats au sein des clusters Kubernetes. Il fournit un ensemble de ressources personnalisées pour émettre des certificats et les attacher aux services.

L'un des cas d'utilisation les plus courants est la sécurisation des applications Web et des API avec des certificats SSL de Let’s Encrypt. Voici comment ajouter Cert-Manager à votre cluster, configurer un émetteur de certificat Let’s Encrypt et acquérir un certificat pour les pods exposés via une entrée.

Installation de Cert-Manager

Cert-Manager est le plus simple à installer avec Helm. Helm est un gestionnaire de packages Kubernetes qui vous permet d'ajouter des applications à votre cluster à l'aide de référentiels de graphiques prédéfinis. Assurez-vous que Helm est installé et configuré avec une connexion à votre cluster Kubernetes.

Commencez par ajouter le référentiel Jetstack à votre installation Helm. Jetstack a initialement développé Cert-Manager avant qu'il ne soit donné à la CNCF.

helm repo add jetstack https://charts.jetstack.io helm repo update

Installez maintenant Cert-Manager dans votre cluster :

helm install cert-manager jetstack/cert-manager –namespace cert-manager –create-namespace –version v1.5.3 –set installCRDs=true

Replace le numéro de version indiqué ci-dessus avec la dernière version indiquée dans la documentation Cert-Manager.

Publicité

La commande installera Cert-Manager dans un nouvel espace de noms Kubernetes appelé cert-manager. Le paramètre installCRDs ajoutera les ressources Kubernetes personnalisées de Cert-Manager pendant l'installation. Cela ne fonctionne qu'avec Helm version 3.2 et plus récente – si vous utilisez une ancienne version, vous devez ajouter manuellement les définitions de ressources avec Kubectl :

kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.3 /cert-manager.crds.yaml

Ajout du plugin Kubectl

Cert-Manager dispose d'un plugin Kubectl qui simplifie certaines tâches de gestion courantes. Il vous permet également de vérifier si Cert-Manager est opérationnel et prêt à traiter les demandes.

Installez le plugin en téléchargeant son archive et en l'extrayant dans le bon répertoire :

curl -L -o kubectl-cert-manager.tar.gz https://github.com/jetstack/cert-manager/releases/latest/download/kubectl-cert_manager-linux-amd64.tar.gz tar xzf kubectl-cert-manager.tar.gz sudo mv kubectl-cert_manager /usr/local/bin

Utilisez maintenant le plugin pour vérifier votre Cert -L'installation du gestionnaire fonctionne :

kubectl cert-manager check api

Vous devriez voir la sortie suivante :

L'API cert-manager est prête

Vous êtes maintenant prêt à ajouter un émetteur pour obtenir des certificats de Let’s Encrypt.

Création d'un émetteur de certificat

Les émetteurs et les émetteurs de cluster sont des ressources qui fournissent des certificats à votre cluster. L'installation de base de Cert-Manager créée jusqu'à présent est incapable d'émettre des certificats. L'ajout d'un émetteur configuré pour utiliser Let's Encrypt vous permet d'acquérir dynamiquement de nouveaux certificats pour les services de votre cluster.

Publicité

Créez un fichier YAML dans votre répertoire de travail et nommez-le issuer.yml. Ajoutez le contenu suivant :

apiVersion : cert-manager.io/v1 kind : ClusterIssuer metadata : name : letsencrypt-staging spec : acme : server : https://acme-staging-v02.api.letsencrypt.org/annuaire email : example@example.com privateKeySecretRef : nom : letsencrypt-staging solveurs : – http01 : ingress : classe : nginx

Vous devez remplacer l'adresse e-mail par votre propre e-mail de contact. Cela sera inclus dans vos certificats. Let’s Encrypt peut également vous envoyer un e-mail à l'adresse s'il a besoin de vous envoyer des alertes sur vos certificats.

Nous créons un ClusterIssuer car ceux-ci sont disponibles pour toutes les ressources de votre cluster, indépendamment de l'espace de noms. Un émetteur standard est une ressource à espace de noms qui ne peut fournir des certificats que dans son propre espace de noms.

Notre configuration d'émetteur demande à Cert-Manager d'obtenir des certificats du serveur intermédiaire Let's Encrypt. C'est une bonne idée d'utiliser l'environnement de transfert pendant que vous configurez votre intégration pour éviter d'atteindre les limites de taux de production strictes de Let's Encrypt.

Utilisez kubectl pour ajoutez l'émetteur à votre cluster :

kubectl create -f issuer.yml

Obtenir un certificat

Vous pouvez désormais utiliser votre émetteur pour acquérir un certificat pour un service exposé via une ressource Ingress. Cert-Manager surveille automatiquement les ressources Ingress et crée des certificats à l'aide de la configuration de leur champ tls. Il vous suffit d'ajouter une annotation qui nomme l'émetteur ou l'émetteur de cluster que vous souhaitez utiliser.

apiVersion : apps/v1 kind : métadonnées de déploiement : nom : my-app spec : réplicas : 1 selector : matchLabels : app : my-app template : metadata : labels : app : my-app spec : conteneurs : – name : my-app image : wordpress : derniers ports : – conteneurPort : 80   — apiVersion : v1 kind : métadonnées du service : nom : my-service spec : sélecteur : app : my-app ports : port : 80   — apiVersion : networking.k8s.io/v1beta1 genre : Métadonnées d'entrée : nom : my-ingress annotations : kubernetes.io/ingress.class : nginx cert-manager.io/cluster-issuer : letsencrypt-staging spec : règles : – host : example.com http : chemins : – path :/backend : serviceName : my-service servicePort : 80 tls : – hosts : – example.com

Ce fichier YAML définit un pod, un service et une entrée exposant le service. Il suppose l'utilisation de nginx-ingress comme contrôleur d'entrée. Le Pod exécute un conteneur WordPress qui sera accessible via HTTPS sur example.com.

Publicité

La présence de l'annotation cert-manager.io/cluster-issuer dans la ressource Ingress sera détectée par Cert-Manager. Il utilisera l'émetteur de cluster de mise en scène Letsencrypt créé précédemment pour acquérir un certificat couvrant les noms d'hôtes définis dans l'Ingress’ tls.hosts.

Utilisation de Let’s Encrypt en production

Une fois que vous avez réussi à obtenir un certificat de transfert, vous pouvez migrer vers les serveurs de production Let's Encrypt. Les certificats de transfert sont valides mais ne sont pas approuvés par les navigateurs, vous devez donc obtenir un remplacement de production avant de mettre votre site en ligne.

Il est préférable d'ajouter un émetteur de cluster distinct pour le serveur de production. Vous pouvez ensuite référencer l'émetteur approprié dans chacune de vos ressources Ingress, selon qu'elles sont prêtes pour la production.

Copiez la configuration de l'émetteur indiquée ci-dessus et remplacez les champs de nom parletsencrypt-production. Ensuite, remplacez l'URL du serveur par la valeur indiquée ci-dessous :

https://acme-v02.api.letsencrypt.org/directory

Créez le nouvel émetteur dans votre cluster :

kubectl create -f issuer-production.yml

Mettez à jour votre ressource Ingress pour demander un certificat de production en remplaçant la valeur de l'annotation cert-manager.io/cluster-issuer parletsencrypt-production (ou le nom que vous avez attribué à votre propre émetteur de production). Utilisez kubectl pour appliquer le changement :

kubectl apply -f my-ingress.yaml

Vous devriez maintenant avoir activé le HTTPS entièrement fonctionnel pour votre ressource Ingress. Cert-Manager gérera automatiquement vos certificats et les renouvellera avant leur expiration.

Mise à niveau de Cert-Manager

Les versions de Cert-Manager prennent généralement en charge in- placer les mises à niveau avec Helm :

mise à jour du référentiel helm upgrade helm upgrade –version <nouvelle version> cert-manager jetstack/cert-manager

Les certificats restent disponibles pendant les mises à niveau mais le processus de renouvellement sera interrompu.

Publicité

Bien que les mises à niveau soient désormais normalement simples, vous devez toujours consulter les notes de version pour identifier les modifications potentielles que vous devez apporter. Ceci est particulièrement important si vous mettez à niveau Kubernetes ou passez à travers plusieurs versions de Cert-Manager. Si vous utilisez toujours une ancienne version de Kubernetes, vous utilisez peut-être une version obsolète de Cert-Manager qui nécessite une intervention manuelle importante pour être mise à jour.

Résumé

Let's Encrypt est facilement ajouté à un cluster Kubernetes à l'aide de Cert-Manager. Vous devez installer Cert-Manager avec Helm, créer un émetteur qui utilise l'API Let’s Encrypt, puis référencer cet émetteur dans vos ressources Ingress.

Vous pouvez fournir à Cert-Manager votre propre configuration. pour les cas d'utilisation plus avancés. Vous pouvez spécifier une durée de vie de certificat (utilisez l'annotation cert-manager.io/duration Ingress), déclarer manuellement le nom commun du certificat (cert-manager.io/common-name) et utiliser des défis DNS au lieu de HTTP. Cette dernière option peut être utile dans des scénarios spécifiques, par exemple lorsque vous souhaitez acquérir un certificat générique.

Une utilisation simple pour protéger les applications Web et les API doit fonctionner telle quelle en utilisant les ressources indiquées ci-dessus. La vérification HTTP fonctionne en manipulant le contrôleur d'entrée pour fournir une URL temporaire bien connue à laquelle Let's Encrypt peut accéder. Si votre domaine fournit la valeur correcte à cette URL, Let’s Encrypt estime que vous avez le contrôle et émet le certificat.