# Configuration DNS-01 avec OVH ## Vue d'ensemble Ce guide explique comment configurer cert-manager pour générer des certificats Let's Encrypt wildcard en utilisant le DNS-01 challenge avec OVH comme fournisseur DNS. ## Prérequis - Un compte OVH avec accès à la gestion DNS du domaine `gkdomaine.fr` - Le domaine `dev.gkdomaine.fr` doit être résolvable publiquement via DNS OVH ## Étape 1 : Créer une Application API OVH ### 1.1 Accéder à l'API OVH 1. Connectez-vous à votre compte OVH 2. Allez sur [https://eu.api.ovh.com/createApp/](https://eu.api.ovh.com/createApp/) (pour l'Europe) 3. Connectez-vous avec votre compte OVH ### 1.2 Créer l'Application 1. Remplissez le formulaire : - **Application name** : `cert-manager-gkdomaine` (ou un nom de votre choix) - **Application description** : `Cert-manager pour certificats Let's Encrypt` - **Application validity** : `Unlimited` (ou la durée souhaitée) - **Callback URL** : Laissez vide 2. Cliquez sur **Create application** 3. **Notez les identifiants** : - **Application Key** (AK) : `xxxxxxxxxxxxxxxx` - **Application Secret** (AS) : `xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` ⚠️ **Important** : Notez ces valeurs, vous ne pourrez plus les voir après ! ## Étape 2 : Générer les Permissions et Consumer Key ### 2.1 Générer les Permissions Vous devez générer les permissions pour que l'application puisse modifier les enregistrements DNS. Utilisez l'API OVH ou le script suivant : ```bash # Remplacer par vos valeurs APPLICATION_KEY="VOTRE_APPLICATION_KEY" APPLICATION_SECRET="VOTRE_APPLICATION_SECRET" # Générer les permissions pour DNS curl -X POST "https://eu.api.ovh.com/v1/auth/credential" \ -H "X-Ovh-Application: $APPLICATION_KEY" \ -H "Content-Type: application/json" \ -d '{ "accessRules": [ { "method": "GET", "path": "/domain/zone/*" }, { "method": "POST", "path": "/domain/zone/*" }, { "method": "PUT", "path": "/domain/zone/*" }, { "method": "DELETE", "path": "/domain/zone/*" } ], "redirection": "https://www.ovh.com" }' ``` Cela retournera une URL de validation. Ouvrez cette URL dans votre navigateur et validez les permissions. ### 2.2 Récupérer le Consumer Key Après validation, vous recevrez un **Consumer Key** (CK). Notez-le également. ## Étape 3 : Créer le Secret Kubernetes Créez un Secret Kubernetes contenant l'Application Secret : ```bash kubectl create secret generic ovh-credentials \ --from-literal=application-secret=VOTRE_APPLICATION_SECRET \ -n certificates-ops \ --context=cluster-ops ``` **Important** : Remplacez `VOTRE_APPLICATION_SECRET` par la valeur réelle de votre Application Secret. ## Étape 4 : Configurer le ClusterIssuer ### 4.1 Mettre à jour le ClusterIssuer Éditez `helm/certificates/ops/templates/cluster-issuer-letsencrypt-dns01.yaml` et remplacez : ```yaml solvers: - dns01: ovh: endpoint: ovh-eu # ovh-eu pour l'Europe applicationKey: "VOTRE_APPLICATION_KEY" # Remplacez par votre Application Key applicationSecretRef: name: ovh-credentials key: application-secret consumerKey: "VOTRE_CONSUMER_KEY" # Remplacez par votre Consumer Key ``` **Remplacez** : - `VOTRE_APPLICATION_KEY` par votre Application Key - `VOTRE_CONSUMER_KEY` par votre Consumer Key ### 4.2 Endpoints OVH disponibles - `ovh-eu` : Pour l'Europe (recommandé pour la France) - `ovh-us` : Pour les États-Unis - `ovh-ca` : Pour le Canada ## Étape 5 : Vérifier la Configuration ### 5.1 Vérifier le Secret ```bash kubectl get secret ovh-credentials -n certificates-ops --context=cluster-ops # Vérifier le contenu (la valeur sera encodée en base64) kubectl get secret ovh-credentials -n certificates-ops --context=cluster-ops -o yaml ``` ### 5.2 Vérifier le ClusterIssuer ```bash kubectl get clusterissuer letsencrypt-dns01-prod --context=cluster-ops # Voir la configuration complète kubectl describe clusterissuer letsencrypt-dns01-prod --context=cluster-ops ``` ### 5.3 Vérifier le Certificat Wildcard ```bash # Vérifier que le certificat est créé kubectl get certificate wildcard-dev-tls -n certificates-ops --context=cluster-ops # Voir les détails kubectl describe certificate wildcard-dev-tls -n certificates-ops --context=cluster-ops # Vérifier les challenges DNS kubectl get challenges -n certificates-ops --context=cluster-ops ``` ## Étape 6 : Tester la Génération du Certificat Une fois déployé via ArgoCD, cert-manager tentera automatiquement de générer le certificat wildcard. Vous pouvez forcer la régénération en supprimant le certificat : ```bash kubectl delete certificate wildcard-dev-tls -n certificates-ops --context=cluster-ops ``` Cert-manager le recréera automatiquement. ## Troubleshooting ### Le certificat ne se génère pas 1. **Vérifier les logs de cert-manager** : ```bash kubectl logs -n cert-manager -l app.kubernetes.io/name=cert-manager --context=cluster-ops --tail=100 ``` 2. **Vérifier que le Secret existe** : ```bash kubectl get secret ovh-credentials -n certificates-ops --context=cluster-ops ``` 3. **Vérifier les credentials OVH** : - Vérifiez que l'Application Key est correcte - Vérifiez que l'Application Secret dans le Secret Kubernetes est correcte - Vérifiez que le Consumer Key est correct et valide ### Le challenge DNS échoue 1. **Vérifier que le domaine est résolvable** : ```bash dig _acme-challenge.dev.gkdomaine.fr TXT ``` 2. **Vérifier les permissions OVH** : - Assurez-vous que l'application API a les permissions pour modifier les zones DNS - Vérifiez que le Consumer Key est toujours valide 3. **Vérifier les détails du challenge** : ```bash kubectl describe challenge -n certificates-ops --context=cluster-ops ``` ### Erreur "Invalid credentials" - Vérifiez que l'Application Key, Application Secret et Consumer Key sont corrects - Vérifiez que le Consumer Key n'a pas expiré - Régénérez un nouveau Consumer Key si nécessaire ## Sécurité ⚠️ **Important** : - Ne commitez **jamais** les credentials OVH dans Git - Utilisez des secrets Kubernetes pour stocker l'Application Secret - L'Application Key et Consumer Key sont dans le ClusterIssuer (déployé via Git) - considérez utiliser Sealed Secrets ou External Secrets Operator pour les sécuriser ## Documentation OVH - [Documentation API OVH](https://docs.ovh.com/fr/api/) - [Génération des credentials OVH](https://docs.ovh.com/fr/api/first-steps-with-ovh-api/) - [Gestion DNS OVH via API](https://docs.ovh.com/fr/domains/editer-ma-zone-dns/) ## Notes Importantes - Le domaine `dev.gkdomaine.fr` doit être géré par OVH DNS - Les serveurs peuvent rester internes (pas besoin d'accès HTTP depuis Internet) - Le certificat wildcard couvre tous les sous-domaines `*.dev.gkdomaine.fr` - Le secret `wildcard-dev-tls` sera synchronisé automatiquement vers le cluster DEV