kubernetes 和 nginx 入口路由路径

问题描述 投票:0回答:2

我有以下入口设置:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: grafana
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /grafana/$2
spec:
  rules:
  - host: my.domain.com
    http:
      paths:
      - backend:
          service:
            name: grafana
            port:
              number: 80
        path: /grafana(/|$)(.*)
        pathType: Prefix

当我点击

my.domain.com/grafana
时,我被重定向到
https://my.domain/login
,并显示 NGINX 404 Not Found

可以根据日志看到

grafana
pod 被查询命中:

logger=上下文traceID=00000000000000000000000000000000 userId=0 orgId=0 uname= t=2022-10-13T16:19:57.989170173Z 级别=信息 msg =“请求已完成”方法= GET路径= / grafana /状态= 302 Remote_addr=x.x.x.x time_ms=0 持续时间=718.491μs 大小=29 引用= 跟踪ID=00000000000000000000000000000000

但是什么也没有。

入口日志下方:

x.x.x.x - - [13/Oct/2022:16:19:57 +0000]“GET /grafana HTTP/2.0”302 29“-”“Mozilla/5.0(Windows NT 10.0;Win64;x64) AppleWebKit/537.36(KHTML,如 Gecko)Chrome/106.0.0.0 Safari/537.36" 484 0.003 [mynamespace-grafana-80] [] x.x.x.x:3000 29 0.004 302 b236c5c8ad1c0bb006cef4e87a7ba8b2

x.x.x.x - - [13/Oct/2022:16:19:58 +0000]“GET /login HTTP/2.0”404 548“-”“Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36 (KHTML,如 Gecko)Chrome/106.0.0.0 Safari/537.36" 23 0.000 [上游默认后端] [] 127.0.0.1:8181 548 0.000 404 99e27e8c68cdfa719c214ad279c54063

在重定向查询到 /login 时,我们可以注意到入口试图将我重定向到默认后端而不是我的 grafana 服务。

我尝试过使用 nginx 的注释

rewrite-target
use-regex
root-app
,但我尝试过的都没有成功。

目标是如果我需要身份验证,

my.domain.com/grafana
将我重定向到
my.domain.com/grafana/login
,然后
my.domain.com/grafana/whatever/path?foo=bar

我做错了什么?

nginx kubernetes redirect kubernetes-ingress
2个回答
0
投票

我现在遇到了确切的问题。如果您同意使用这样的 URL:

grafana.yourip.com
而不是
yourip.com/grafana
,您可以将其添加到
values.yaml
(仅此而已,无需更改任何其他内容):

grafana:
  admin:
    user: admin
    password: admin
  ingress:
    pathType: ImplementationSpecific
    enabled: true
    annotations:
      kubernetes.io/ingress.class: nginx
    hostname: grafana.yourip.com

如果我能通过

/grafana
URL 找到解决方案,我会发布它。


0
投票

我发现以下配置可以完美运行,没有任何问题:

  1. 将以下环境变量添加到 Kubernetes 设置中的 Grafana pod:
GF_SERVER_ROOT_URL: /grafana
GF_SERVER_SERVE_FROM_SUB_PATH: "true"
  1. 按如下方式修改您的 Ingress 配置:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: grafana
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /$2 # For Grafana version 10, remove the rewrite
spec:
  rules:
  - host: my.domain.com
    http:
      paths:
      - backend:
          service:
            name: grafana
            port:
              number: 80
        path: /grafana(/|$)(.*) # For Grafana version 10, set it as /grafana
        pathType: Prefix

此配置应该可以顺利地用于您的 Grafana 设置。

© www.soinside.com 2019 - 2024. All rights reserved.