Kibana, развернутая в кластере Kubernetes, возвращает ошибку 404

У меня кибана развернута в кластере кубернетов как StatefulSet. Однако, когда мой браузер указывает кибану, он возвращает {"statusCode": 404, "error": "Not Found", "message": "Not Found"}. Любые советы и понимание приветствуются. Вот журнал, который я вижу в модуле при доступе к приложению в браузере с помощью http://app.domain.io/kibana

{"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 и использовать ConfigMap, установленный на /etc/kibana/kibana.yml, со следующей конфигурацией, но безрезультатно:

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

person Kok How Teh    schedule 29.01.2019    source источник
comment
Как показывает проверка работоспособности, разве это не путь /app/kibana?   -  person mdaniel    schedule 29.01.2019
comment
Согласно medium.com / @ devfire /, / app / kibana предназначен только для проверки работоспособности.   -  person Kok How Teh    schedule 29.01.2019


Ответы (3)


Теперь он работает после того, как я добавлю в конфигурацию Kibana следующее:

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

Благодаря Мэтью Л. Дэниэлю, я переключил проверку работоспособности на /my-kibana/api/status

person Kok How Teh    schedule 29.01.2019
comment
что ты имеешь в виду под моей кибаной? Можно ли расширить с помощью фиктивных значений. - person GangaRam Dewasi; 18.02.2020

    - 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 байтов контента, но вы, вероятно, захотите использовать _ 6_ в качестве проверки работоспособности в любом случае

person mdaniel    schedule 29.01.2019
comment
Я удаляю этот SERVER_BASEPATH из окружения и использую ConfigMap, установленный в /etc/kibana/kibana.yml, но это не помогает. Я обновил свой исходный пост, добавив в него содержимое configmap. - person Kok How Teh; 29.01.2019
comment
Итак, что вы получите, если скрутите /app/kibana, как я сказал? - person mdaniel; 29.01.2019

Я столкнулся с той же проблемой в кластере kubernetes, где кибана работала за прокси-сервером nginx.

DNS: https://my-url/dashboard 

Nginx conf:

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

После добавления предложенных выше параметров Kok How teh в kibana.yml

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

смог решить проблему перенаправления.

person GangaRam Dewasi    schedule 18.02.2020