EKS中通过NLB暴露SMTP服务的Ingress配置问题求助
解决EKS中SMTP服务NLB访问问题的排查思路
1. 验证Ingress Nginx Controller的TCP配置生效情况
- 检查Controller启动参数:确认Deployment/DaemonSet的容器启动命令包含
--tcp-services-configmap=ingress-nginx/ingress-nginx-tcp,这是加载TCP转发配置的核心参数,缺失则ConfigMap不会生效。 - 查看Controller Pod日志:执行
kubectl logs -n ingress-nginx <controller-pod-name>,搜索TCP关键字,确认是否有Loaded TCP config map: ingress-nginx/ingress-nginx-tcp类日志,同时检查25端口是否被正确加载。 - 检查Pod端口监听:进入Controller Pod执行
netstat -tulpn | grep 25,确认25端口处于LISTEN状态。
2. 排查关联Ingress Controller的NLB配置
- 确认NLB监听规则:检查NLB是否创建了25端口的TCP监听,且转发目标指向Ingress Controller对应的Target Group(IP模式)或NodePort(NodePort模式)。
- 确认NLB类型:确保NLB为
internet-facing类型,若为internal则外部无法访问。 - 查看NLB访问日志:在AWS控制台开启NLB访问日志,检查外部请求是否到达NLB,是否存在转发失败记录(如目标组无健康实例、流量被拒绝等)。
3. 排查单独创建的NLB配置
- 确认目标组协议:SMTP基于TCP协议,确保目标组协议设置为
TCP而非HTTP。 - 复核健康检查配置:即使目标组状态显示健康,也要确认健康检查使用25端口、TCP协议;若SMTP服务响应较慢,可适当调健康检查超时(如从2秒改为5秒)、间隔时间。
- 检查后端安全组:SMTP Pod所在节点或Pod的安全组,必须允许NLB的安全组访问25端口,否则即使NLB安全组开放,后端仍会阻断流量。
4. 检查云服务商与VPC层面的限制
- AWS默认25端口限制:AWS EC2默认封禁外部访问25端口(防垃圾邮件),即使安全组配置正确,也需通过AWS Support提交工单申请解封。
- VPC网络ACL检查:网络ACL是无状态的,需同时配置入站和出站规则允许25端口的TCP流量,避免ACL规则阻断流量。
5. 流量路径测试与抓包验证
- 使用VPC Reachability Analyzer:在AWS控制台创建分析任务,测试从外部IP到SMTP Pod的路径,定位阻断环节。
- Pod内抓包验证:在Ingress Controller Pod或SMTP Pod内执行
tcpdump port 25,从外部发起telnet连接,观察是否有数据包到达,判断流量是否抵达后端服务。
内容的提问来源于stack exchange,提问作者zquintana
相关产品推荐
相关产品推荐

