Couche e-mail pour Kubernetes
Kourrier
La couche e-mail d'une plate-forme Kubernetes : les services publient des événements de domaine, et des routes déclaratives versionnées dans Git décident des e-mails à envoyer. Asynchrone, auto-hébergé et agnostique du fournisseur, écrit en Go.
Les services ne fabriquent pas d'e-mails : ils publient ce qui s'est passé (un compte créé, une commande payée). Kourrier consomme ces événements et décide, d'après des routes écrites dans un fichier versionné, quel e-mail part, vers qui et dans quelle langue. L'envoi passe par une file : il est asynchrone, et repris en cas d'échec.
Ce que j'ai construit
- Entrée événementielle au format CloudEvents : consommateur NATS JetStream et point d'entrée HTTP. Les routes, écrites en CEL, sont compilées au démarrage et testables en CI.
- File fiable sur Redis Streams : livraison au moins une fois, reprise des jobs d'un Pod mort, retries avec backoff exponentiel et dead-letter queue rejouable.
- Envoi par AWS SES ou SMTP derrière une interface unique ; templates stockés sur S3, MinIO ou un dossier local ; idempotence côté API comme côté événements.
- Chart Helm durci (non-root, rootfs en lecture seule, seccomp), livré avec les métriques Prometheus, le dashboard Grafana et les alertes.
Points forts
- Sûr par défaut : le driver par défaut n'envoie rien, et seules les empreintes SHA-256 des clés API sont stockées.
- Rate limiting distribué (GCRA sur Redis) : le quota SES est respecté quel que soit le nombre de replicas.
- Seize décisions d'architecture documentées (ADR), de la file asynchrone à la console d'administration.