部署到kubernetes集群的Kibana返回404

时间:2019-01-29 04:32:11

标签: amazon-web-services kubernetes http-status-code-404 kibana kubernetes-statefulset

我将kibana作为StatefulSet部署到kubernetes集群。但是,将我的浏览器指向kibana时,它返回{“ statusCode”:404,“ error”:“ Not Found”,“ message”:“ Not Found”}。任何建议和见解,表示赞赏。这是当我使用http://app.domain.io/kibana

在浏览器上访问应用程序时在pod中看到的日志
{"type":"response","@timestamp":"2019-01-29T04:18:50Z","tags":[],"pid":1,"method":"get","statusCode":404,"req":{"url":"/kibana","method":"get","headers":{"x-forwarded-for":"[IP]","x-forwarded-proto":"https","x-forwarded-port":"443","host":"[host]","x-amzn-trace-id":"Root=1-5c4fd42a-1261c1e0474144902a2d6840","cache-control":"max-age=0","upgrade-insecure-requests":"1","user-agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36","accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8","accept-encoding":"gzip, deflate, br","accept-language":"en-US,en;q=0.9,zh-CN;q=0.8,zh-TW;q=0.7,zh;q=0.6,ko;q=0.5"},"remoteAddress":"[IP]","userAgent":"10.0.2.185"},"res":{"statusCode":404,"responseTime":19,"contentLength":9},"message":"GET /kibana 404 19ms - 9.0B"}
apiVersion: v1
kind: Service 
metadata:
  name: svc-kibana
  labels: 
    app: app-kibana
spec:
  selector:
    app: app-kibana
#    tier: database
  ports:  
  - name: kibana
    protocol: TCP
    port: 8080
    targetPort: 5601
  clusterIP: None # Headless
---
apiVersion: apps/v1 
kind: StatefulSet
metadata:
  name: kibana
spec:
  serviceName: "svc-kibana"
  podManagementPolicy: "Parallel" # Default is OrderedReady
  replicas: 1 # Default is 1
  selector:
    matchLabels:
      app: app-kibana # Has to match .spec.template.metadata.labels
  template:
    metadata:
      labels: 
        app: app-kibana # Has to match .spec.selector.matchLabels
    spec:   
      terminationGracePeriodSeconds: 10
      containers:
      - name: kibana
        securityContext:
          capabilities:
            add:
              - IPC_LOCK
              - SYS_RESOURCE
        image: kibana:6.5.4
        imagePullPolicy: Always
        env:
        - name: ELASTICSEARCH_URL
          value: http://svc-elasticsearch:9200
        - name: SERVER_BASEPATH
          value: /api/v1/namespaces/default/services/svc-kibana/proxy
        ports:
        - containerPort: 5601
          name: kibana
          protocol: TCP

这是AWS ALB的运行状况检查:

{"type":"response","@timestamp":"2019-01-29T06:30:53Z","tags":[],"pid":1,"method":"get","statusCode":200,"req":{"url":"/app/kibana","method":"get","headers":{"host":"[IP]:5601","connection":"close","user-agent":"ELB-HealthChecker/2.0","accept-encoding":"gzip, compressed"},"remoteAddress":"[IP]","userAgent":"[IP]"},"res":{"statusCode":200,"responseTime":27,"contentLength":9},"message":"GET /app/kibana 200 27ms - 9.0B"}

我试图删除ENV值,并使用安装在/etc/kibana/kibana.yml上的ConfigMap进行以下配置,但无济于事:

apiVersion: v1
kind: ConfigMap
metadata:
  creationTimestamp: "2019-01-29T02:12:55Z"
  name: kibana-config
  namespace: default 
  resourceVersion: "4178388"
  selfLink: /api/v1/namespaces/default/configmaps/kibana-config
  uid: 63b10866-236b-11e9-a14d-482ae31e6a94
data:
  kibana.yml: |+
    server.port: 5601
    server.host: "0.0.0.0"
    elasticsearch.url: "http://svc-elasticsearch:9200"
    kibana.index: ".kibana"
    logging.silent: false
    logging.quiet: false
    logging.verbose: true

3 个答案:

答案 0 :(得分:1)

    - name: SERVER_BASEPATH
      value: /api/v1/namespaces/default/services/svc-kibana/proxy

是错误的设置,导致您遇到问题,因为server.basePath被记录为

  

如果在代理后面运行,则使您能够指定安装Kibana的路径。使用server.rewriteBasePath设置告诉Kibana是否应从收到的请求中删除basePath,并在启动时防止弃用警告。此设置不能以斜杠(/)结尾。

因此您将必须使用/api/v1/namespaces/default/services/svc-kibana/proxy/app/kibana,因为您没有覆盖server.defaultRoute: /app/kibana。我不知道为什么ELB健康检查只获取9个字节的内容,但是您可能还是想使用/api/status作为其健康检查

答案 1 :(得分:1)

在将以下内容添加到Kibana配置后,它现在可以工作:

    server.basePath: "/my-kibana"
    server.rewriteBasePath: true

感谢Matthew L Daniel,我已将健康检查更改为/my-kibana/api/status

答案 2 :(得分:0)

我在kubernetes集群中遇到了同样的问题,其中kibana在nginx代理后面运行。

DNS: https://my-url/dashboard 

Nginx conf:

     location /dashboard/ {
          rewrite ^/dashboard/(.*) /$1 break;
          proxy_pass http://kibana:5601/;

在kibana.yml中由Kok How teh添加以上建议的参数后

kibana.yml: 
 server.name: kibana
 server.host: "0"
 elasticsearch.url: http://elasticsearch:9200
 server.basePath: "/dashboard"   #this line

能够解决重定向问题。