Aller au contenu

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)

  1. 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.

  2. Mode SSL/TLS : Dans le tableau de bord Cloudflare, aller dans SSL/TLS > Overview et définir le mode sur Full (Strict).

  3. 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 :
      kubectl create secret tls akko-tls \
        --cert=origin-cert.pem \
        --key=origin-key.pem \
        -n akko
      
  4. Valeurs Helm :

    global:
      tls:
        mode: "cloudflare-proxy"
        secretName: akko-tls
        skipVerify: false
    

  5. 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 :

  1. Aller dans My Profile > API Tokens > Create Token.
  2. Utiliser le modèle Edit zone DNS.
  3. Permissions : Zone:DNS:Edit + Zone:Zone:Read.
  4. Ressources de zone : Inclure la zone spécifique akko-ai.com.
  5. 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é.

global:
  tls:
    mode: "self-signed"
    skipVerify: true  # Requis pour les certificats auto-signés

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