我有以下入口设置:
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
。
我做错了什么?
我现在遇到了确切的问题。如果您同意使用这样的 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 找到解决方案,我会发布它。
我发现以下配置可以完美运行,没有任何问题:
GF_SERVER_ROOT_URL: /grafana
GF_SERVER_SERVE_FROM_SUB_PATH: "true"
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 设置。