sonarqube 通过 ingress 访问404

  • Choerodon平台版本: 0.22

  • 遇到问题的执行步骤:

无报错日志。部署正常。通过ingress访问404.,ingress对应的服务也在。

sonarqube 的 pod 正常运行?如果没有正常运行看一下报错日志。

pod运行正常

2020.09.13 16:30:53 INFO  web[][o.s.s.e.IndexerStartupTask] Indexing of type [projectmeasures/projectmeasure] ...
2020.09.13 16:30:53 INFO  web[][o.s.s.e.IndexerStartupTask] Indexing of type [projectmeasures/projectmeasure] done | time=200ms
2020.09.13 16:30:53 INFO  web[][o.s.s.p.p.PlatformLevelStartup] Running Community Edition
2020.09.13 16:30:53 INFO  web[][o.s.s.p.Platform] WebServer is operational
2020.09.13 16:30:54 INFO  app[][o.s.a.SchedulerImpl] Process[web] is up
2020.09.13 16:30:54 INFO  app[][o.s.a.p.ProcessLauncherImpl] Launch process[[key='ce', ipcIndex=3, logFilenamePrefix=ce]] from [/opt/sonarqube]: /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/opt/sonarqube/temp -Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError -cp ./lib/common/*:/opt/sonarqube/lib/jdbc/postgresql/postgresql-42.2.5.jar org.sonar.ce.app.CeServer /opt/sonarqube/temp/sq-process1266544528730134361properties
2020.09.13 16:30:55 INFO  ce[][o.s.p.ProcessEntryPoint] Starting ce
2020.09.13 16:30:55 INFO  ce[][o.s.ce.app.CeServer] Compute Engine starting up...
2020.09.13 16:30:56 INFO  ce[][o.e.p.PluginsService] no modules loaded
2020.09.13 16:30:56 INFO  ce[][o.e.p.PluginsService] loaded plugin [org.elasticsearch.join.ParentJoinPlugin]
2020.09.13 16:30:56 INFO  ce[][o.e.p.PluginsService] loaded plugin [org.elasticsearch.percolator.PercolatorPlugin]
2020.09.13 16:30:56 INFO  ce[][o.e.p.PluginsService] loaded plugin [org.elasticsearch.transport.Netty4Plugin]
2020.09.13 16:30:58 INFO  ce[][o.s.s.e.EsClientProvider] Connected to local Elasticsearch: [127.0.0.1:9001]
2020.09.13 16:30:58 INFO  ce[][o.sonar.db.Database] Create JDBC data source for jdbc:postgresql://sonarqube-postgresql:5432/sonarDB
2020.09.13 16:31:00 INFO  ce[][o.s.s.p.ServerFileSystemImpl] SonarQube home: /opt/sonarqube
2020.09.13 16:31:01 INFO  ce[][o.s.c.c.CePluginRepository] Load plugins
2020.09.13 16:31:02 INFO  ce[][o.s.c.c.ComputeEngineContainerImpl] Running Community edition
2020.09.13 16:31:02 INFO  ce[][o.s.c.q.PurgeCeActivities] Delete the Compute Engine tasks created before 1584462662162
2020.09.13 16:31:02 INFO  ce[][o.s.c.q.PurgeCeActivities] Delete the Scanner contexts tasks created before 1597595462177
2020.09.13 16:31:02 INFO  ce[][o.s.ce.app.CeServer] Compute Engine is operational
2020.09.13 16:31:02 INFO  app[][o.s.a.SchedulerImpl] Process[ce] is up
2020.09.13 16:31:02 INFO  app[][o.s.a.SchedulerImpl] SonarQube is up

在节点服务器上访问 sonarqube 可以吗?

如果不可以贴一下 sonarqube ingress,service,endpoints, pod 等资源详情。

kubectl get  ing  -n c7n-system  sonarqube-sonarqube -o yaml

kubectl get svc  -n c7n-system  sonarqube-sonarqube -o yaml

kubectl get ep  -n c7n-system  sonarqube-sonarqube -o yaml

kubectl describe po  -n c7n-system  <sonarqube pod name> -o yaml
[root@ksm01 ~]# kubectl get  ing  -n c7n-system  sonarqube-sonarqube -o yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    meta.helm.sh/release-name: sonarqube
    meta.helm.sh/release-namespace: c7n-system
  creationTimestamp: "2020-09-13T16:29:40Z"
  generation: 1
  labels:
    app: sonarqube
    app.kubernetes.io/managed-by: Helm
    chart: sonarqube-0.15.0-3
    heritage: Helm
    release: sonarqube
  managedFields:
  - apiVersion: networking.k8s.io/v1beta1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .: {}
          f:meta.helm.sh/release-name: {}
          f:meta.helm.sh/release-namespace: {}
        f:labels:
          .: {}
          f:app: {}
          f:app.kubernetes.io/managed-by: {}
          f:chart: {}
          f:heritage: {}
          f:release: {}
      f:spec:
        f:rules: {}
    manager: Go-http-client
    operation: Update
    time: "2020-09-13T16:29:40Z"
  name: sonarqube-sonarqube
  namespace: c7n-system
  resourceVersion: "1186011"
  selfLink: /apis/extensions/v1beta1/namespaces/c7n-system/ingresses/sonarqube-sonarqube
  uid: 54300950-67d0-4fd5-96a6-02acd81392ef
spec:
  rules:
  - host: sonarqube.devops.local
    http:
      paths:
      - backend:
          serviceName: sonarqube-sonarqube
          servicePort: 9000
        path: /
        pathType: ImplementationSpecific
      - backend:
          serviceName: sonarqube-sonarqube
          servicePort: 9000
        path: /*
        pathType: ImplementationSpecific
status:
  loadBalancer: {}
[root@ksm01 ~]# kubectl get svc  -n c7n-system  sonarqube-sonarqube -o yaml
apiVersion: v1
kind: Service
metadata:
  annotations:
    meta.helm.sh/release-name: sonarqube
    meta.helm.sh/release-namespace: c7n-system
  creationTimestamp: "2020-09-13T16:29:40Z"
  labels:
    app: sonarqube
    app.kubernetes.io/managed-by: Helm
    chart: sonarqube-0.15.0-3
    heritage: Helm
    release: sonarqube
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .: {}
          f:meta.helm.sh/release-name: {}
          f:meta.helm.sh/release-namespace: {}
        f:labels:
          .: {}
          f:app: {}
          f:app.kubernetes.io/managed-by: {}
          f:chart: {}
          f:heritage: {}
          f:release: {}
      f:spec:
        f:ports:
          .: {}
          k:{"port":9000,"protocol":"TCP"}:
            .: {}
            f:name: {}
            f:port: {}
            f:protocol: {}
            f:targetPort: {}
        f:selector:
          .: {}
          f:app: {}
          f:release: {}
        f:sessionAffinity: {}
        f:type: {}
    manager: Go-http-client
    operation: Update
    time: "2020-09-13T16:29:40Z"
  name: sonarqube-sonarqube
  namespace: c7n-system
  resourceVersion: "1185995"
  selfLink: /api/v1/namespaces/c7n-system/services/sonarqube-sonarqube
  uid: fb60d23d-162b-4066-970e-16fa2a47b958
spec:
  clusterIP: 10.68.82.244
  ports:
  - name: sonarqube
    port: 9000
    protocol: TCP
    targetPort: 9000
  selector:
    app: sonarqube
    release: sonarqube
  sessionAffinity: None
  type: ClusterIP
status:

[root@ksm01 ~]# kubectl get ep  -n c7n-system  sonarqube-sonarqube -o yaml
apiVersion: v1
kind: Endpoints
metadata:
  annotations:
    endpoints.kubernetes.io/last-change-trigger-time: "2020-09-14T00:31:03+08:00"
  creationTimestamp: "2020-09-13T16:29:40Z"
  labels:
    app: sonarqube
    app.kubernetes.io/managed-by: Helm
    chart: sonarqube-0.15.0-3
    heritage: Helm
    release: sonarqube
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .: {}
          f:endpoints.kubernetes.io/last-change-trigger-time: {}
        f:labels:
          .: {}
          f:app: {}
          f:app.kubernetes.io/managed-by: {}
          f:chart: {}
          f:heritage: {}
          f:release: {}
      f:subsets: {}
    manager: kube-controller-manager
    operation: Update
    time: "2020-09-13T16:31:03Z"
  name: sonarqube-sonarqube
  namespace: c7n-system
  resourceVersion: "1186394"
  selfLink: /api/v1/namespaces/c7n-system/endpoints/sonarqube-sonarqube
  uid: e04b5b44-4e81-452c-bdb1-46c39cfbc6db
subsets:
- addresses:
  - ip: 172.20.3.113
    nodeName: 192.168.168.105
    targetRef:
      kind: Pod
      name: sonarqube-sonarqube-8c9dccf5d-79qjx
      namespace: c7n-system
      resourceVersion: "1186392"
      uid: 11e9df84-6868-477d-b3b7-85d11096a5c4
  ports:
  - name: sonarqube
    port: 9000

[root@ksm01 ~]# kubectl describe pod -n c7n-system  sonarqube-sonarqube-8c9dccf5d-79qjx 
Name:         sonarqube-sonarqube-8c9dccf5d-79qjx
Namespace:    c7n-system
Priority:     0
Node:         192.168.168.105/192.168.168.105
Start Time:   Mon, 14 Sep 2020 00:29:40 +0800
Labels:       app=sonarqube
              pod-template-hash=8c9dccf5d
              release=sonarqube
Annotations:  <none>
Status:       Running
IP:           172.20.3.113
IPs:
  IP:           172.20.3.113
Controlled By:  ReplicaSet/sonarqube-sonarqube-8c9dccf5d
Init Containers:
  install-plugins:
    Container ID:  docker://e8a54be074327870d585a94ce23236eaa463b2f4f78cac20edb51013eeea7a94
    Image:         joosthofman/wget:1.0
    Image ID:      docker-pullable://joosthofman/wget@sha256:74ef45d9683b66b158a0acaf0b0d22f3c2a6e006c3ca25edbc6cf69b6ace8294
    Port:          <none>
    Host Port:     <none>
    Command:
      sh
      -c
      mkdir -p /opt/sonarqube/extensions/plugins/tmp && rm -f /opt/sonarqube/extensions/plugins/tmp/* && cp /tmp/scripts/install_plugins.sh /opt/sonarqube/extensions/plugins/tmp/install_plugins.sh && chmod 0775 /opt/sonarqube/extensions/plugins/tmp/install_plugins.sh && /opt/sonarqube/extensions/plugins/tmp/install_plugins.sh && pwd && ls -lah 
    State:          Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Mon, 14 Sep 2020 00:29:42 +0800
      Finished:     Mon, 14 Sep 2020 00:29:45 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /opt/sonarqube/extensions/plugins/tmp from sonarqube (rw,path="tmp")
      /tmp/scripts/ from install-plugins (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-6h7vz (ro)
Containers:
  sonarqube:
    Container ID:  docker://4c335e698052114ae2cfd81ba90ab6f0a4e60531e1bdef8c17951243785caa6b
    Image:         sonarqube:7.6-community
    Image ID:      docker-pullable://sonarqube@sha256:c01d1381e4b0459beab744b9d2ed1df0a30deadcea5025f78972c4d3cc0793a0
    Port:          9000/TCP
    Host Port:     0/TCP
    Command:
      /usr/local/copy_plugins.sh
    State:          Running
      Started:      Mon, 14 Sep 2020 00:29:46 +0800
    Ready:          True
    Restart Count:  0
    Liveness:       http-get http://:9000/sessions/new delay=60s timeout=1s period=30s #success=1 #failure=3
    Readiness:      http-get http://:9000/sessions/new delay=60s timeout=1s period=30s #success=1 #failure=6
    Environment:
      SONARQUBE_JDBC_USERNAME:  sonarUser
      SONARQUBE_JDBC_PASSWORD:  <set to the key 'postgres-password' in secret 'sonarqube-postgresql'>  Optional: false
      SONARQUBE_JDBC_URL:       jdbc:postgresql://sonarqube-postgresql:5432/sonarDB
    Mounts:
      /opt/sonarqube/data from sonarqube (rw,path="data")
      /opt/sonarqube/extensions/plugins/tmp from sonarqube (rw,path="tmp")
      /usr/local/ from copy-plugins (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-6h7vz (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  install-plugins:
    Type:      ConfigMap (a volume populated by a ConfigMap)
    Name:      sonarqube-sonarqube-install-plugins
    Optional:  false
  copy-plugins:
    Type:      ConfigMap (a volume populated by a ConfigMap)
    Name:      sonarqube-sonarqube-copy-plugins
    Optional:  false
  sonarqube:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  sonarqube-sonarqube
    ReadOnly:   false
  default-token-6h7vz:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-6h7vz
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:          <none>

有解吗
这个

k8s 里面的资源是没有问题的, 你检查一下 sonarqube.devops.local 这个内网是不是正确解析的。

正常解析的。就是访问404

直接在k8s节点访问 <pod ip>:9000 呢?

你好,请执行下面语句,提供返回结果

curl -H 'HOST: sonarqube.devops.local' 任意worker节点IP
# 例如:
# curl -H 'HOST: sonarqube.devops.local' 192.168.1.2
[root@ksm01 ~]# curl -H 'Host:sonarqube.devops.local' 192.168.168.105
404 page not found

你好,请问集群是使用kubeadm-ha进行安装的吗?看返回的404结果并非ingress所返回的。请执行下面语句并提供结果

kubectl  get svc -A
[root@ksm01 ~]# kubectl get svc -n kube-system
NAME                                          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                        AGE
dashboard-metrics-scraper                     ClusterIP   10.68.248.90    <none>        8000/TCP                       5d16h
kube-dns                                      ClusterIP   10.68.0.2       <none>        53/UDP,53/TCP,9153/TCP         5d16h
kubernetes-dashboard                          ClusterIP   10.68.180.253   <none>        443/TCP                        5d16h
metrics-server                                ClusterIP   10.68.71.105    <none>        443/TCP                        5d16h
prometheus-operator-coredns                   ClusterIP   None            <none>        9153/TCP                       2d23h
prometheus-operator-kube-controller-manager   ClusterIP   None            <none>        10252/TCP                      2d23h
prometheus-operator-kube-etcd                 ClusterIP   None            <none>        2379/TCP                       2d23h
prometheus-operator-kube-proxy                ClusterIP   None            <none>        10249/TCP                      2d23h
prometheus-operator-kube-scheduler            ClusterIP   None            <none>        10251/TCP                      2d23h
prometheus-operator-kubelet                   ClusterIP   None            <none>        10250/TCP,10255/TCP,4194/TCP   3d
traefik                                       ClusterIP   10.68.46.90     <none>        80/TCP,443/TCP,8080/TCP        4d19h

你好,请确认你使用的traefik是否支持ingress对象。

支持啊。我其他服务全部正常访问的啊。就这个不行。

请尝试编辑该ingress对象,删除所示部分后看看是否解决问题

[root@ksm01 ~]# kubectl edit  ing  -n c7n-system  sonarqube-sonarqube
......
spec:
  rules:
  - host: sonarqube.devops.local
    http:
      paths:
      - backend:
          serviceName: sonarqube-sonarqube
          servicePort: 9000
        path: /
        pathType: ImplementationSpecific
-     - backend:
-         serviceName: sonarqube-sonarqube
-         servicePort: 9000
-       path: /*
-       pathType: ImplementationSpecific
......

可以了。问题出在- path: /* 后面多了个*