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

Kubernetes集群内其他Pod无法连接PostgreSQL实例故障排查求助

故障原因定位

核心原因:PostgreSQL默认仅监听本地回环地址

你提供的postgresql.conf未配置listen_addresses参数,PostgreSQL服务默认该参数值为localhost,仅接受容器本地127.0.0.1的连接请求:

  • 本地端口转发本质是将外部请求转发到Pod本地回环地址的5432端口,符合监听规则,因此可以正常连通
  • 集群内其他Pod通过Service或Postgres Pod IP访问时,请求来源为集群内的Pod IP,不在默认监听范围内,直接被拒绝,返回Connection Refused错误

其他问题排除验证

你可以先执行以下操作确认没有其他配置问题:

  • 执行kubectl get endpoints postgres,确认Endpoint已正确绑定PostgreSQL Pod的IP和5432端口,从你的报错日志看已经可以解析到postgres服务对应的192.168.152.97,说明Service、DNS配置无异常
  • 你的pg_hba.conf配置了hostssl all all all md5,允许所有来源的SSL连接,认证规则无问题
  • 集群内MySQL服务可以正常访问,说明集群网络、全局网络策略无限制
解决方案
  1. 修改postgresql.conf新增监听配置
    在现有配置基础上添加以下参数:
# 监听所有IPv4地址,也可配置为集群Pod CIDR段缩小访问范围
listen_addresses = '0.0.0.0'
port = 5432
  1. 重新加载ConfigMap并重启PostgreSQL Pod
    更新ConfigMap后执行以下命令重启服务生效:
kubectl create configmap postgres --from-file=postgres-config/ -o yaml --dry-run=client | kubectl apply -f -
kubectl rollout restart deployment postgres
  1. 测试连接(适配SSL配置)
    你开启了PostgreSQL强制SSL验证,集群内客户端连接时需要显式指定SSL模式,测试命令如下:
psql "host=postgres user=testuser sslmode=require"

如果不需要强制SSL验证,也可以在postgresql.conf中设置ssl = off临时测试连通性。

可选优化

你的Deployment配置中添加了hostPort: 5432,该配置会占用Pod调度节点的5432端口,若无外部系统直接通过宿主机IP访问PostgreSQL的需求,建议删除该配置,避免端口冲突导致Pod调度失败。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:00:01