EKS集群中Keycloak服务无法连接同VPC内RDS求助
解决EKS中Keycloak连接同VPC内RDS超时问题
排查步骤:
确认安全组规则准确性
- 不要依赖安全组名称,直接用安全组ID验证RDS入站规则——eksctl生成的安全组名称可能有变体,但ID是唯一标识。
- 检查Keycloak Pod实际使用的安全组:执行
kubectl describe pod <keycloak-pod-name> -n <your-namespace>,在Networking字段下找到Security Groups,确认该安全组已被添加到RDS入站规则(允许TCP 5432端口)。
测试基础网络可达性
- 在EKS节点上直接测试RDS连接:
如果节点能连通,问题出在Pod层面;如果节点也超时,检查RDS子网路由表(确保存在VPC本地路由,无错误指向互联网网关),或确认RDS是否部署在私有子网且无需额外NAT配置(同VPC内通信不需要NAT)。# 用nc验证端口连通性 nc -zv <rds-endpoint> 5432 # 或用psql尝试直接连接 psql -h <rds-endpoint> -U <db-username> -d <db-name>
- 在EKS节点上直接测试RDS连接:
排查Pod网络限制
- 查看Keycloak所在Namespace的网络策略:
如果存在限制出站流量的策略,需添加允许访问RDS 5432端口的规则;无策略时可临时创建允许所有出站的规则测试:kubectl get networkpolicy -n <your-namespace>apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-all-egress namespace: <your-namespace> spec: podSelector: {} policyTypes: - Egress egress: - {} - 若使用Calico等CNI插件,检查插件是否有额外网络规则限制Pod到RDS的流量。
- 查看Keycloak所在Namespace的网络策略:
验证Keycloak连接配置
- 确认数据库连接URL格式正确:
jdbc:postgresql://<rds-endpoint>:5432/<db-name>,无拼写错误。 - 检查连接超时参数:比如Keycloak的
DB_POOL_CONNECTION_TIMEOUT,可适当调大(默认可能偏短),例如设置为30000毫秒。
- 确认数据库连接URL格式正确:
检查RDS自身状态
- 在AWS控制台确认RDS实例状态为
available,无维护或重启操作。 - 检查RDS参数组的
listen_addresses是否设置为*,确保允许VPC内的连接请求。
- 在AWS控制台确认RDS实例状态为
内容的提问来源于stack exchange,提问作者user3677636
相关产品推荐
相关产品推荐

