Rancher – Comment déployer Let’s Encrypt pour ne plus jamais avoir de problème de certificat

Dans cet article, nous allons voir comment utiliser Let’s Encrypt pour générer des certificats SSL pour un site WordPress hébergé sur Rancher. Nous allons utiliser cert-manager pour automatiser le processus de renouvellement des certificats.

Prérequis

Avant de commencer, vous devez avoir les éléments suivants en place:

  • Un cluster Rancher fonctionnel
  • Un nom de domaine pour votre site WordPress
  • Un service DNS configuré pour pointer vers l’IP de votre cluster Rancher

Installation de cert-manager

Pour installer cert-manager, vous devez d’abord ajouter le dépôt Helm de cert-manager à votre cluster Rancher:

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

Ensuite, utilisez Helm pour installer cert-manager en utilisant la commande suivante:

helm install cert-manager jetstack/cert-manager \
  --namespace cert-manager \
  --version v1.2.0

Cela va installer cert-manager dans le namespace « cert-manager » de votre cluster Rancher.

Note: Assurez-vous que vous utilisez la dernière version de cert-manager

Configuration de cert-manager

Une fois cert-manager installé, vous devez configurer un « ClusterIssuer » pour utiliser Let’s Encrypt. Pour ce faire, créez un fichier nommé « letsencrypt-issuer.yaml » avec le contenu suivant.

Note: Si vous utilisez un autre fournisseur de DNS, vous devez adapter cette configuration en conséquence.

Pour Route53

apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    email: votre_adresse_email
    server: https://acme-v02.api.letsencrypt.org/directory
    privateKeySecretRef:
      name: letsencrypt-prod
    solvers:
    - dns01:
        route53:
          accessKeyID: AKIAIOSFODNN7EXAMPLE
          secretAccessKeySecretRef:
            key: access_key
            name: aws-secret
          hostedZoneID: Z1D633PJN98FT9

Ce fichier configure cert-manager pour utiliser Let’s Encrypt avec votre adresse email et une clé privée stockée dans un secret nommé « letsencrypt-prod ». Il utilise également Route53 pour vérifier les propriétés de domaine.

Pour OVH

apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    email: votre_adresse_email
    server: https://acme-v02.api.letsencrypt.org/directory
    privateKeySecretRef:
      name: letsencrypt-prod
    solvers:
    - dns01:
        ovh:
          endpoint: ovh-eu
          applicationKey: "application_key"
          applicationSecret: "application_secret"
          consumerKey: "consumer_key"

Ce fichier configure cert-manager pour utiliser Let’s Encrypt avec votre adresse email et une clé privée stockée dans un secret nommé « letsencrypt-prod ». Il utilise également OVH pour vérifier les propriétés de domaine.

Notez: Il faut remplacer les valeurs « application_key », »application_secret » et « consumer_key » par les valeurs obtenues depuis votre compte OVH.

Pour créer le secret, utilisez la commande suivante :

kubectl create secret generic letsencrypt-prod --from-file=tls

Déploiement de WordPress avec un certificat Let’s Encrypt

Maintenant que cert-manager est configuré, vous pouvez déployer WordPress avec un certificat Let’s Encrypt. Pour ce faire, créez un fichier nommé « wordpress-letsencrypt.yaml » avec le contenu suivant:

apiVersion: v1
kind: Service
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  ports:
  - name: http
    port: 80
    targetPort: 80
  selector:
    app: wordpress
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress
spec:
  replicas: 1
  selector:
    matchLabels:
      app: wordpress
  template:
    metadata:
      labels:
        app: wordpress
    spec:
      containers:
      - name: wordpress
        image: wordpress:latest
        ports:
        - name: http
          containerPort: 80
        env:
        - name: WORDPRESS_DB_HOST
          value: wordpress-mysql
        - name: WORDPRESS_DB_USER
          value: wordpress
        - name: WORDPRESS_DB_PASSWORD
          value: wordpress
        - name: WORDPRESS_DB_NAME
          value: wordpress
      volumes:
      - name: wordpress-data
        persistentVolumeClaim:
          claimName: wordpress-data
---
apiVersion: v1
kind: Service
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  ports:
  - name: mysql
    port: 3306
    targetPort: 3306
  selector:
    app: wordpress
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress-mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: wordpress
  template:
    metadata:
      labels:
        app: wordpress
    spec:
      containers:
      - name: wordpress-mysql
        image: mysql:5.7
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: wordpress
        - name: MYSQL_DATABASE
          value: wordpress
        - name: MYSQL_USER
          value: wordpress
        - name: MYSQL_PASSWORD
          value: wordpress
        ports:
        - name: mysql
          containerPort: 3306
        volumeMounts:
        - name: mysql-data
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-data
        persistentVolumeClaim:
          claimName: mysql-data
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: wordpress
  annotations:
    cert-manager.io/issuer: "letsencrypt-prod"
    kubernetes.io/ingress.class: nginx
spec:
  tls:
  - hosts:
    - nom_de_domaine.com
    secretName: nom_de_domaine-tls
  rules:
  - host: nom_de_domaine.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: wordpress
            port:
              name: http

Ce fichier déploie un service WordPress avec un certificat Let’s Encrypt généré par cert-manager, en utilisant l’issuer « letsencrypt-prod » configuré précédemment. Il configure également un ingress pour rediriger les requêtes vers le service WordPress.

Notes: Assurez-vous de remplacer « nom_de_domaine.com » par le nom de domaine de votre site WordPress

Pour déployer WordPress avec cert-manager, utilisez la commande suivante:

kubectl apply -f wordpress-letsencrypt.yaml

Cela va déployer WordPress avec un certificat Let’s Encrypt valide. Cert-manager va automatiquement renouveler le certificat avant qu’il n’expire. Vous n’aurez plus à vous soucier des problèmes de certificat pour votre site WordPress sur Rancher.

En résumé, en utilisant Let’s Encrypt et cert-manager, vous pouvez facilement déployer un site WordPress sur Rancher avec un certificat SSL valide et automatiquement renouvelé. Cela garantit que vous n’aurez plus jamais à vous soucier des problèmes de certificat pour votre site.

L’utilisation de OVH pour la vérification de propriété de domaine vous permet également de générer des certificats pour vos domaines sans avoir besoin d’une autorité de certification externe. Les étapes décrites dans cet article vous aideront à configurer un environnement sécurisé pour votre site WordPress sur Rancher, pour que vous puissiez vous concentrer sur la gestion de votre contenu.