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

K8s部署SonarQube:FQDN无法访问但IP可行问题求助

问题:GitLab流水线无法通过HTTPS FQDN访问Kubernetes上的SonarQube

已在Kubernetes通过Helm部署SonarQube,配置Ingress实现HTTPS访问,且已设置正确的Server base URL。但GitLab流水线执行时报错:

[ERROR] SonarQube server [https://sonarqube.mydomain.com] can not be reached

改用不带HTTPS的Service外部IP+端口9000访问则正常。


部署环境细节

Helm安装命令

helm upgrade --install -n sonarqube sonarqube sonarqube/sonarqube -f values.yaml

Ingress配置

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    ingressClassName: nginx
    meta.helm.sh/release-name: sonarqube
    meta.helm.sh/release-namespace: sonarqube
    nginx.ingress.kubernetes.io/proxy-body-size: 64m
  labels:
    app: sonarqube
    app.kubernetes.io/managed-by: Helm
    chart: sonarqube-10.1.0_628
    heritage: Helm
    release: sonarqube
  name: sonarqube-sonarqube
  namespace: sonarqube
spec:
  ingressClassName: nginx
  rules:
  - host: sonarqube.mydomain.com
    http:
      paths:
      - backend:
          service:
            name: sonarqube-sonarqube
            port:
              number: 9000
        path: /
        pathType: ImplementationSpecific
  tls:
  - hosts:
    - sonarqube.mydomain.com
    secretName: sonar-tls

Kubernetes资源状态

执行kubectl -n sonarqube get all输出:

NAME                         READY   STATUS    RESTARTS   AGE
pod/sonarqube-postgresql-0   1/1     Running   0          23h
pod/sonarqube-sonarqube-0    1/1     Running   0          23h

NAME                                    TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service/sonarqube-postgresql            ClusterIP      10.104.77.155   <none>        5432/TCP         23h
service/sonarqube-postgresql-headless   ClusterIP      None            <none>        5432/TCP         23h
service/sonarqube-sonarqube             LoadBalancer   10.97.71.8      10.10.10.33    9000:31092/TCP   23h

NAME                                    READY   AGE
statefulset.apps/sonarqube-postgresql   1/1     23h
statefulset.apps/sonarqube-sonarqube    1/1     23h

排查与解决方案

1. 验证GitLab Runner的网络可达性

登录GitLab Runner所在节点(或Pod,若Runner部署在K8s集群内),执行curl -v https://sonarqube.mydomain.com,根据输出定位问题:

  • DNS解析失败:确认Runner节点的DNS配置能解析sonarqube.mydomain.com,或在Runner配置中手动添加hosts映射。
  • 证书信任问题:如果使用自签证书,需将sonar-tls中的CA证书导入Runner的系统信任根目录(如/usr/local/share/ca-certificates/),并更新证书缓存。
  • 连接超时/拒绝:检查Ingress Controller的外部IP是否能被Runner访问,同时确认防火墙、安全组已开放443端口。

2. 检查Ingress Controller的运行状态

  • 确认Ingress Controller已正常部署,且外部IP配置正确:执行kubectl get ingress -n sonarqube,查看ADDRESS字段是否为Ingress Controller的有效外部IP。
  • 查看Ingress日志,确认请求是否到达:
    kubectl logs -n ingress-nginx deployment/ingress-nginx-controller -f | grep sonarqube.mydomain.com
    
    若没有相关日志输出,说明请求未到达Ingress,需排查DNS解析或网络路由问题。

3. 完善Ingress与SonarQube的HTTPS转发配置

  • 确认SonarQube后台的Server base URL已设置为https://sonarqube.mydomain.com(路径:Administration > Configuration > General Settings > Server)。
  • 更新Ingress配置,添加HTTPS转发相关注解,确保SonarQube识别HTTPS请求:
    在Ingress的metadata.annotations中添加:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/proxy-set-header: "X-Forwarded-Proto https"
    
    应用更新后,重启SonarQube Pod使配置生效:
    kubectl delete pod sonarqube-sonarqube-0 -n sonarqube
    

4. 修正GitLab流水线的SonarQube配置

  • 确保GitLab CI/CD变量中SONAR_HOST_URL设置为https://sonarqube.mydomain.com(Ingress默认使用443端口,无需额外指定)。
  • 若使用自签证书,需在流水线的before_script中添加信任证书的步骤,示例:
    before_script:
      - echo "$SONAR_CERT" > /usr/local/share/ca-certificates/sonar.crt
      - update-ca-certificates
    
    其中SONAR_CERT是存储在GitLab项目/组变量中的证书内容(需提前导出sonar-tls中的证书)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 22:32:09