GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

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

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 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

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

La commande installera Cert-Manager dans un nouvel espace de noms Kubernetes appelé cert-manager . Les installCRDs ajoutera les ressources Kubernetes personnalisées de Cert-Manager lors de l'installation. Cela ne fonctionne qu'avec la version 3.2 de Helm et les versions ultérieures. Si vous utilisez une version plus ancienne, 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 à répondre aux 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 que votre installation Cert-Manager fonctionne :

kubectl cert-manager check api

Vous devriez voir le résultat suivant :

The cert-manager API is ready

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.

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/directory
    email: [email protected]
    privateKeySecretRef:
      name: letsencrypt-staging
    solvers:
      - http01:
          ingress:
            class: 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 doit vous envoyer des alertes concernant vos certificats.

Nous créons un ClusterIssuer car ils sont disponibles pour toutes les ressources de votre cluster, quel que soit l'espace de noms. Un Issuer 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 staging 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 ajouter 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 en utilisant la configuration dans leur tls domaine. Il vous suffit d'ajouter une annotation qui nomme l'émetteur ou l'émetteur du cluster que vous souhaitez utiliser.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-app
          image: wordpress:latest
          ports:
            - containerPort: 80
 
---

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
    port: 80
 
---

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    cert-manager.io/cluster-issuer: letsencrypt-staging
spec:
  rules:
    - host: example.com
      http:
        paths:
          - 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 en tant que contrôleur d'entrée. Le pod exécute un conteneur WordPress qui sera accessible via HTTPS sur example.com .

La présence du cert-manager.io/cluster-issuer L'annotation dans la ressource Ingress sera détectée par Cert-Manager. Il utilisera le letsencrypt-staging émetteur de cluster créé précédemment pour acquérir un certificat couvrant les noms d'hôtes définis dans le tls.hosts d'Ingress champ.

Utilisation de Let's Encrypt en production

Une fois que vous avez réussi à acquérir un certificat intermédiaire, vous pouvez migrer vers les serveurs de production Let's Encrypt. Les certificats intermédiaires sont valides mais non 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 ou non pour la production.

Copiez la configuration de l'émetteur indiquée ci-dessus et modifiez le name champs à letsencrypt-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 modifiant la valeur de cert-manager.io/cluster-issuer annotation à letsencrypt-production (ou le nom que vous avez attribué à votre propre émetteur de production). Utilisez kubectl pour appliquer la modification :

kubectl apply -f my-ingress.yaml

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

Mettre à niveau Cert-Manager

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

helm repo update
helm upgrade --version <new version> cert-manager jetstack/cert-manager

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

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 si vous passez par 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 la mettre à jour.

Résumé

Let's Encrypt s'ajoute facilement à 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 des cas d'utilisation plus avancés. Vous pouvez spécifier une durée de vie de certificat (utilisez le cert-manager.io/duration Ingress annotation), déclarez manuellement le nom commun du certificat (cert-manager.io/common-name ), et utilisez les 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 devrait fonctionner telle quelle en utilisant les ressources indiquées ci-dessus. La vérification HTTP fonctionne en manipulant le contrôleur Ingress pour fournir un .well-known temporaire URL à laquelle Let's Encrypt peut accéder. Si votre domaine fournit la valeur correcte à cette URL, Let's Encrypt considère que vous avez le contrôle et émet le certificat.


Docker
  1. Comment installer et configurer Ansible sous Windows

  2. Comment installer et configurer Nginx sur CentOS 7

  3. Comment installer et configurer Redis sur Ubuntu 18.04

  4. Comment installer et configurer Monit.

  5. Comment installer et configurer Monit.

Comment installer et configurer Redmine sur Debian 9

Comment installer et configurer Kubernetes (k8s) sur Ubuntu 18.04 LTS

Comment installer et configurer Kubernetes et Docker sur Ubuntu 18.04 LTS

Comment installer et configurer Kubernetes sur Ubuntu

Comment installer Let's Encrypt sur Nginx

Comment installer et configurer Grafana