Gestion des certificats
Comment fonctionnent les certificats HTTPS automatiques
Siovos fournit des certificats HTTPS automatiques pour tous vos services via une autorité de certification privée. Voici comment ça fonctionne.
La chaîne de certificats#
Trois composants travaillent ensemble pour fournir une gestion transparente des certificats :
Step CA - Votre autorité de certification privée. Émet des certificats de confiance pour tout domaine *.internal (ou votre suffixe configuré).
cert-manager - Opérateur Kubernetes qui automatise les demandes de certificats. Surveille les ressources Ingress et les CRDs Certificate, puis demande des certificats à Step CA.
Reflector - Copie les secrets de certificats entre namespaces. Permet à un certificat émis dans un namespace d'être utilisé par des services dans d'autres namespaces.
Comment ça fonctionne#
- Vous créez un Ingress avec une section TLS
- cert-manager détecte l'Ingress et crée une demande de Certificate
- cert-manager contacte Step CA pour émettre le certificat
- Le certificat est stocké comme Secret Kubernetes
- Traefik utilise le secret pour servir en HTTPS
- Reflector copie le secret vers d'autres namespaces si configuré
Demander un certificat#
Via Ingress (Recommandé)#
Ajoutez l'annotation cert-manager à votre Ingress :
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app
annotations:
cert-manager.io/cluster-issuer: step-ca-issuer
spec:
ingressClassName: traefik
tls:
- hosts:
- my-app.internal
secretName: my-app-tls
rules:
- host: my-app.internal
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-app
port:
number: 80cert-manager va automatiquement :
- Créer une ressource Certificate
- Demander un certificat à Step CA
- Le stocker dans le secret
my-app-tls
Via ressource Certificate (Manuel)#
Pour plus de contrôle, créez une ressource Certificate directement :
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: my-app-cert
namespace: my-namespace
spec:
secretName: my-app-tls
duration: 720h # 30 jours
renewBefore: 168h # 7 jours
issuerRef:
name: step-ca-issuer
kind: ClusterIssuer
dnsNames:
- my-app.internal
- api.my-app.internalRenouvellement des certificats#
Les certificats sont automatiquement renouvelés avant expiration. Par défaut :
- Durée du certificat : 30 jours
- Renouvellement : automatique avant expiration
Vous pouvez vérifier le statut des certificats :
kubectl get certificates -A
kubectl describe certificate my-app-cert -n my-namespacePartager des certificats entre namespaces#
Utilisez les annotations Reflector pour copier un secret de certificat vers d'autres namespaces :
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: shared-cert
namespace: cert-manager
spec:
secretName: shared-tls
secretTemplate:
annotations:
reflector.v1.k8s.emberstack.com/reflection-allowed: "true"
reflector.v1.k8s.emberstack.com/reflection-allowed-namespaces: "app1,app2,app3"
reflector.v1.k8s.emberstack.com/reflection-auto-enabled: "true"
issuerRef:
name: step-ca-issuer
kind: ClusterIssuer
dnsNames:
- "*.internal"Le secret sera automatiquement copié dans les namespaces app1, app2 et app3.
Certificats wildcard#
Pour plusieurs sous-domaines, utilisez un certificat wildcard :
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: wildcard-cert
spec:
secretName: wildcard-tls
issuerRef:
name: step-ca-issuer
kind: ClusterIssuer
dnsNames:
- "*.internal"
- "internal"Les certificats wildcard couvrent *.internal mais pas internal lui-même. Incluez les deux si nécessaire.
Faire confiance aux certificats#
Les certificats émis par Step CA ne sont de confiance que sur les machines qui ont le certificat racine CA installé. Voir Installation du certificat pour les instructions.
Vérifier le statut des certificats#
Voir tous les certificats :
kubectl get certificates -AVérifier un certificat spécifique :
kubectl describe certificate my-app-cert -n my-namespaceVoir le secret actuel :
kubectl get secret my-app-tls -n my-namespace -o yamlDépannage#
Certificat non émis#
-
Vérifiez les logs de cert-manager :
kubectl logs -n cert-manager deployment/cert-manager -
Vérifiez le statut du Certificate :
kubectl describe certificate my-app-cert -
Cherchez les ressources CertificateRequest :
kubectl get certificaterequests -A
Certificat affiche "Not Ready"#
Causes courantes :
- Step CA n'est pas en cours d'exécution
- Le ClusterIssuer est mal configuré
- Le nom DNS n'est pas autorisé par la politique de l'issuer
Secret non copié par Reflector#
- Vérifiez que les annotations Reflector sont correctes
- Vérifiez les logs de Reflector :
kubectl logs -n reflector deployment/reflector
Prochaines étapes#
- Installation du certificat - Installer le certificat racine CA sur vos appareils
- Ingress avec Traefik - Configurer le routage avec TLS automatique
- Dépannage - Plus de problèmes de certificats