从EKS Pod连接AWS RDS时psql报错,telnet正常,如何解决?
EKS Pod连接AWS RDS PostgreSQL失败排查方案
问题描述
- 从EKS Pod内部执行
telnet [RDS_ENDPOINT] 5432,返回Connected to [RDS_ENDPOINT],网络端口可达 - 使用
psql连接时触发报错:
psql: error: connection to server at [RDS_ENDPOINT], port 5432 failed: server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
- 其他外部实例可正常连接该RDS,psql客户端版本与PostgreSQL服务器版本完全一致(12.10)
- 运行
pg_isready返回no response
排查与解决步骤
1. 校验RDS安全组/网络ACL规则
尽管telnet测试端口可达,但PostgreSQL在连接握手阶段仍可能被安全策略拦截:
- 检查RDS安全组入站规则,确认是否允许EKS Pod所在VPC CIDR、EKS节点IP段或Pod关联ENI的IP访问5432端口
- 验证网络ACL的入站/出站规则,确保没有针对Pod来源的5432端口拒绝策略
2. 验证Pod内部DNS解析正确性
如果telnet使用的是RDS域名,需确认Pod内部DNS解析返回的IP与RDS控制台显示的端点IP一致:
nslookup [RDS_ENDPOINT]
若解析异常,需检查EKS CoreDNS配置或Pod的DNS策略是否存在问题。
3. 检查RDS的pg_hba.conf访问控制规则
RDS的pg_hba.conf直接控制客户端访问权限,即使网络连通,也可能因规则限制被拒:
- 登录RDS控制台,查看目标实例关联参数组的
pg_hba_rules,确认是否包含允许EKS Pod来源IP段、对应用户名/数据库的访问规则(例如host [数据库名] [用户名] [Pod/节点CIDR] md5)
4. 查看RDS日志定位具体报错
RDS PostgreSQL日志会记录连接失败的详细原因(如认证失败、连接数超限等):
- 进入RDS实例的「日志和事件」页面,下载最新的PostgreSQL日志文件,搜索
connection closed或authentication failed关键词
5. 检查EKS NetworkPolicy限制
若集群配置了NetworkPolicy,可能限制了Pod对外部RDS的出站流量:
- 查看Pod所在命名空间的NetworkPolicy规则,确认是否允许Pod向RDS端点的5432端口发起请求
- 可临时删除相关NetworkPolicy测试连接是否恢复
6. 确认psql连接参数正确性
确保psql命令的参数无拼写或配置错误:
psql -h [RDS_ENDPOINT] -p 5432 -U [用户名] -d [数据库名]
排查是否因用户名不存在、数据库名错误、密码不正确等参数问题导致连接被拒。
7. 检查RDS连接数是否超限
若RDS的最大连接数已达上限,会直接拒绝新连接:
- 查看RDS控制台「监控」页面的
DatabaseConnections指标,确认是否接近或达到max_connections参数值 - 若超限,可调整参数组的
max_connections配置,或优化现有连接的复用策略
内容的提问来源于stack exchange,提问作者Murakami
相关产品推荐
相关产品推荐

