Configuration TLS¶
AKKO supporte quatre modes TLS, contrôlés par global.tls.mode dans values.yaml.
Référence rapide¶
| Mode | Source du certificat | Air-Gapped | Complexité |
|---|---|---|---|
cloudflare-proxy |
Edge Cloudflare (automatique) | Non | Faible |
cert-manager |
Let's Encrypt via DNS-01 | Oui (changer solver) | Moyenne |
self-signed |
Généré par Helm (dev uniquement) | Oui | Aucune |
disabled |
Pas de TLS | N/A | Aucune |
Approche A — Cloudflare Proxy (Recommandée pour SaaS)¶
Cloudflare termine le TLS à l'edge. Zéro gestion de certificat côté cluster.
Configuration (5 minutes)¶
-
DNS Cloudflare : Ajouter un enregistrement A pointant vers l'IP du serveur (ex :
159.195.77.208). Activer le nuage orange (Proxy ON) pour chaque enregistrement. -
Mode SSL/TLS : Dans le tableau de bord Cloudflare, aller dans SSL/TLS > Overview et définir le mode sur Full (Strict).
-
Certificat Origin (recommandé pour Full Strict) :
- Aller dans SSL/TLS > Origin Server > Create Certificate.
- Noms d'hôtes :
*.akko-ai.com, akko-ai.com. - Validité : 15 ans (les certificats origin Cloudflare sont gratuits).
- Télécharger le certificat et la clé privée.
- Créer le secret Kubernetes :
-
Valeurs Helm :
-
Paramètres de sécurité Cloudflare (recommandés) :
- Always Use HTTPS : ON
- Minimum TLS Version : 1.2
- HSTS : Activer avec
max-age=31536000; includeSubDomains - Automatic HTTPS Rewrites : ON
Avantages et inconvénients¶
- Avantages : Zéro maintenance, protection DDoS, cache CDN, WAF disponible.
- Inconvénients : Nécessite Cloudflare, pas air-gapped, le trafic transite par un tiers.
Approche B — cert-manager DNS-01 (Recommandée pour Enterprise)¶
cert-manager provisionne un certificat wildcard Let's Encrypt via le challenge DNS-01. Entièrement portable : changer le solver DNS pour n'importe quel fournisseur (Cloudflare, Route53, Azure DNS, Google Cloud DNS).
Prérequis¶
Installer les CRDs cert-manager dans le cluster :
helm repo add jetstack https://charts.jetstack.io
helm install cert-manager jetstack/cert-manager \
--namespace cert-manager --create-namespace \
--version v1.17.2 \
--set crds.enabled=true
Token API Cloudflare¶
Créer un token API scopé dans Cloudflare :
- Aller dans My Profile > API Tokens > Create Token.
- Utiliser le modèle Edit zone DNS.
- Permissions :
Zone:DNS:Edit+Zone:Zone:Read. - Ressources de zone : Inclure la zone spécifique
akko-ai.com. - Sauvegarder le token.
Valeurs Helm¶
global:
tls:
mode: "cert-manager"
secretName: akko-tls
skipVerify: false
akko-cert-manager:
enabled: true
acme:
environment: "production" # Utiliser "staging" pour les tests
email: "admin@akko-ai.com"
dns01:
provider: "cloudflare"
cloudflare:
apiToken: "" # Définir via --set ou values-dev-secrets.yaml
Vérification¶
# Vérifier le statut du certificat
kubectl get certificate akko-wildcard-cert -n akko
# Vérifier les détails du certificat
kubectl describe certificate akko-wildcard-cert -n akko
# Vérifier les logs cert-manager
kubectl logs -n cert-manager deploy/cert-manager
# Vérifier que le secret a été créé
kubectl get secret akko-tls -n akko
Le certificat se renouvelle automatiquement 30 jours avant expiration. Aucune intervention manuelle nécessaire.
Déploiement air-gapped¶
Pour les environnements air-gapped, remplacer l'issuer ACME par un issuer CA :
# Utiliser une CA privée au lieu de Let's Encrypt
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: akko-private-ca
spec:
ca:
secretName: akko-ca-keypair # Votre cert+clé CA privée
Self-Signed (Développement)¶
Mode par défaut pour k3d/développement local. Traefik utilise le secret akko-tls contenant un certificat auto-signé.
Les navigateurs afficheront un avertissement de certificat. C'est normal en développement.
Changer de mode¶
Pour passer de self-signed (dev) à Cloudflare proxy (production) :
# 1. Créer le secret du certificat origin
kubectl create secret tls akko-tls \
--cert=origin-cert.pem --key=origin-key.pem -n akko
# 2. Mettre à jour avec le nouveau mode TLS
helm upgrade akko helm/akko/ -n akko \
-f values-dev.yaml -f values-domain.yaml -f values-dev-secrets.yaml \
--set global.tls.mode=cloudflare-proxy \
--set global.tls.skipVerify=false