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

Minikube集群中Spring Boot连接PostgreSQL被拒绝问题排查

Spring应用无法连接Minikube中的PostgreSQL数据库排查与解决

核心错误信息

Caused by: org.postgresql.util.PSQLException: Connection to postgres-service:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.

排查出的关键问题及修复方案

1. PostgreSQL Service选择器与Pod标签不匹配(最直接原因)

你的PostgreSQL Deployment中,Pod的元数据标签是app: postgres,但对应的Service选择器却写的是app.kubernetes.io/name: postgres,这导致Service无法关联到PostgreSQL Pod,Spring应用通过Service访问时自然会被拒绝连接。

修复方法:修改postgres.yaml中的Service选择器,和Pod标签保持一致:

---
apiVersion: v1
kind: Service
metadata:
  name: postgres-service
spec:
  selector:
    app: postgres  # 改为与Pod标签匹配的值
  ports:
    - protocol: TCP
      port: 5432
      targetPort: 5432

2. Spring应用Service同样存在选择器不匹配问题(非数据库连接直接原因,但需修复)

你的Spring应用Deployment中Pod标签是app: spring-app,但Service选择器是app.kubernetes.io/name: spring-app,这会导致外部无法通过NodePort访问Spring应用,建议一并修复:

---
apiVersion: v1
kind: Service
metadata:
  name: spring-app-service
spec:
  type: NodePort
  selector:
    app: spring-app  # 改为与Pod标签匹配的值
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080
      nodePort: 30001

3. 修复后的验证步骤

修复配置后,执行以下命令确认状态:

  • 重新部署PostgreSQL组件:kubectl apply -f postgres-config.yaml postgres-secret.yaml postgres.yaml
  • 重新部署Spring应用:kubectl apply -f spring-app.yaml
  • 检查PostgreSQL Service是否关联到Pod:kubectl get endpoints postgres-service,输出中应包含PostgreSQL Pod的IP和端口
  • 进入Spring应用Pod测试数据库连通性(若容器内无工具需先安装):
    kubectl exec -it <spring-app-pod-name> -- bash
    apt update && apt install -y telnet
    telnet postgres-service 5432
    

如果telnet能连通,说明网络问题已解决,Spring应用应该能正常连接数据库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 18:26:03