Cloud Foundry部署Django执行cf push报错port 5432连接拒绝
故障定性
日志返回的Connection refused报错不属于身份认证故障,故障发生在TCP连接握手阶段,请求根本没有到达数据库身份校验环节,无需在账号密码凭证上重复排查。
排查与修复步骤
- 校验Django数据库配置读取逻辑
优先检查Djangosettings.py中的数据库配置,确认host、port值是从Cloud Foundry注入的VCAP_SERVICES环境变量下aws-rds配置段读取,而非硬编码值。将日志中打印的连接地址server-name.region-name.rds.amazonaws.com、端口5432,与cf env app-name-1返回的aws-rds配置段中host、port字段逐字比对,排除硬编码错误。注意:即使账号、密码、库名配置完全正确,只要host或port配置错误,就会直接触发连接拒绝报错。
- 验证CF容器到RDS的网络连通性
连接拒绝的最常见诱因是网络策略拦截,按以下操作验证:- 执行
cf ssh app-name-1进入应用运行容器 - 在容器内执行
nc -zv <RDS实例真实host地址> 5432,如果返回连接拒绝或超时,即可确认是网络链路不通,和应用代码无关 - 联系平台管理员核查两类配置:一是RDS实例绑定的安全组是否放行了Cloud Foundry应用节点出口IP段对5432端口的访问;二是RDS实例自身的IP白名单、公网/私网访问配置是否拦截了来自CF平台的请求
- 执行
- 校验RDS服务实例运行状态
cf services返回的update succeeded仅代表服务broker侧操作执行完成,不代表RDS实例本身运行正常:
执行cf service service-name-psql-db查看服务详情,确认实例未处于停止、故障、维护状态。如果是broker创建的RDS实例异常,可执行cf update-service service-name-psql-db触发实例修复,或删除重建服务实例后重新绑定应用。 - 核对端口配置
部分AWS RDS自定义配置、代理接入场景下的端口并非默认的5432,即使host地址正确,端口配置不匹配也会返回连接拒绝,需严格以VCAP_SERVICES中下发的port字段值为准配置Django连接参数。
故障类型快速判断规则
- 报错包含
Connection refused、Connection timed out、No route to host:均为网络/传输层故障,未进入数据库认证流程,和账号权限无关 - 报错包含
password authentication failed、database does not exist、permission denied:才属于身份认证、库表权限类故障
内容的提问来源于stack exchange,提问作者John Skiles Skinner
相关产品推荐
相关产品推荐

