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.