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: abcbankvs 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文件路径>
验证修复效果
- 检查PostgreSQL Service是否成功关联Pod:
kubectl describe service postgres-service
查看输出中的Endpoints字段,若显示Pod的IP和5432端口,说明关联成功。
- 在集群内部测试数据库连接(例如进入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
相关产品推荐
相关产品推荐

