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

Docker上的Spark集群无法通过Bastion连接AWS RDS PostgreSQL

Spark作业连接localhost:5555被拒绝的排查方案
  • 确认SSM端口转发的监听地址
    SSM默认的端口转发只会监听127.0.0.1,但Spark Worker容器的localhost和Master容器的localhost是完全独立的网络空间。

    • 执行netstat -tulpn | grep 5555查看Master容器内的监听地址,如果输出是127.0.0.1:5555,说明只有Master自身能访问这个端口,Worker容器根本连不上。
    • 重新启动SSM转发时要加上--bind-address 0.0.0.0参数,让端口监听容器的所有网卡:
      aws ssm start-session --target <你的EC2实例ID> --document-name AWS-StartPortForwardingSession --parameters '{"portNumber": ["5432"], "localPortNumber": ["5555"], "bindAddress": ["0.0.0.0"]}'
      
  • 检查Spark作业的JDBC连接配置
    作业里的JDBC URL不能写localhost:5555,因为Worker容器访问的是自己的localhost,不是Master容器的。要改成指向Master容器的服务名(Docker Compose里定义的服务名,比如spark-master):

    jdbc:postgresql://spark-master:5555/你的数据库名
    
  • 验证容器间的网络连通性
    进入任意一个Worker容器,执行以下命令测试能否连通Master的5555端口:

    nc -zv spark-master 5555
    # 或者用telnet
    telnet spark-master 5555
    

    如果连接失败,检查Docker Compose的网络配置,确保Master和Worker在同一个自定义网络中,没有被隔离。

  • 确认Master容器内的端口转发有效性
    在Master容器内直接用psql测试连接,确认SSM转发本身是正常的:

    psql -h localhost -p 5555 -U 你的数据库用户名 -d 你的数据库名
    

    如果这里能正常连接,说明问题出在容器间的网络或者作业配置上;如果这里也连不上,那要排查SSM会话的权限、RDS的安全组是否允许SSM代理EC2的访问。

  • 检查Master容器的防火墙规则
    有些基础镜像默认开启了iptables,可能会拦截5555端口的入站请求。执行iptables -L查看规则,必要时添加开放规则:

    iptables -A INPUT -p tcp --dport 5555 -j ACCEPT
    

内容的提问来源于stack exchange,提问作者Eya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 10:32:05