为什么 Kibana 将 url 转发到 `/spaces/enter`?

Zha*_* Yi 5 nginx docker kibana kubernetes

我有一个 kibana 在 k8s 的 docker 容器内运行。我将 nginx 作为 sidecar,根据路径将所有流量转发到 kibana。

下面是我的 nginx 配置。对于elasticsearch 来说效果很好。但是当我/kibana/在浏览器中打开时,它会重定向到/spaces/enter并显示404 Not Found.

在 kibana 容器日志中我可以看到 302 转发日志:

{"type":"response","@timestamp":"2021-02-24T05:50:32Z","tags":[],"pid":7,"method":"get","statusCode":302,"req":{"url":"/","method":"get","headers":{"connection":"Keep-Alive","proxy-connection":"Keep-Alive","host":"kibana-entrypoint:5601","x-forwarded-for":"49.255.115.150","x-forwarded-proto":"http","x-forwarded-port":"80","x-amzn-trace-id":"Root=1-6035e928-603d67da7eff4225005fdbfc","upgrade-insecure-requests":"1","user-agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36","accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9","accept-encoding":"gzip, deflate","accept-language":"en-GB,en-US;q=0.9,en;q=0.8"},"remoteAddress":"192.168.1.41","userAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36"},"res":{"statusCode":302,"responseTime":7,"contentLength":9},"message":"GET / 302 7ms - 9.0B"}

user nginx;
    worker_processes  1;
    events {
      worker_connections  10240;
    }
    http {
      server {
          listen       8080;
          server_name  localhost;
          location /es/ {
            proxy_pass  http://sample-es-entrypoint:9200/;
          }
          location /health {
            proxy_pass  http://sample-es-entrypoint:9200/_cluster/health;
          }
          location /kibana/ {
            proxy_pass  http://kibana-entrypoint:5601/;
            proxy_redirect off;
            proxy_buffering off;
            proxy_http_version 1.1;
            proxy_set_header Connection "Keep-Alive";
            proxy_set_header Proxy-Connection "Keep-Alive";
          }
      }
    }
Run Code Online (Sandbox Code Playgroud)

问题是kibana为什么要转发这个请求呢?

Von*_*onC 2

elastic/kibanaPR 66098/spaces/enter提到空间选择器 UI 使用该视图将用户发送到适当的默认路线。

PR 44678解释了空间概念的起源:

这弃用了server.defaultRoutefromkibana.yml设置 (#46787),转而使用可通过 UI 控制的高级设置
通过将此设置为高级设置,它本质上变得具有空间感知能力,因此用户可以为每个空间指定自定义默认路线。

过渡

如果server.defaultRoute在 中指定kibana.yml,它将映射到uiSettings.overrides.defaultRoute设置。
此设置告诉 UI 设置服务 defaultRoute 设置已锁定,并且无法通过 UI 进行编辑。
从迁移的角度来看,这对于在次要版本中升级的用户在功能上是等效的:该设置只能通过yml文件进行控制。

功能性

希望利用空间感知路线的用户只需server.defaultRoute从其yml文件中删除该设置(如果已设置)。
如果未设置,高级设置默认为/app/kibana,这是 之前的默认值server.defaultRoute

因此,就您的情况而言,请检查 kibana.yml您的 Kibana Docker 映像所使用的:如果已设置,请尝试删除server.defaultRoute