EKS Pod无法连接RDS-PostgreSQL,求排查缺失配置项
排查EKS Pod连接RDS PostgreSQL失败的额外配置点
基于你提供的环境信息,以下是需要检查的关键配置项:
Pod网络与CNI配置验证
- 若使用非AWS VPC CNI(如Calico),确认Pod IP是否属于VPC网段(10.0.0.0/16)。如果Pod使用了VPC外的IP段,RDS安全组中允许
10.0.0.0/16的规则将不生效,需额外添加Pod IP段的放行规则。 - 检查Worker节点的SNAT设置:若CNI配置了Pod出站流量SNAT到节点IP,确认RDS安全组是否包含
worker-node-sec-group的入站规则(你已配置,但可再次验证规则优先级)。
- 若使用非AWS VPC CNI(如Calico),确认Pod IP是否属于VPC网段(10.0.0.0/16)。如果Pod使用了VPC外的IP段,RDS安全组中允许
RDS私有访问配置
- 确认RDS实例的公有可访问性设置为
否。若开启公有访问,RDS端点可能解析为公网IP,导致私有子网内的Pod无法访问(无公网出口时)。
- 确认RDS实例的公有可访问性设置为
DNS解析有效性
- 在Pod内执行
nslookup <rds-endpoint>或dig <rds-endpoint>,验证解析结果是否为RDS的私有IP(10.0.3.x段)。若解析到公网IP,需检查VPC DNS设置(确保启用AmazonProvidedDNS)或RDS公有访问配置。 - 检查EKS CoreDNS配置,确认无自定义规则干扰RDS端点的解析。
- 在Pod内执行
Kubernetes NetworkPolicy限制
- 检查Pod所在Namespace是否存在NetworkPolicy,执行
kubectl get networkpolicies -n <你的命名空间>。若有策略禁止Pod访问5432端口,即使安全组放行,连接也会失败,需调整策略允许出站到RDS的流量。
- 检查Pod所在Namespace是否存在NetworkPolicy,执行
RDS实例内部配置
- 确认RDS实例处于可用状态,无维护、重启等操作。
- 检查RDS参数组中
listen_addresses参数是否设为*,确保PostgreSQL允许所有IP的连接请求。
连接测试与报错分析
- 在Pod内手动执行连接命令:
psql -h <rds-endpoint> -p 5432 -U <用户名> -d <数据库名>,根据具体报错定位问题:connection refused:网络层面不通(安全组、路由、NACL或RDS未监听端口)authentication failed:账号密码或数据库名称错误timeout:路由或NACL存在双向流量限制
- 在Pod内手动执行连接命令:
Worker节点网络可达性验证
- 在Worker节点上执行
nc -zv <rds-endpoint> 5432或telnet <rds-endpoint> 5432:- 若节点能连接但Pod不能,问题出在Pod网络层(CNI、NetworkPolicy)
- 若节点也不能连接,重新检查NACL的双向规则(入站放行5432,出站放行1024-65535的临时端口)及路由表是否包含RDS子网的路由条目
- 在Worker节点上执行
内容的提问来源于stack exchange,提问作者Yogesh Jilhawar
相关产品推荐
相关产品推荐

