Certificats TLS
Choisir et installer les certificats pour l'ingress public Scrydon, les domaines privés et le routage Kubernetes via Traefik.
Scrydon expose le trafic navigateur et API via des objets Kubernetes Ingress. Le chart génère par défaut des Ingress compatibles Traefik et cert-manager.io/cluster-issuer: letsencrypt-prod, mais la responsabilité du certificat dépend de l'endroit où TLS se termine.
Choisir votre chemin
| Votre configuration | Parcours de certificat |
|---|---|
| Le nom d'hôte public atteint directement Traefik | Utilisez cert-manager avec Let's Encrypt. Le prérequis TLS présente le ClusterIssuer par défaut. |
| Domaine publiquement délégué, mais ingress privé | Utilisez Let's Encrypt DNS-01 avec un solveur de fournisseur DNS. |
| Nom d'hôte strictement privé | Utilisez une CA ACME interne ou un certificat d'entreprise statique. |
| Un équilibreur de charge en amont termine TLS | Installez le certificat public sur l'équilibreur, puis configurez le déchargement TLS. |
| L'équilibreur de charge en amont re-chiffre, ou les clients atteignent directement Traefik en HTTPS | Donnez à Traefik un certificat pour le nom d'hôte public. |
Responsabilités des certificats
| Segment | Certificat requis | Comportement Scrydon par défaut |
|---|---|---|
| Client vers Traefik | Le certificat vu par les clients pour routing.host ou les sous-domaines par application. Il peut être installé sur Traefik, ou sur un équilibreur de charge en amont si celui-ci termine TLS avant Traefik. | En mode sous-chemin, le chart référence tls-frontdoor. En mode sous-domaine, il référence tls-auth, tls-platform, tls-cortex, tls-agentic, tls-agentic-realtime, tls-analytics et tls-marimo-sidecar selon les composants activés. |
| Traefik vers les workloads | Aucun certificat public par défaut. Traefik route vers les Services applicatifs sur le réseau du cluster. | Les backends Ingress du chart utilisent les ports http des Services applicatifs. Le trafic service-à-service entre workloads Scrydon est protégé séparément par Dapr mTLS avec identité SPIFFE. |
Gardez ingress.tls.enabled: true dès que les utilisateurs accèdent à Scrydon via https://, même si un équilibreur de charge en amont termine TLS et transmet du HTTP brut à Traefik. Cette valeur contrôle la génération des URL publiques, CORS et les cookies sécurisés ; ce n'est pas seulement un interrupteur de certificat Traefik.
Si l'équilibreur en amont termine TLS et transmet du HTTP à Traefik, le certificat public appartient à cet équilibreur. Traefik doit tout de même faire confiance aux en-têtes transférés ; suivez Déchargement TLS.
Si l'équilibreur en amont re-chiffre vers Traefik, ou si les utilisateurs se connectent directement à Traefik en HTTPS, Traefik a besoin d'un certificat pour le nom d'hôte public.
DNS public et Let's Encrypt
Let's Encrypt ne peut émettre que pour des noms sous DNS publiquement délégué. HTTP-01 exige aussi que le nom d'hôte résolve publiquement vers un ingress capable de servir /.well-known/acme-challenge/... sur le port 80.
DNS-01 n'exige pas que l'enregistrement A soit public, mais exige toujours un domaine publiquement délégué où Let's Encrypt peut interroger le serveur DNS faisant autorité pour les enregistrements TXT _acme-challenge. Par exemple :
| Forme de domaine | Compatibilité Let's Encrypt |
|---|---|
app.example.com, où example.com est enregistré publiquement et où vous pouvez créer des enregistrements TXT DNS publics | Fonctionne. Utilisez HTTP-01 si l'ingress est public, ou DNS-01 si l'enregistrement A est privé. |
app.internal, something.local, ou toute zone privée sans DNS faisant autorité public | Ne fonctionne pas. Utilisez une CA interne ou un certificat d'entreprise statique. |
Option 1 : ACME interne avec step-ca
Pour les domaines strictement privés où vous voulez quand même l'émission et le renouvellement automatiques, exécutez une CA ACME interne comme Smallstep step-ca et pointez cert-manager vers elle.
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: internal-acme-issuer
spec:
acme:
server: https://step-ca.cert-manager.svc.cluster.local/acme/acme/directory
email: admin@yourcompany.local
privateKeySecretRef:
name: internal-acme-account-key
solvers:
- http01:
ingress:
ingressClassName: traefikUtilisez ensuite cet issuer dans vos valeurs Scrydon :
ingress:
tls:
enabled: true
clusterIssuer: internal-acme-issuer
routing:
host: app.yourcompany.localcert-manager remplira les mêmes Secrets TLS que ceux référencés par le chart. En mode sous-chemin par défaut, il s'agit de tls-frontdoor dans le namespace scrydon-platform.
Option 2 : apporter vos certificats statiques
Si votre équipe IT ou sécurité émet les certificats via une PKI d'entreprise, créez des Secrets TLS Kubernetes avec les noms référencés par les Ingress Scrydon.
Pour le routage sous-chemin par défaut :
kubectl create secret tls tls-frontdoor \
--cert=path/to/corporate-cert.crt \
--key=path/to/corporate-key.key \
-n scrydon-platformPour le routage sous-domaine, créez les secrets par application dans le namespace où chaque Ingress est rendu. Avec le namespace unique par défaut, créez-les tous dans scrydon-platform :
for name in tls-auth tls-platform tls-cortex tls-agentic tls-agentic-realtime tls-analytics tls-marimo-sidecar; do
kubectl create secret tls "$name" \
--cert=path/to/corporate-wildcard-or-host-cert.crt \
--key=path/to/corporate-key.key \
-n scrydon-platform
doneSi vous voulez aussi que Traefik ait un certificat de secours pour les routes qui ne spécifient pas de Secret TLS, configurez son TLSStore par défaut :
apiVersion: traefik.io/v1alpha1
kind: TLSStore
metadata:
name: default
namespace: traefik
spec:
defaultCertificate:
secretName: traefik-public-tlsCréez ce Secret traefik-public-tls dans le namespace traefik si vous utilisez ce certificat de secours.
Exigence de confiance côté client
Les certificats issus d'une CA privée ne sont pas automatiquement approuvés par les navigateurs ou clients API. Chaque poste utilisateur, serveur et automatisation qui se connecte à l'endpoint public Scrydon doit faire confiance à la CA racine ou intermédiaire émettrice.
Distribuez la CA racine d'entreprise via votre canal normal de gestion des terminaux, par exemple MDM, Active Directory Group Policy, Jamf, Intune ou votre image Linux de base. Sans cette racine installée, les clients verront des erreurs d'autorité de certification même si Traefik est correctement configuré.
Vérifier
kubectl get ingress -A
kubectl get certificate -A
kubectl -n scrydon-platform get secret tls-frontdoor
openssl s_client -connect app.example.com:443 -servername app.example.com </dev/nullVérifiez que le sujet/SAN du certificat présenté couvre le nom d'hôte public et que son émetteur chaîne vers une CA approuvée par vos clients.