返回首页

Kubernetes 中的 Mailu:为开发者设置邮件服务器

本文描述了使用 Helm 在 Kubernetes 集群中部署 Mailu 邮件服务器的过程。它涵盖了准备 DNS 记录、设置网络策略、解决 TLS 问题以及配置 DKIM、DMARC、SPF 以确保邮件投递。

如何在 Kubernetes 中部署 Mailu:完整指南
Advertisement 728x90

Kubernetes 上部署 Mailu 邮件服务器:详细步骤指南

Mailu 是一款为 Docker 和 Kubernetes 环境优化的容器化邮件服务器。与传统的 Postfix 和 Dovecot 配置繁琐不同,Mailu 部署简单快捷,非常适合家庭实验室和测试环境。本指南将带你一步步在 Kubernetes 集群中使用 Helm 安装 Mailu,配置网络策略、DNS 记录和安全措施。

准备基础设施和 DNS

安装 Mailu 前,先完成这些关键基础设施步骤。首先,你需要一个支持 DNS 管理的域名——本例中使用 yourdomain.com。其次,确保获取静态公网 IP(例如 1.2.3.4),并让你的 ISP 设置反向(PTR)记录。没有 PTR 记录,大型邮件服务商会将你的邮件标记为垃圾邮件。

需要创建的关键 DNS 记录:

Google AdInline article slot
  • A 记录:mail.yourdomain.com → 1.2.3.4
  • MX 记录:@ → mail.yourdomain.com

设置完成后,使用 nslookup 1.2.3.4 验证——应解析到 mail.yourdomain.com,确认 PTR 记录正确。

设置 Kubernetes 并部署 Mailu

为提升安全性,将邮件服务器隔离到独立命名空间中以降低风险——这里使用 dmz-mailu。立即应用网络策略,默认阻断所有进出流量,仅允许必要端口。

示例网络策略(network-policy-dmz-mail.yaml):

Google AdInline article slot
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-dmz-mail-deny
  namespace: dmz-mail
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-mailu-ports
  namespace: dmz-mail
spec:
  podSelector: {}
  egress:
    - to:
      - namespaceSelector:
          matchLabels:
            kubernetes.io/metadata.name: kube-system
      ports:
      - protocol: UDP
        port: 53
      - protocol: TCP
        port: 25
      - protocol: TCP
        port: 465

接下来,添加 Mailu Helm 仓库并创建 values.yaml 文件。关键设置包括域名、时区、初始管理员账户、存储选项和网络接口。将 StorageClass 与你的集群配置匹配。

核心 values.yaml 参数:

  • hostnames: ["mail.yourdomain.com"]
  • domain: yourdomain.com
  • initialAccount 用于管理员设置
  • PostgreSQL 或 MariaDB 配置
  • 持久化设置(例如 size: 50Gi
  • 带 cert-manager 注解的 Ingress 配置
  • 前端服务类型为 LoadBalancer

使用以下命令安装 chart:

Google AdInline article slot
helm install mailu mailu/mailu -n dmz-mailu --values mailu_values.yaml

修复 TLS 问题和高级配置

Mailu 在 Ingress 上可能遇到 SSL 错误,这是 TLS 处理的特殊性导致。解决方法是为前端创建专用 LoadBalancer 服务,将 Web 界面移到独立 IP,避免 Ingress TLS 冲突。

示例清单(svc-mailu-front-web.yaml):

apiVersion: v1
kind: Service
metadata:
  name: svc-mailu-front-web
  namespace: dmz-mail
spec:
  externalTrafficPolicy: Local
  ports:
  - port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app.kubernetes.io/component: front
    app.kubernetes.io/instance: mailu
    app.kubernetes.io/name: mailu
  type: LoadBalancer
  loadBalancerIP: 192.168.10.201

应用后,将 mail-local.yourdomain.com 指向该 IP(在本地 DNS 或 hosts 文件中)。同时,将网关的 25 端口转发到 values.yaml 中的 loadBalancerIP 以接收邮件。

配置 DKIM、DMARC 和 SPF

为确保邮件顺利送达 Gmail 或 Outlook 等服务,必须设置 DKIM、DMARC 和 SPF。这些认证协议验证发件人身份,避免邮件落入垃圾箱。

设置步骤:

  • 在 Mailu 管理员 Web 界面,进入 AdministrationMail Domains → 选择你的域名 → Edit
  • 点击右上角 Generate Keys
  • 将 DKIM、DMARC 和 SPF 的 TXT 记录复制到域名 DNS 中。
  • 等待传播(最长 48 小时)。

使用 mxtoolbox.com 等工具验证。测试时发送到外部地址——首批邮件可能进垃圾箱,请检查垃圾文件夹。

性能和安全优化

Mailu 包含可选组件,可禁用以节省资源或简化设置。ClamAV(杀毒)、OleTools(Office 文件扫描)和 Tika(元数据处理)对核心邮件功能非必需——在 values.yaml 中设为 false

家庭使用推荐:

  • clamav: false
  • oletools: false
  • tika: false

保留 Rspamd(垃圾邮件过滤)启用——它高效处理进出邮件。

关键要点

  • 静态 IP 的 PTR 记录对可靠投递至关重要。
  • 独立命名空间和网络策略提升部署安全性。
  • 使用独立 LoadBalancer 服务解决 Ingress TLS 问题。
  • DKIM、DMARC 和 SPF 是外部邮件投递的必备。
  • 禁用 ClamAV 等非必需组件以降低资源消耗。

— Editorial Team

Advertisement 728x90

继续阅读