how-to-install-and-manage Help

Postfix

Nous avons intégré Postfix au sein de notre cluster Kubernetes afin de mettre en place un relais SMTP interne. Ce service joue un rôle essentiel dans la gestion des communications sortantes par e-mail, notamment pour l’envoi de notifications, d’alertes système (ex : supervision via Prometheus), ou encore de rapports générés automatiquement par nos applications.

Postfix est un agent de transfert de courrier (MTA - Mail Transfer Agent) open source, reconnu pour sa robustesse, sa sécurité et sa simplicité de configuration. En tant que relais SMTP, il ne gère pas la réception des courriels, mais agit comme un intermédiaire entre les applications et un serveur SMTP distant (comme Gmail, Mailjet etc...), en prenant en charge l’envoi des mails générés par nos services.

Déployer Postfix directement dans notre cluster Kubernetes présente plusieurs avantages :

  • Centralisation des envois : tous les pods et services envoient leurs mails via un point unique.

  • Simplicité de configuration pour les applications : une seule adresse SMTP à utiliser.

  • Sécurité : nous pouvons contrôler finement quels services sont autorisés à envoyer des messages.

  • Fiabilité : Postfix peut mettre en file d’attente les mails en cas d’indisponibilité temporaire du serveur SMTP externe.

Ainsi, ce relais SMTP interne s’intègre parfaitement dans notre architecture, en renforçant la fiabilité, la traçabilité et la maîtrise des communications par e-mail au sein du cluster.

Installation

Pour installer Postfix dans notre cluster kubernetes, nous allons utiliser une image disponible dans le Docker Hub qui est mis à jour régulièrement. Nous avons aussi choisi cette image, car elle inclut le TLS fonction obligatoire lorsque nous voulons utiliser Gmail comme serveur principal.

Nous allons commencer par créer un fichier postfix-namespace.yaml pour le namespace du service :

apiVersion: v1 kind: Namespace metadata: name: postfix

Lorsqu’on utilise Gmail comme serveur SMTP sortant, une authentification renforcée est exigée. Google ne permet pas l’utilisation directe d’un mot de passe standard pour ce type de connexion depuis une application tierce. Il est donc nécessaire de générer un mot de passe d'application depuis son compte Google :

Screenshot 2025-07-13 151107.png

Nous allons ajouter le fichier postfix-secret.yaml, contenant l'adresse gmail que nous voulons utiliser ainsi que le mot de passe d'application que nous avons préalablement généré :

apiVersion: v1 kind: Secret metadata: name: smtp-auth namespace: postfix type: Opaque data: #echo -n "innovalia60@gmail.com" | base64 SMTP_USERNAME: aW5ub3ZhbGlhNjBAZ21haWwuY29t #echo -n "mot-de-passe-app" | base64 SMTP_PASSWORD: cWJidiBqZW10IHByeWogY25kdg==

Nous pouvons passer au fichier principal postfix-deployment.yaml en suivant les variables à utiliser indiqué dans le Docker Hub :

apiVersion: apps/v1 kind: Deployment metadata: name: postfix namespace: postfix spec: replicas: 1 selector: matchLabels: app: postfix template: metadata: labels: app: postfix spec: containers: - name: postfix image: juanluisbaptiste/postfix:latest ports: - containerPort: 25 env: - name: SERVER_HOSTNAME value: support.innovalia.cc - name: SMTP_SERVER value: smtp.gmail.com - name: SMTP_PORT value: "587" - name: SMTP_NETWORKS value: 10.0.0.0/8 - name: SMTP_USERNAME valueFrom: secretKeyRef: name: smtp-auth key: SMTP_USERNAME - name: SMTP_PASSWORD valueFrom: secretKeyRef: name: smtp-auth key: SMTP_PASSWORD

Et pour finir, nous allons ajouter un postfix-service.yaml pour permettre à n'importe quel service dans notre cluster d'utiliser notre relais :

apiVersion: v1 kind: Service metadata: name: postfix namespace: postfix spec: selector: app: postfix ports: - protocol: TCP port: 25 targetPort: 25 type: ClusterIP

Test

Pour tester que notre relais est bien mis en place, nous pouvons utiliser notre environnement de développement :

nix develop

Une fois le cluster créé, nous pouvons créer un nouveau pod dans le même namespace que Postfix :

kubectl run smtp-test \ --rm -i -t \ --image=debian:bookworm-slim \ --namespace=postfix \ -- bash
apt update && apt install -y telnet
telnet postfix.postfix.svc.cluster.local 25

Dans telnet :

EHLO test.innovalia.cc MAIL FROM:<innovalia60@gmail.com> RCPT TO:<ton.email@gmail.com> DATA Subject: Test SMTP manual Ceci est un test SMTP envoyé à la main. . QUIT
Screenshot 2025-07-13 112732.png
Last modified: 13 July 2025