Kubernetes集群部署SonarQube遭遇数据库连接失败问题求助
问题现象
SonarQube在Kubernetes集群部署时,Elasticsearch启动正常,但Web Server无法创建jdbc:postgresql://sonar-postgres:5432/sonar数据源,抛出org.springframework.beans.factory.BeanCreationException异常,核心错误为数据库连接失败,导致SonarQube停止运行。关键报错日志:
2022.09.13 06:13:59 WARN web[][o.s.c.a.AnnotationConfigApplicationContext] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jdk.internal.loader.ClassLoaders$AppClassLoader@5c29bfd-org.sonar.db.DefaultDatabase': Initialization of bean failed; nested exception is java.lang.IllegalStateException: Fail to connect to database
...
Caused by: java.lang.IllegalStateException: Can not connect to database. Please check connectivity and settings (see the properties prefixed by 'sonar.jdbc.').
排查与解决步骤
验证PostgreSQL服务可达性
进入SonarQube Pod内部执行网络测试,确认DNS解析和端口连通:kubectl exec -it <sonarqube-pod-name> -- ping sonar-postgres kubectl exec -it <sonarqube-pod-name> -- telnet sonar-postgres 5432如果ping不通,检查Kubernetes DNS服务是否正常;如果telnet失败,确认PostgreSQL Pod的5432端口是否正常监听。
核对数据库配置参数
确认SonarQube的配置项(如ConfigMap或环境变量)中,sonar.jdbc.url、sonar.jdbc.username、sonar.jdbc.password与PostgreSQL的实际配置完全一致:- 确保
sonar数据库已在PostgreSQL中创建 - 确认指定的数据库用户拥有该数据库的读写权限
- 检查PostgreSQL的
pg_hba.conf是否允许SonarQube Pod所在网段的连接请求
- 确保
检查PostgreSQL Pod状态
确认PostgreSQL Pod是否正常运行:kubectl get pods | grep sonar-postgres查看Pod日志排查启动或运行异常:
kubectl logs <sonar-postgres-pod-name>验证Kubernetes Service配置
检查sonar-postgresService是否存在且配置正确:kubectl get svc sonar-postgres确认Service的
selector与PostgreSQL Pod的labels完全匹配,确保流量能正确转发到Pod。排查网络策略限制
检查当前Namespace是否存在NetworkPolicy规则,阻止了SonarQube到PostgreSQL的5432端口通信:kubectl get networkpolicy如有必要,调整NetworkPolicy允许SonarQube Pod与PostgreSQL Service的通信。
内容的提问来源于stack exchange,提问作者nik

