Kubernetes中Python脚本访问外部SMTP服务器端口转发配置求助
问题排查与修复方案
1. 先修复YAML语法错误
你的YAML文件同时定义了Service和Endpoint两个资源,但未用---分隔,这会导致Kubernetes无法正确解析,大概率其中一个资源未被正常创建。修正后的配置如下:
apiVersion: v1 kind: Service metadata: name: mailings namespace: spaceone spec: ports: - protocol: TCP port: 25 targetPort: 2525 --- apiVersion: v1 kind: Endpoints metadata: name: mailings namespace: spaceone subsets: - addresses: - ip: 172.17.100.101 ports: - port: 2525
重新应用配置:
kubectl apply -f your-file.yaml -n spaceone
2. 关键配置验证
确认资源创建状态
执行以下命令检查Service和Endpoint是否正常存在:
# 查看Service状态 kubectl get svc mailings -n spaceone # 查看Endpoint状态 kubectl get endpoints mailings -n spaceone
需确保Endpoint的ADDRESSES列显示172.17.100.101、PORTS列显示2525;Service的PORT(S)列显示25/TCP。
验证集群内部连通性
在同namespace的Pod中(或临时启动测试Pod),测试通过Service访问外部SMTP服务器的连通性:
# 启动临时测试Pod kubectl run -it --rm --image=busybox:1.36 test-pod -n spaceone # 在测试Pod内执行连通测试 nc -zv mailings 25
若返回succeeded说明端口转发生效;若失败,检查外部SMTP服务器的防火墙/安全组是否允许Kubernetes集群节点IP访问2525端口。
3. 调整Python脚本的SMTP地址
确保脚本中配置的SMTP服务器地址为Service的集群内部域名,而非直接写外部IP:
import smtplib # 正确地址格式:Service名称.命名空间.svc.cluster.local:25 smtp_server = "mailings.spaceone.svc.cluster.local" smtp_port = 25 # 邮件发送逻辑 with smtplib.SMTP(smtp_server, smtp_port) as server: server.sendmail("sender@example.com", "recipient@example.com", "邮件内容")
4. 额外排查点
- 若集群启用了NetworkPolicy,需确保Pod所在namespace允许出站访问Service的25端口。
- 检查外部SMTP服务器是否有IP白名单限制,将Kubernetes集群所有节点IP加入白名单。
内容的提问来源于stack exchange,提问作者Zoltan Vitor
相关产品推荐
相关产品推荐

