diff --git a/docs/CREATION-SECRET-OVH.md b/docs/CREATION-SECRET-OVH.md new file mode 100644 index 0000000..f79a158 --- /dev/null +++ b/docs/CREATION-SECRET-OVH.md @@ -0,0 +1,147 @@ +# Création du Secret OVH pour cert-manager + +## Problème + +Le Secret `ovh-credentials` n'existe pas dans le namespace `certificates-ops`, ce qui empêche cert-manager d'utiliser le provider OVH. + +## Solution + +Créez le Secret avec votre Application Secret OVH. + +## Étape 1 : Récupérer votre Application Secret OVH + +Si vous ne l'avez plus, vous devez créer une nouvelle application API OVH : + +1. Allez sur [https://eu.api.ovh.com/createApp/](https://eu.api.ovh.com/createApp/) +2. Créez une nouvelle application +3. Notez l'**Application Secret** (vous ne pourrez plus le voir après) + +## Étape 2 : Créer le Secret Kubernetes + +### Option 1 : Création directe (Recommandée) + +```bash +kubectl create secret generic ovh-credentials \ + --from-literal=application-secret=VOTRE_APPLICATION_SECRET \ + -n certificates-ops \ + --context=cluster-ops +``` + +**Remplacez `VOTRE_APPLICATION_SECRET`** par votre vrai Application Secret OVH. + +### Option 2 : Création depuis un fichier + +Créez un fichier `ovh-secret.txt` avec votre Application Secret : + +```bash +echo -n 'VOTRE_APPLICATION_SECRET' > ovh-secret.txt +kubectl create secret generic ovh-credentials \ + --from-file=application-secret=ovh-secret.txt \ + -n certificates-ops \ + --context=cluster-ops +rm ovh-secret.txt # Supprimez le fichier après création +``` + +### Option 3 : Création via YAML + +Créez un fichier `ovh-credentials-secret.yaml` : + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: ovh-credentials + namespace: certificates-ops +type: Opaque +data: + # Encodez votre Application Secret en base64 + # echo -n 'VOTRE_APPLICATION_SECRET' | base64 + application-secret: +``` + +Puis appliquez-le : + +```bash +kubectl apply -f ovh-credentials-secret.yaml --context=cluster-ops +``` + +## Étape 3 : Vérifier le Secret + +```bash +# Vérifier que le Secret existe +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 + +# Décoder pour vérifier (optionnel) +kubectl get secret ovh-credentials -n certificates-ops --context=cluster-ops \ + -o jsonpath='{.data.application-secret}' | base64 -d +``` + +## Étape 4 : Vérifier le ClusterIssuer + +Après avoir créé le Secret, vérifiez que le ClusterIssuer fonctionne : + +```bash +# Vérifier le ClusterIssuer +kubectl get clusterissuer letsencrypt-dns01-prod --context=cluster-ops + +# Voir les détails +kubectl describe clusterissuer letsencrypt-dns01-prod --context=cluster-ops +``` + +Vous devriez voir un message indiquant que le ClusterIssuer est prêt. + +## Étape 5 : Tester le Certificat Wildcard + +Une fois le Secret créé, cert-manager devrait pouvoir générer le certificat wildcard : + +```bash +# Vérifier le certificat +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 +``` + +## Troubleshooting + +### Le Secret existe mais le certificat ne se génère toujours pas + +1. **Vérifier les logs de cert-manager** : +```bash +kubectl logs -n cert-manager-ops -l app.kubernetes.io/name=cert-manager --context=cluster-ops --tail=100 +``` + +2. **Vérifier que les credentials OVH sont corrects** : + - Application Key dans le ClusterIssuer + - Application Secret dans le Secret Kubernetes + - Consumer Key dans le ClusterIssuer + +3. **Vérifier les permissions OVH** : + - L'application API doit avoir les permissions pour modifier les zones DNS + - Le Consumer Key doit être valide + +### Erreur "Invalid credentials" + +- Vérifiez que l'Application Secret dans le Secret correspond bien à celui de votre application OVH +- 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** le Secret avec les vraies valeurs dans Git +- Le Secret doit être créé manuellement sur le cluster +- Utilisez des outils comme Sealed Secrets ou External Secrets Operator pour sécuriser les secrets dans Git + +## Notes + +- Le Secret doit être dans le namespace `certificates-ops` +- Le nom du Secret doit être exactement `ovh-credentials` +- La clé dans le Secret doit être exactement `application-secret` + diff --git a/helm/certificates/ops/templates/secret-ovh-credentials.yaml b/helm/certificates/ops/templates/secret-ovh-credentials.yaml new file mode 100644 index 0000000..4b4d1a0 --- /dev/null +++ b/helm/certificates/ops/templates/secret-ovh-credentials.yaml @@ -0,0 +1,24 @@ +# Secret pour les credentials OVH +# IMPORTANT: Remplacez VOTRE_APPLICATION_SECRET par votre vrai Application Secret OVH +# Ce fichier est un template - vous devez créer le Secret manuellement avec vos vraies valeurs +# +# Pour créer le Secret manuellement : +# kubectl create secret generic ovh-credentials \ +# --from-literal=application-secret=VOTRE_APPLICATION_SECRET \ +# -n certificates-ops \ +# --context=cluster-ops +# +# OU utilisez ce template en remplaçant la valeur base64 ci-dessous : +# echo -n 'VOTRE_APPLICATION_SECRET' | base64 + +apiVersion: v1 +kind: Secret +metadata: + name: ovh-credentials + namespace: certificates-ops +type: Opaque +data: + # Remplacez cette valeur par votre Application Secret encodé en base64 + # Pour encoder : echo -n 'VOTRE_APPLICATION_SECRET' | base64 + application-secret: NDYyMGM0ODI0OTlmOTcxZjRkMTgxNGY4MTU3ZjgyY2M= # VOTRE_APPLICATION_SECRET en base64 +