You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 07:05:21