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
相关产品推荐
相关产品推荐

