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

Minikube环境下Spring Boot Pod连接PostgreSQL服务被拒求助

解决Kubernetes中PostgreSQL服务连接被拒的问题

核心问题定位

你遇到的PSQLException: Connection to postgres-service:5432 refused错误,根源是PostgreSQL Service的Selector与Pod标签不匹配:

  • PostgreSQL Service配置中,Selector包含tier: database,但Deployment定义的Pod标签仅为app: postgres,没有tier: database字段。这导致Service无法找到对应的Pod,集群内部无法通过服务名postgres-service解析到数据库实例。
  • 另外Spring Boot Service的Selector也存在标签不匹配问题(app.kubernetes.io/name: abcbank vs Pod的app: abcbank),虽然不影响数据库连接,但会导致应用服务无法正常暴露。

修复步骤

1. 修正PostgreSQL Service的Selector

修改PostgreSQL Service配置,移除不匹配的tier: database,只保留与Pod标签一致的app: postgres:

apiVersion: v1
kind: Service
metadata:
  name: postgres-service
spec:
  selector:
    app: postgres  # 仅保留匹配Pod的标签
  ports:
    - protocol: TCP
      port: 5432
      targetPort: 5432

2. (可选)修正Spring Boot Service的Selector

如果需要通过NodePort访问Spring Boot应用,修改Service的Selector与Pod标签一致:

apiVersion: v1
kind: Service
metadata:
  name: abcbank-service
spec:
  type: NodePort
  selector:
    app: abcbank  # 改为与Pod标签一致的app: abcbank
  ports:
    - protocol: TCP
      port: 8084
      targetPort: 8084
      nodePort: 30102

3. 重新应用配置

执行命令更新Kubernetes资源:

kubectl apply -f <postgres-deployment-service文件路径>
kubectl apply -f <abcbank-deployment-service文件路径>

验证修复效果

  1. 检查PostgreSQL Service是否成功关联Pod:
kubectl describe service postgres-service

查看输出中的Endpoints字段,若显示Pod的IP和5432端口,说明关联成功。

  1. 在集群内部测试数据库连接(例如进入Spring Boot Pod执行命令):
kubectl exec -it $(kubectl get pods -l app=abcbank -o jsonpath='{.items[0].metadata.name}') -- psql -h postgres-service -U admin123 -p 5432 FSD_DB

若能成功登录数据库,说明连接问题已解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 13:20:36