# 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: <app>-<env>-tls
  namespace: certificates-ops
spec:
  secretName: <app>-<env>-tls
  issuerRef:
    name: letsencrypt-prod  # HTTP-01 pour sites publics
    kind: ClusterIssuer
  dnsNames:
    - <app>.<env>.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: <app>-<env>-tls
  namespace: certificates-ops
spec:
  secretName: <app>-<env>-tls
  issuerRef:
    name: letsencrypt-dns01-prod  # DNS-01 pour sites internes
    kind: ClusterIssuer
  dnsNames:
    - <app>.<env>.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 `cert-manager-ops`
   - Le secret est déployé automatiquement via le chart `cert-manager-webhook-ovh`
   - Voir `helm/cert-manager-webhook-ovh/ops/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`)

