Cloud Composer 2通过smtp.gmail.com发SMTP邮件报Errno 99错误
问题场景
使用版本为composer-2.0.11-airflow-2.2.3的Cloud Composer 2环境时,尝试通过smtp.gmail.com发送邮件触发异常,已完成两项前置校验:
- 分别尝试
smtp_password_cmd、smtp_password_secret两种密码获取配置,触发的错误完全一致 - 完成VPC层面网络连通性测试,确认所属VPC到
smtp.gmail.com网络可达
运行时抛出错误如下:
Error Msg: File "/opt/python3.8/lib/python3.8/smtplib.py", line 310, in _get_socket return socket.create_connection((host, port), timeout, File "/opt/python3.8/lib/python3.8/socket.py", line 808, in create_connection raise err File "/opt/python3.8/lib/python3.8/socket.py", line 796, in create_connection sock.connect(sa) OSError: [Errno 99] Cannot assign requested address
相关配置参考:
排查思路与解决方案
OSError: [Errno 99] Cannot assign requested address属于TCP建连阶段错误,和SMTP密码鉴权逻辑无关,可按以下顺序排查:
- 检查Airflow SMTP配置项
确认airflow.cfg中未错误配置smtp_source_address、smtp_local_hostname参数。上述参数会强制smtplib建连时绑定不存在的本地IP,直接触发该错误,若存在相关配置直接清空,重启Airflow调度器、Worker组件即可。 - 校验私网Composer环境的路由与DNS配置
若使用Private IP模式的Cloud Composer:- 检查Cloud DNS规则,确认不存在将
smtp.gmail.com错误解析到内网不可达地址的私有转发规则 - 检查Cloud NAT配置,确认NAT源端口无耗尽情况,可将单VM最小端口配额调整至1024以上验证
- 检查Cloud DNS规则,确认不存在将
- 校验Gmail SMTP参数匹配性
标准Gmail SMTP需满足以下配置要求:smtp_starttls设为Truesmtp_ssl设为Falsesmtp_port设为587- 个人Gmail账号需使用应用专用密码鉴权,不可直接使用账号登录密码;Google Workspace账号需提前配置SMTP中继,放行Composer环境出口IP段
- 执行Pod层面连通性验证
VPC层面连通性测试无法覆盖工作负载网络策略,需进入Airflow Worker Pod执行实际连接测试:
直接在Pod内复现问题,排查是否存在GKE网络策略、节点防火墙拦截流量的情况。# 安装测试工具 pip install swaks # 发起SMTP测试连接 swaks --to 测试收件箱地址 --server smtp.gmail.com:587 --tls
内容的提问来源于stack exchange,提问作者Divyaansh Bajpai
相关产品推荐
相关产品推荐

