【Kubernetes】Mailpit ローカルメールサーバ構築

Kubernetes

「Webアプリでメール機能を確認したいけど、開発で使うだけだからローカル手軽構築した

本番環境で利用する場合はMTA(Mail Transfer Agent)、MDA(Mail Delivery Agent)を用意し、ISP側にリレーサーバを用意しなければいけません。
OSSでそろえるならMTAにPostfix、MDAをDovecotあたりを使うと思うけど、開発で確認したいだけなのに構築するのは面倒くさいです。
なので Mailpit を利用して構築してみることにしました。
ちなみに前身となるメールサーバのMailHogがありますが、性能面に問題があるようです。

環境

名前バージョン
CentOS-Stream-9
kubeletv1.26.2
kubeadmv1.26.2
containerdv1.6.16
calicov3.25
metallbv0.13.9
mailpitv1.9.3

構築

WebUIで接続するポートが「8025」、SMTP用のポートが「1025」になります。
開発用なので永続ストレージはつけません。

デプロイ

mailpit.yaml でマニフェストを作成。

apiVersion: v1
kind: Service
metadata:
  name: mailpit
  labels:
    app: mailpit
spec:
  ports:
    - name: host
      port: 8025
      protocol: TCP
      targetPort: 8025
    - name: smtp
      port: 1025
      protocol: TCP
      targetPort: 1025
  selector:
    app: mailpit
    tier: frontend
  type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mailpit
  labels:
    app: mailpit
spec:
  selector:
    matchLabels:
      app: mailpit
      tier: frontend
  replicas: 1
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mailpit
        tier: frontend
    spec:
      containers:
      - image: axllent/mailpit:latest
        name: mailpit
        ports:
        - name: host
          containerPort: 8025
        - name: smtp
          containerPort: 1025

applyでポッド作成

kubectl apply -f mailpit.yaml

動作確認

kubernetes確認

kubectl get pod,svc コマンドでポッドの動作状況を確認します。

NAME                                     READY   STATUS    RESTARTS       AGE
pod/mailpit-9b6cb678f-6gkwm              1/1     Running   0              21m

NAME                        TYPE           CLUSTER-IP       EXTERNAL-IP    PORT(S)                         AGE
mailpit                     LoadBalancer   10.103.86.110    172.16.200.2   8025:32617/TCP,1025:31371/TCP   5s

メールの送受信確認

ブラウザで接続確認をします。
http://[IPアドレス]:8025

Windowsのtelnetクライアントでテストしてみます。(telnetを事前に有効化して下さい)
コマンドプロンプトでtelnetクライアントを起動します。

D:\> telnet

コマンドでメールを作成し送信します。

Microsoft Telnet> open [ExternalIP] 1025 ←mailpitサーバのポート1025に接続

220 mailpit-9b6cb678f-6gkwm Mailpit ESMTP Service ready
helo test  ←適当なドメインを指定
250 mailpit-9b6cb678f-6gkwm greets test
mail from:<test> ←送信元(ドメインなし)
250 2.1.0 Ok
rcpt to:<test>  ←宛先(ドメインなし)
250 2.1.5 Ok
data
354 Start mail input; end with <CR><LF>.<CR><LF>
Subject: test mail

test mail.
.
250 2.0.0 Ok: queued

ブラウザから受信できていることが確認できました。

永続化、アカウント作成について

下記オプションがありますので、データベース、パスワードファイルを指定することもできます。(mailpit wiki
pv,pvcを設定し、Configmapでオプションを設定すれば永続化することができます。

■メール情報の永続化

MP_DATA_FILE=/data/mailpit.db

■ユーザ名、パスワード設定

MP_UI_AUTH_FILE=/data/authfile

参考