Certificats TLS
Choisir et installer les certificats pour la périphérie publique Scrydon, les domaines privés et le routage Kubernetes via Traefik.
Scrydon expose le trafic navigateur et API via des objets Kubernetes Gateway API — une Gateway et une HTTPRoute par application activée. Le chart utilise par défaut la GatewayClass traefik et appose cert-manager.io/cluster-issuer: letsencrypt-prod sur la Gateway, 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 listener https de la Gateway référence tls-frontdoor. En mode sous-domaine, la Gateway reçoit un listener HTTPS par application activée, référençant tls-auth, tls-platform, tls-cortex, tls-agentic, tls-agentic-realtime et tls-analytics selon les composants activés. Chacun de ces Secrets est lu depuis l'espace de noms de la Gateway (scrydon-platform), même en installation répartie. Marimo reste sur l'origine Analytics authentifiée et ne nécessite aucun certificat distinct. |
| Traefik vers les workloads | Aucun certificat public par défaut. Traefik route vers les Services applicatifs sur le réseau du cluster. | Les backendRefs des HTTPRoutes du chart ciblent le port HTTP de chaque Service applicatif. Le trafic service-à-service entre workloads Scrydon est protégé séparément par Dapr mTLS avec identité SPIFFE. |
Gardez gateway.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:
gatewayHTTPRoute:
parentRefs:
- kind: Gateway
name: gateway-frontdoor
namespace: scrydon-platformUtilisez ensuite cet issuer dans vos valeurs Scrydon :
gateway:
tls:
enabled: true
clusterIssuer: internal-acme-issuer
routing:
host: app.yourcompany.localcert-manager remplit tls-frontdoor dans l'espace de noms de la plateforme, là
où vit la Gateway. Il n'y a jamais qu'une seule demande de certificat par nom
d'hôte, dans les deux modes de routage et que vous répartissiez ou non les
espaces de noms — le chart porte une unique annotation
cert-manager.io/cluster-issuer sur la Gateway, et cert-manager regroupe les
listeners par Secret de certificat.
Cela nécessite la prise en charge Gateway API de cert-manager
(config.enableGatewayAPI=true) ; voir Prérequis TLS.
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 listeners de la Gateway Scrydon. Définissez gateway.tls.certManager.enabled: false pour que cert-manager ne mette pas votre certificat en concurrence avec une commande ACME, ou pointez tous les listeners vers un seul Secret avec gateway.tls.existingSecret.
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-platformConservez ce Secret dans scrydon-platform même si vous remplacez
namespaces.agentic, namespaces.analytics ou namespaces.cortex. La Gateway
possède tous les listeners : les certificateRefs sont donc résolus uniquement
depuis l'espace de noms de la Gateway — il n'y a rien à recopier dans les autres
espaces de noms, quelle que soit l'implémentation.
Pour le routage sous-domaine, créez également les secrets par application dans l'espace de noms de la Gateway — tous les listeners vivent sur l'unique Gateway :
for name in tls-auth tls-platform tls-cortex tls-agentic tls-agentic-realtime tls-analytics; 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 noms d'hôte que les listeners de la Gateway ne couvrent pas, 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 gateway -n scrydon-platform
kubectl describe gateway gateway-frontdoor -n scrydon-platform # un bloc de conditions par listener
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.