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

无法通过Kubernetes Service访问PostgreSQL故障求助

问题排查与修复方案

1. 优先确认PostgreSQL Pod运行状态

  • 执行命令kubectl get pods -l app=testapp查看Pod状态:
    • 若Pod处于CrashLoopBackOff/ImagePullBackOff/Pending状态,先定位启动失败原因:
      • 拉取镜像失败检查集群镜像仓库配置
      • Pending状态执行kubectl describe pod <Pod名称>看是否PVC绑定失败、资源不足
      • 崩溃重启执行kubectl logs <Pod名称>查看启动日志,常见原因包括testapp-secret不存在、PVC目录权限不足导致PostgreSQL无法写入数据文件
  • 若Pod处于正常Running状态,进入Pod内部验证服务监听:
    执行kubectl exec -it <Pod名称> -- ss -tunlp | grep 5432,确认PostgreSQL是否监听0.0.0.0:5432,若仅监听127.0.0.1需要修改postgresql.conf的listen_addresses配置为*

2. 修正标签匹配逻辑(核心问题概率最高)

你当前的Deployment和Service都只用了app: testapp作为标签选择规则,如果你的Django应用Pod也用了相同的app: testapp标签,Service会把流量随机转发到Django Pod和PostgreSQL Pod上,转发到Django Pod时自然会被拒绝5432端口连接。
请调整配置给PostgreSQL加专属标签避免匹配错误:

# Deployment 调整部分
spec:
  selector:
    matchLabels:
      app: testapp
      component: postgres # 新增专属标签
  template:
    metadata:
      labels:
        app: testapp
        component: postgres # 新增专属标签

# Service 调整部分
spec:
  selector:
    app: testapp
    component: postgres # 新增专属标签,仅匹配PostgreSQL Pod

重新apply配置后等待Pod重建完成即可。

3. 验证集群网络连通性

  • 在同集群其他正常运行的Pod中执行nc -zv testapp-postgres.default.svc.cluster.local 5432,如果返回连通成功说明服务本身正常,问题出在Django应用的数据库配置(比如端口、秘钥参数配置错误)
  • 如果连通失败,检查集群是否配置了NetworkPolicy拦截了5432端口的访问请求,添加对应放行规则即可。

内容的提问来源于stack exchange,提问作者Zerg Overmind

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 19:39:03