Oct 10 2021

Renouveler un Certificat LetsEncrypt Automatiquement sur Kubernetes

Publié par à 2:36 sous Kubernetes

Installer cert-manager

Cert-manager est un chart Helm apportant ses propres ressources que vous pouvez installer sur un cluster Kubernetes. Il aide à l’automatisation des certificats, leur renouvellement et leur gestion. C’est une véritable valeur ajoutée lorsque vous faîtes appel à des fournisseurs de certificat qui offrent des APIs permettant d’automatiser ces traitements. De plus, il vaut mieux renouveler les certificats LetsEncrypt automatiquement puisqu’ils ne sont valides que pour une période de 3 mois.

cert-manager est disponible sur le dépôt Helm Jetstack, ajoutez-le à votre liste de repo comme ceci:

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


Cert-manager tourne dans son propre namespace, donc créez-le tout d’abord, et installez le chart Helm cert-manager

kubectl create namespace cert-manager
helm install cert-manager \
     --namespace cert-manager jetstack/cert-manager \
     --set installCRDs=true

–set installCRDs=true indique à cert-manager d’installer les custom ressources tels que les certificaterequests, les certificates ou encore les clusterissuers.


Cluster Issuer LetsEncrypt

Un cluster issuer va contenir les informations d’un fournisseur de certificat. Si vous souhaitez obtenir vos certificats SSL signés par LetsEncrypt, vous devrez appliquer ce fichier yaml au cluster Kubernetes:

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    email: it@company.xxx
    privateKeySecretRef:
      name: letsencrypt-prod
    server: https://acme-v02.api.letsencrypt.org/directory
    solvers:
    - http01:
        ingress:
          class: public-iks-k8s-nginx


LetsEncrypt appartient à la catégorie des issuers ACME, ce qui signifie qu’ils ont la confiance des navigateurs web. Il fournit un certificat après avoir vérifié que vous êtes le propriétaire du domaine. La vérification peut se faire de 2 façons: soit une entrée DNS TXT ou un challenge HTTP. Kubernetes dessert du HTTP donc la plupart choisiront le challenge HTTP01. Cela se définit dans la section solvers.

La seconde information importante est la classe. cert-manager va regarder les ingresses dont la classe correspond et leur fournira un certificat SSL. L’annotation classe des ingresses publics IBM Cloud s’appelle public-iks-k8s-nginx, vous devez donc la paramétrer dans la configuration du cluster issuer. Vérifiez votre ingress pour adapter à vos propres besoins.


Définition de l’Ingress

Maintenant que vous avez un cluster issuer et que cert-manager est installé, vous devrez leur spécifier à quel ingress ils doivent fournir des certificates. Cela se fait avec les annotations de l’ingress.
Spécifiez le cluster issuer dans l’annotation cert-manager.io/cluster-issuer tout simplement.
Comme vu précédemment, l’annotation kubernetes.io/ingress.class est fixée à public-iks-k8s-nginx sur IKS. Entrez ce qui convient dans votre setup.
Ajoutez acme.cert-manager.io/http01-edit-in-place selon que vous vouliez un ingress séparé pour le challenge HTTP ou qu’il fasse partie de l’ingress existant.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: app-ingress
  labels:
    name: app-ingress
  annotations:
    acme.cert-manager.io/http01-edit-in-place: "true"
    cert-manager.io/cluster-issuer: letsencrypt-prod
    kubernetes.io/ingress.class: public-iks-k8s-nginx
spec:
  tls:
  - hosts:
    - www.netexpertise.eu
    secretName: letsencrypt-netexpertise

  rules:
  - host: www.netexpertise.eu
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: app-backend-app
            port:
              number: 80


Renouveler les Certificats LetsEncrypt

Cert-manager va créer ingress, service et pod dans votre namespace qui fournira une page web pour le challenge HTTP. Ils disparaîtront dès que le certificat LetsEncrypt a été renouvelé et délivré dans le secret défini dans secretName.

Si vous rencontrez un problème, vous pouvez jeter un oeil aux logs des différents pods dans le namespace cert-manager, ainsi que dans le statut de la ressource certificate. Un kubectl describe cert devrait donner toutes les informations nécessaires.


One response so far

Une Réponse à “Renouveler un Certificat LetsEncrypt Automatiquement sur Kubernetes”

  1. rhuneauon 30 Juin 2022 at 11:38

    Parfait,

    Petit complement d’info, le secret va etre generé automatiquement a partir du secretName fourni dans l’ingress. Donc le secretName n’a pas la necessité d’avoir une valeur coherente.

Comments RSS

Leave a Reply