AKS集群配置SMTP白名单实现Pod出站邮件发送方案咨询
AKS(Azure CNI+AGIC)场景下固定出站邮件源IP适配SMTP白名单方案
先明确源IP问题
在你当前的Azure CNI模式+AGIC部署的AKS集群中:
- AGIC仅负责入向流量的路由,完全不影响Pod的出站流量路径。
- 默认情况下,Pod的出站流量会通过所在节点的网络栈进行SNAT转换,SMTP中继服务器看到的源IP是节点的公网IP(如果节点分配了公网IP);若节点无公网IP,流量会走集群配置的出站网关(如NAT网关、Azure Firewall)的IP。
- Pod IP和节点IP确实会随Pod重建、节点扩容/替换动态变化,无法直接作为白名单。
可行解决方案(适配Azure CNI,无需StaticEgressGatewayPreview)
方案1:用Azure NAT网关绑定Pod子网,固定出站IP池
这是最通用的方案,适合所有需要固定出站IP的Pod:
- 原理:将Pod所在的子网关联到Azure NAT网关,NAT网关配置固定的标准SKU公网IP池。Pod出站流量会被自动SNAT成NAT网关的公网IP,SMTP服务器只需将这些固定IP加入白名单即可。
- 操作步骤:
- 创建1个或多个标准SKU静态公网IP(组成IP池),确保IP不会被释放。
- 创建Azure NAT网关,关联上述公网IP池,并设置合适的空闲超时(建议至少5分钟适配邮件连接)。
- 将Pod所在的Azure CNI子网关联到该NAT网关,同时配置子网的用户定义路由表(UDR),将
0.0.0.0/0的下一跳指向NAT网关(覆盖节点默认的出站路由)。
- 优势:无需修改任何Pod配置,该子网内所有Pod的出站流量都使用固定IP,维护成本低。
方案2:为邮件Pod配置专用子网+独立NAT网关
如果只有部分Pod需要发邮件,可以隔离流量:
- 原理:创建一个专用的Azure CNI子网,绑定独立的NAT网关(带固定公网IP),通过调度策略让邮件Pod仅运行在该子网的节点上,或者直接指定Pod使用该子网的IP。
- 操作步骤:
- 创建专用子网、标准SKU静态公网IP池、NAT网关并关联(同方案1)。
- 在AKS中,要么创建新的节点池并绑定该专用子网,通过污点/容忍度让邮件Pod仅调度到这个节点池;要么直接在邮件Pod的YAML中,通过
annotations指定使用该子网(Azure CNI支持静态子网分配)。 - 配置专用子网的UDR指向NAT网关。
- 优势:仅隔离邮件流量,不影响其他Pod的出站策略。
方案3:部署专用SMTP代理Pod,固定其出站IP
适合需要更精细控制邮件流量的场景:
- 原理:部署一个轻量SMTP代理(如Postfix),给这个代理Pod分配固定的Azure CNI静态IP(在Pod YAML中通过
spec.ip指定),并让代理Pod的出站流量走绑定固定IP的NAT网关。其他业务Pod发邮件时,统一转发到这个代理Pod,SMTP服务器只需白名单代理Pod的出站IP(即NAT网关的IP)。 - 可选优化:给代理Pod所在的节点分配固定公网IP,通过污点/容忍度让代理Pod独占该节点,此时代理Pod的出站源IP就是节点的固定公网IP。
注意事项
- 所有用于NAT网关的公网IP必须是标准SKU,基本SKU不支持NAT网关绑定。
- 配置UDR时,确保
0.0.0.0/0路由的优先级高于节点的默认出站路由,否则流量仍会走节点公网IP。 - 如果集群同时使用Azure Firewall,需要确保Firewall的SNAT规则不会覆盖NAT网关的配置,优先使用NAT网关处理邮件流量。
内容的提问来源于stack exchange,提问作者JakeUT
相关产品推荐
相关产品推荐

