Kubernetes Ingress未将应用程序URL添加到Grafana仪表板

10

我已经在我的Kubernetes 1.9集群中安装了Grafana。当我通过我的ingress URL (http://sample.com/grafana/) 访问时,会得到第一个页面。之后,JavaScript、CSS下载不会将 /grafana 添加到URL中。

这是我的ingress规则:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: grafana-ingress-v1
  namespace: monitoring
  annotations:
    ingress.kubernetes.io/rewrite-target: /
    kubernetes.io/ingress.class: nginx
spec:
  tls:
  - hosts:
    - sample.com
    secretName: ngerss-tls
  rules:
  - host: sample.com
    http:
      paths:
      - path: /grafana/
        backend:
          serviceName: grafana-grafana
          servicePort: 80

我在这里看到关于同一个话题的讨论,但对于我的问题没有帮助。

https://github.com/kubernetes/contrib/issues/860 下面的图片展示了第一个请求去到了 /grafana/,但第二个请求没有在url中添加 /grafana/

enter image description here

2个回答

10
您的入口规则是正确的,nginx创建了正确的虚拟主机来转发流量到grafana的服务(我只留下了必要的字符串来显示)。
 server {
    server_name sample.com;
    listen 80;
    listen [::]:80;
    set $proxy_upstream_name "-";

    location ~* ^/grafana/(?<baseuri>.*) {

        set $proxy_upstream_name "default-grafana-grafana-80";

        set $namespace      "default";
        set $ingress_name   "grafana-ingress-v1";


    rewrite /grafana/(.*) /$1 break;
    rewrite /grafana/ / break;
    proxy_pass http://default-grafana-grafana-80;

    }

是的,当您访问 sample.com/grafana/ 时,您将收到来自grafana pod的响应,但它会重定向到 sample.com/login 页面(从您提供的屏幕截图可以看到):

$ curl -v -L http://sample.com/grafana/
*   Trying 192.168.99.100...
* Connected to sample.com (192.168.99.100) port 80 (#0)
> GET /grafana/ HTTP/1.1
> Host: sample.com
> User-Agent: curl/7.47.0
> Accept: */*
> 
< HTTP/1.1 302 Found
< Server: nginx/1.13.5
< Date: Tue, 30 Jan 2018 21:55:21 GMT
< Content-Type: text/html; charset=utf-8
< Content-Length: 29
< Connection: keep-alive
< Location: /login
< Set-Cookie: grafana_sess=c07ab2399d82fef4; Path=/; HttpOnly
< Set-Cookie: redirect_to=%252F; Path=/
< 
* Ignoring the response-body
* Connection #0 to host sample.com left intact
* Issue another request to this URL: 'http://sample.com/login'
* Found bundle for host sample.com: 0x563ff9bf7f20 [can pipeline]
* Re-using existing connection! (#0) with host sample.com
* Connected to sample.com (192.168.99.100) port 80 (#0)
> GET /login HTTP/1.1
> Host: sample.com
> User-Agent: curl/7.47.0
> Accept: */*
> 
< HTTP/1.1 404 Not Found
< Server: nginx/1.13.5
< Date: Tue, 30 Jan 2018 21:55:21 GMT
< Content-Type: text/plain; charset=utf-8
< Content-Length: 21
< Connection: keep-alive
< 
* Connection #0 to host sample.com left intact
default backend 404

因为默认情况下Grafana的root_url只是/

root_url = %(protocol)s://%(domain)s:%(http_port)s/

当请求重定向到只有sample.com时,nginx会将其转发到默认的404后端。

解决方案:

您需要更改grafana服务器设置中的root_url/grafana/

root_url = %(protocol)s://%(domain)s:%(http_port)s/grafana/

您可以通过更改grafana的configmap对象中的此设置来完成此操作。


@nickoly 谢谢你的回答。我会测试一下。 - sfgroups
1
为了支持所有域,请使用 --> root_url = %(protocol)s://0.0.0.0:%(http_port)s/grafana/ - ImranRazaKhan

0
为了使用前缀/grafana(例如,http://k8s.example.com/grafana)为Grafana提供服务,请将以下内容添加到您的helm values.yaml中。
ingress:
  enabled: true
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/rewrite-target: /$1
    nginx.ingress.kubernetes.io/use-regex: "true"

  path: /grafana/?(.*)
  hosts:
    - k8s.example.com

grafana.ini:
  server:
    root_url: http://localhost:3000/grafana # this host can be localhost

将Helm Grafana版本升级如下:

helm -n namespace_name upgrade -f values.yaml relase_name stable/grafana

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接