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.
Table des matières
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.