# Gestion des Certificats Let's Encrypt pour le cluster OPS Ce chart gère les certificats TLS générés par cert-manager dans le cluster OPS via Let's Encrypt. ## Stratégie de certificats - **Sites publics** (accessibles depuis Internet) → **Certificats individuels** avec `letsencrypt-prod` (HTTP-01) - Exemples : `homarr.dev.gkdomaine.fr`, `longhorn.dev.gkdomaine.fr` - Validation via HTTP-01 challenge (nécessite accès HTTP public) - **Sites internes** (accessibles uniquement en interne) → **Certificats wildcard** avec `letsencrypt-dns01-prod` (DNS-01) - Exemples : `*.dev.gkdomaine.fr`, `*.rct.gkdomaine.fr`, `*.prd.gkdomaine.fr` - Validation via DNS-01 challenge (nécessite le webhook OVH) - Un seul certificat wildcard couvre tous les sous-domaines d'un environnement ## Structure - `Chart.yaml` : Définition du chart Helm - `templates/` : Dossiers organisés par application - `homarr/` : Certificats pour l'application Homarr (sites publics) - `longhorn/` : Certificats pour Longhorn (sites publics) - `headlamp/` : Certificats pour Headlamp (sites internes) - `wildcard/` : Certificats wildcard pour les environnements (dev, rct, prd) ## ClusterIssuers ### letsencrypt-prod (HTTP-01) - Utilisé pour les certificats individuels des sites publics - Challenge HTTP-01 via Traefik - Pas besoin de configuration DNS supplémentaire ### letsencrypt-dns01-prod (DNS-01) - Utilisé pour les certificats wildcard des sites internes - Challenge DNS-01 via webhook OVH - Nécessite le secret `ovh-credentials` avec les credentials OVH API ## Ajout d'un nouveau certificat ### Pour un site public (certificat individuel) ```yaml apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: --tls namespace: certificates-ops spec: secretName: --tls issuerRef: name: letsencrypt-prod # HTTP-01 pour sites publics kind: ClusterIssuer dnsNames: - ..gkdomaine.fr ``` ### Pour un site interne (utiliser le wildcard) **Option 1 : Utiliser le certificat wildcard existant (recommandé)** Pas besoin de créer un Certificate ! Utilisez directement le secret wildcard dans votre Ingress : ```yaml # Dans votre values.yaml ou Ingress ingress: tls: - secretName: wildcard-dev-tls # Utilise le wildcard hosts: - headlamp.dev.gkdomaine.fr ``` **Option 2 : Créer un certificat individuel avec DNS-01** Si vous avez besoin d'un certificat spécifique (par exemple pour un domaine différent) : ```yaml apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: --tls namespace: certificates-ops spec: secretName: --tls issuerRef: name: letsencrypt-dns01-prod # DNS-01 pour sites internes kind: ClusterIssuer dnsNames: - ..gkdomaine.fr ``` ## Déploiement Les certificats sont déployés automatiquement via l'ApplicationSet `certificates-apps` dans ArgoCD. ## Prérequis ### Pour les certificats wildcard (DNS-01) 1. **Webhook OVH installé** : Le webhook `cert-manager-webhook-ovh` doit être installé 2. **Secret OVH credentials** : Le secret `ovh-credentials` doit exister dans le namespace `certificates-ops` - Voir `templates/secret-ovh-credentials.yaml` pour le template - Créez le secret avec vos vraies credentials OVH API ### Pour les certificats individuels (HTTP-01) - Aucun prérequis supplémentaire - Le cluster OPS doit avoir accès Internet - Les domaines doivent être accessibles publiquement via HTTP ## Vérification ```bash # Vérifier les certificats kubectl get certificates -n certificates-ops --context=cluster-ops # Vérifier un certificat spécifique kubectl describe certificate wildcard-dev-tls -n certificates-ops --context=cluster-ops # Vérifier les secrets TLS créés kubectl get secrets -n certificates-ops --context=cluster-ops | grep tls # Vérifier les ClusterIssuers kubectl get clusterissuers --context=cluster-ops ``` ## Synchronisation vers les autres clusters Les secrets TLS générés dans OPS doivent être synchronisés vers les clusters DEV/RCT/PRD où les applications sont déployées. Utilisez le script `scripts/sync-all-certificates.sh` pour synchroniser automatiquement tous les secrets TLS. ## Notes importantes - Les certificats sont créés dans le cluster OPS où cert-manager est installé - Le namespace du Certificate doit être `certificates-ops` - Pour utiliser le certificat dans d'autres clusters (DEV, RCT, PRD), le secret TLS doit être synchronisé depuis OPS - Les certificats wildcard couvrent tous les sous-domaines d'un environnement (ex: `*.dev.gkdomaine.fr`) - Les certificats individuels sont spécifiques à un domaine (ex: `homarr.dev.gkdomaine.fr`)