【免费下载链接】charts
⚠️(OBSOLETE) Curated applications for Kubernetes
Inbucket 是一款面向开发与测试场景的邮件测试工具,能够在本地环境模拟完整的 SMTP/POP3/Web Mail 服务,用于验证应用发送的邮件而无需连接真实邮件服务器。本文以当前仓库stable/inbucketChart 为依托,完整讲解其安装、卸载、全部可配置参数及其在 Deployment、Service、Ingress、ConfigMap 中的底层实现机制,帮助你在 Kubernetes 集群中快速搭建一套可用的开发邮件沙箱,并掌握通过环境变量细粒度调整 Inbucket 行为的实战方法。
一、Chart 概览与状态说明
stable/inbucket是 Helm Charts 仓库中托管 Inbucket 应用的 Chart。从 Chart.yaml 可以看到其核心元数据:
- 名称:
inbucket - 版本:
3.1.2(Chart 版本) - 应用版本:
2.0.0(对应 Inbucket 容器镜像的主版本) - 关键词:
inbucket、mail、smtp、pop3、email、testing、disposable webmail - 描述:DEPRECATED - Inbucket is an email testing application
- 状态:
deprecated: true
需要特别说明的是,该 Chart 与当前仓库中的绝大多数 Chart 一样,已随 Helm Charts 仓库于 2020 年 11 月归档,不再更新。这意味着:
- 该 Chart 依然可以用于学习和历史环境的部署,但官方不再维护;
- 使用前请自行评估安全性与兼容性,并优先考虑维护活跃的替代方案(例如同名项目的新版 Chart 或其他邮件测试工具)。
尽管如此,该 Chart 的模板结构清晰、参数覆盖面广,仍是学习 Helm 模板机制与 Inbucket 环境变量配置的极佳参考样本。
二、快速开始(TL;DR)
在默认配置下,只需一条命令即可在集群中创建 Inbucket 部署:
$ helm install stable/inbucketChart 会创建 Deployment、Service、ConfigMap 等 Kubernetes 组件,并输出访问指引(详见下文「访问与验证」小节)。
三、前置条件
- 运行 Kubernetes 1.8+ 集群,且已启用 Beta API(早期模板使用
extensions/v1beta1版本的 Ingress,见 ingress.yaml)。 - 已安装 Helm 客户端,并完成 Tiller(Helm 2 时代)或对应版本的服务端初始化。
四、安装 Chart
使用指定发布名(release name)安装:
$ helm install --name my-release stable/inbucket该命令会以默认配置将 Inbucket 部署到集群中。默认配置下创建的组件包括:
- Deployment:运行
jhillyerd/inbucket容器; - Service:ClusterIP 类型的服务,暴露 HTTP(9000)、SMTP(2500)、POP3(1100)三个端口;
- ConfigMap:承载全部
INBUCKET_*环境变量,并通过envFrom注入容器。
五、卸载 Chart
$ helm delete my-release该命令会移除与发布关联的所有 Kubernetes 组件(Deployment、Service、ConfigMap 等),并删除该 release。
六、配置参数详解
安装时可以通过--set key=value或自定义 values 文件调整参数。下表列出 Chart 的核心可配置参数及其默认值(以仓库 values.yaml 的实际内容为准;README 中的部分字段名已与模板实现略有出入,下文会逐一说明)。
6.1 镜像参数
| 参数 | 描述 | 默认值 |
|---|---|---|
image.repository | 容器镜像仓库 | jhillyerd/inbucket |
image.tag | 容器镜像标签 | release-2.0.0 |
image.pullPolicy | 镜像拉取策略 | IfNotPresent |
注意:README 中标注的默认 tag 为
release-1.2.0,而仓库内 values.yaml 的实际默认值为release-2.0.0,且 Chart.yaml 中appVersion: 2.0.0与之对应。实际安装以 values.yaml 为准,README 表格中的旧值属于文档未及时同步的情况。
6.2 Service 参数
| 参数 | 描述 | 默认值 |
|---|---|---|
service.annotations | Service 的注解 | {} |
service.clusterIP | 集群内 Service IP | "" |
service.externalIPs | Service 外部 IP 地址列表 | [] |
service.loadBalancerIP | 负载均衡器 IP(如支持) | "" |
service.loadBalancerSourceRanges | 允许访问负载均衡器的 IP CIDR 列表(如支持) | [] |
service.type | 创建的服务类型 | ClusterIP |
service.port.http | HTTP 端口(需与INBUCKET_WEB_ADDR保持一致) | 9000 |
service.port.smtp | SMTP 端口(需与INBUCKET_SMTP_ADDR保持一致) | 2500 |
service.port.pop3 | POP3 端口(需与INBUCKET_POP3_ADDR保持一致) | 1100 |
service.nodePort.http | 当service.type为NodePort且非空时,指定 HTTP 的 nodePort | "" |
service.nodePort.smtp | 当service.type为NodePort且非空时,指定 SMTP 的 nodePort | "" |
service.nodePort.pop3 | 当service.type为NodePort且非空时,指定 POP3 的 nodePort | "" |
字段说明:README 中写作
service.node.http/service.node.smtp/service.node.pop3,而模板 service.yaml 实际使用的是service.port.http/service.port.smtp/service.port.pop3结构,请以 values.yaml 与模板实现为准。
在 service.yaml 的实现中,nodePort的注入带有条件判断:仅当service.type为NodePort且对应nodePort值非空时才写入 Kubernetes 清单,三个端口(http/smtp/pop3)分别通过targetPort: http、targetPort: smtp、targetPort: pop3指向容器端口。
6.3 Ingress 参数
| 参数 | 描述 | 默认值 |
|---|---|---|
ingress.enabled | 是否创建 Ingress | false |
ingress.annotations | Ingress 注解 | {} |
ingress.path | Ingress 路径 | / |
ingress.hosts | Ingress 主机名列表 | [inbucket.example.com] |
ingress.tls | TLS 配置(hosts + secretName 列表) | [] |
启用 Ingress 的示例配置:
ingress: enabled: true annotations: kubernetes.io/ingress.class: nginx hosts: - mail.example.com tls: - hosts: - mail.example.com secretName: tls-inbucket从 ingress.yaml 可以看出,模板会将每个 host 都映射到同一条规则(path+ 后端servicePort: http),并将 Service 的 HTTP 端口(9000)作为后端目标。
6.4 调度与资源参数
| 参数 | 描述 | 默认值 |
|---|---|---|
nodeSelector | 用于 Pod 调度的节点标签 | {} |
podAnnotations | 添加到 Pod 的注解 | {} |
resources | Pod 资源请求与限制 | {} |
在 deployment.yaml 中,nodeSelector与podAnnotations均采用条件渲染:仅当 values 非空时才写入清单,resources则始终渲染(默认空对象表示不设置资源限制)。
七、核心配置:extraEnv 环境变量
这是本 Chart 最有价值的配置入口。所有INBUCKET_*环境变量统一放在extraEnv下,由 configmap.yaml 生成 ConfigMap,再由 Deployment 通过envFrom.configMapRef注入容器(见 deployment.yaml)。
默认环境变量及其含义如下(全部取自 values.yaml):
| 环境变量 | 默认值 | 作用 |
|---|---|---|
INBUCKET_LOGLEVEL | info | 日志级别 |
INBUCKET_MAILBOXNAMING | local | 邮箱命名规则 |
INBUCKET_SMTP_ADDR | 0.0.0.0:2500 | SMTP 监听地址(与service.port.smtp对应) |
INBUCKET_SMTP_DOMAIN | inbucket | SMTP 服务域名 |
INBUCKET_SMTP_MAXRECIPIENTS | 200 | 单封邮件最大收件人数 |
INBUCKET_SMTP_MAXMESSAGEBYTES | 10240000 | 单封邮件最大字节数(约 10 MB) |
INBUCKET_SMTP_DEFAULTACCEPT | true | 是否默认接受未知域邮件 |
INBUCKET_SMTP_REJECTDOMAINS | "" | 需要拒绝的域名列表(逗号分隔) |
INBUCKET_SMTP_DEFAULTSTORE | true | 是否默认存储收件邮件 |
INBUCKET_SMTP_DISCARDDOMAINS | "" | 需要直接丢弃(不存储)的域名列表 |
INBUCKET_SMTP_TIMEOUT | 300s | SMTP 会话超时时间 |
INBUCKET_POP3_ADDR | 0.0.0.0:1100 | POP3 监听地址(与service.port.pop3对应) |
INBUCKET_POP3_DOMAIN | inbucket | POP3 服务域名 |
INBUCKET_POP3_TIMEOUT | 600s | POP3 会话超时时间 |
INBUCKET_WEB_ADDR | 0.0.0.0:9000 | Web UI 监听地址(与service.port.http对应) |
INBUCKET_WEB_UIDIR | ui | Web UI 静态资源目录 |
INBUCKET_WEB_GREETINGFILE | ui/greeting.html | Web UI 欢迎页模板文件 |
INBUCKET_WEB_TEMPLATECACHE | true | 是否缓存模板 |
INBUCKET_WEB_MAILBOXPROMPT | @inbucket | Web UI 邮箱输入提示符 |
INBUCKET_WEB_COOKIEAUTHKEY | "" | Cookie 认证密钥 |
INBUCKET_WEB_MONITORVISIBLE | true | 是否显示监控面板 |
INBUCKET_WEB_MONITORHISTORY | 30 | 监控历史条数 |
INBUCKET_STORAGE_TYPE | memory | 存储类型(如memory、file、bolt等) |
INBUCKET_STORAGE_PARAMS | "" | 存储类型对应的参数 |
INBUCKET_STORAGE_RETENTIONPERIOD | 24h | 邮件保留周期 |
INBUCKET_STORAGE_RETENTIONSLEEP | 50ms | 清理任务轮询间隔 |
INBUCKET_STORAGE_MAILBOXMSGCAP | 500 | 单个邮箱最大邮件数 |
自定义环境变量的覆盖方式:
$ helm install --name my-release \ --set-string 'extraEnv.INBUCKET_SMTP_MAXMESSAGEBYTES=52428800' \ --set 'extraEnv.INBUCKET_STORAGE_TYPE=file' \ --set 'extraEnv.INBUCKET_STORAGE_PARAMS=/data' \ stable/inbucket或直接在自定义 values 文件中修改:
extraEnv: INBUCKET_LOGLEVEL: "debug" INBUCKET_SMTP_DOMAIN: "test.local" INBUCKET_SMTP_MAXRECIPIENTS: "50" INBUCKET_STORAGE_TYPE: "file" INBUCKET_STORAGE_PARAMS: "/var/lib/inbucket" INBUCKET_STORAGE_RETENTIONPERIOD: "48h" INBUCKET_WEB_COOKIEAUTHKEY: "a-secret-key-for-session-cookies"这种「ConfigMap + envFrom」的注入方式意味着:修改extraEnv后需要重新渲染并滚动更新 Deployment,ConfigMap 会随 Helm 升级自动更新,而容器会因环境变量变化而重建。
八、底层机制:端口、探针与健康检查
从 deployment.yaml 可以看到容器的关键规格:
- 容器端口定义(固定值,与 values 中的
service.port.*语义对应):http:9000(TCP)smtp:2500(TCP)pop3:1100(TCP)
- 存活探针(livenessProbe):TCP Socket 探测 SMTP 端口,
initialDelaySeconds: 10、timeoutSeconds: 5; - 就绪探针(readinessProbe):同样探测 SMTP 端口,参数一致。
也就是说,只要 SMTP 端口可以建立 TCP 连接,Pod 即被视为存活且就绪。修改INBUCKET_SMTP_ADDR时需同时保持与探测端口及 Service 端口的一致性,否则可能导致健康检查失效。
九、访问 Inbucket 的三种方式
9.1 集群内 DNS 访问
安装后,集群内部可通过以下 DNS 名访问(来自 NOTES.txt):
{{ release名 }}-inbucket.{{ namespace }}.svc.cluster.local9.2 端口转发(开发调试推荐)
Web UI:
export POD_NAME=$(kubectl get pods --namespace <namespace> -l "app=inbucket,release=<release>" -o jsonpath="{.items[0].metadata.name}") kubectl port-forward --namespace <namespace> $POD_NAME 9000或直接转发 Service:
kubectl port-forward --namespace <namespace> service/<release>-inbucket 9000SMTP 服务器:
kubectl port-forward --namespace <namespace> service/<release>-inbucket 2500POP3 服务器:
kubectl port-forward --namespace <namespace> service/<release>-inbucket 1100随后在浏览器访问http://localhost:9000即可打开 Inbucket Web Mail 界面;将应用 SMTP 指向localhost:2500,即可在测试环境收发邮件。
9.3 NodePort / LoadBalancer
若需集群外部直接访问,可将service.type改为NodePort并指定 nodePort:
service: type: NodePort nodePort: http: 30080 smtp: 30250 pop3: 30110在云环境或支持 LoadBalancer 的集群中,也可以将service.type设为LoadBalancer,配合service.loadBalancerIP与service.loadBalancerSourceRanges控制访问来源。
十、验证与自动化测试
Chart 内置了两个测试资源(通过helm test触发):
- inbucket-config-test.yaml:生成一个包含 bats 测试脚本的 ConfigMap;
- inbucket-test.yaml:启动一个临时测试 Pod,使用
dduportal/bats:0.4.0镜像执行测试。
测试脚本核心逻辑(见 inbucket-config-test.yaml):
@test "Testing Inbucket is accessible" { curl --retry 48 --retry-delay 10 <release>-inbucket.<namespace>.svc.cluster.local:9000 }即通过curl重试访问集群内 Service 的 HTTP 端口,验证 Inbucket Web 服务可访问。执行方式:
$ helm test my-release十一、限制与注意事项
- 该 Chart 已标记
deprecated: true(见 Chart.yaml),且所属 Helm Charts 仓库整体归档,不再获得更新与安全修复; - 默认存储类型为
memory(INBUCKET_STORAGE_TYPE: memory),Pod 重建后邮件数据将丢失;如需持久化,应改用file或bolt等存储类型,并配合持久卷挂载; - README 中部分参数名(如
service.node.http)与 values.yaml / 模板实际字段(service.port.http)不一致,且 README 标注的默认镜像 tag 落后于 values.yaml,实操请以 values.yaml 为准; - 修改
INBUCKET_SMTP_ADDR、INBUCKET_WEB_ADDR、INBUCKET_POP3_ADDR时,需同步调整service.port.*,并确保健康检查探测端口仍然有效; - Ingress 模板使用
extensions/v1beta1API 版本,在较新版本 Kubernetes 集群中可能无法直接使用,需要升级模板或改用其他入口方案。
十二、相关参考文件
- 主文档:stable/inbucket/README.md
- 默认值定义:stable/inbucket/values.yaml
- Chart 元数据:stable/inbucket/Chart.yaml
- Deployment 模板:stable/inbucket/templates/deployment.yaml
- Service 模板:stable/inbucket/templates/service.yaml
- Ingress 模板:stable/inbucket/templates/ingress.yaml
- ConfigMap 模板:stable/inbucket/templates/configmap.yaml
- 安装后提示:stable/inbucket/templates/NOTES.txt
- 测试脚本:stable/inbucket/templates/tests/inbucket-config-test.yaml 与 stable/inbucket/templates/tests/inbucket-test.yaml
综上所述,stable/inbucketChart 以极少的配置项即可在 Kubernetes 中搭建一套完整的 SMTP/POP3/Web 邮件测试环境。理解其extraEnv环境变量体系与「ConfigMap → envFrom → 容器」的注入链路,是灵活定制 Inbucket 行为、让邮件测试真正贴合业务场景的关键。
【免费下载链接】charts
⚠️(OBSOLETE) Curated applications for Kubernetes
相关推荐
抖音批量下载器避坑实战:从 Cookie 获取到批量下载稳定跑通的路径
抖音批量下载器避坑实战:从 Cookie 获取到批量下载稳定跑通的路径 请求被 403 拦下、翻页停在 20 条、几天前存好的 Cookie 突然失效——用抖音
探索Inbucket:一款强大的邮件测试工具
探索Inbucket:一款强大的邮件测试工具 是一个开源项目,提供了一个简单的Web界面和RESTful API,用于接收、查看和管理电子邮件,是开发者进行邮件
后端开发工具COSBench Helm Chart 实战指南:在 Kubernetes 上部署云对象存储基准测试工具
COSBench Helm Chart 实战指南:在 Kubernetes 上部署云对象存储基准测试工具 导读 COSBench(Cloud Object St
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考