229 lines
6.8 KiB
Markdown
229 lines
6.8 KiB
Markdown
# 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
|
|
|