ingress代理tidb dashboard异常

【 TiDB 使用环境】测试环境
【 TiDB 版本】
tidb版本:企业版7.1.0版本
k8版本:1.19
tidb-operator版本:v1.4.6

测试内容:
将tidb dashboard服务通过ingress代理出来,对外提供访问

问题:
通过ingress访问dashboar时返回404

复现流程:
测试集群id为bf45fbdb-1f2a-4562-900e-7cdae8b2945b,下文中的$ns代指该集群id

1、集群中已经配置好了dashboard的svc

2、配置ingress代理


将所有发送到http://www.dashboard.com/dashboard/bf45fbdb-1f2a-4562-900e-7cdae8b2945b/ 的请求全部转发到basic-dashboard这个service

3、在浏览器中发起请求

响应:


请求失败

4、ingress日志信息:
10.0.2.11 - - [24/Aug/2023:09:49:54 +0000] “GET /dashboard/bf45fbdb-1f2a-4562-900e-7cdae8b2945b/ HTTP/1.1” 302 34 “-” “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36” 485 0.001 [bf45fbdb-1f2a-4562-900e-7cdae8b2945b-basic-dashboard-12333] [] 10.2.8.251:12333 34 0.000 302 0cc224c9a6dbc3efa30b8f08e4f1c3e6
10.0.2.11 - - [24/Aug/2023:09:49:54 +0000] “GET /dashboard/ HTTP/1.1” 404 548 “-” “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36” 448 0.001 [upstream-default-backend] [] 127.0.0.1:8181 548 0.000 404 8eca64452a76f47cb840ae8cf5e72b1a
10.0.2.11 - - [24/Aug/2023:09:49:54 +0000] “GET /favicon.ico HTTP/1.1” 404 548 “http://www.dashboard.com/dashboard/” “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36” 394 0.001 [upstream-default-backend] [] 127.0.0.1:8181 548 0.000 404 323ffbd86199d7f04020901b2b10eb75

通过日志发现"GET /dashboard/bf45fbdb-1f2a-4562-900e-7cdae8b2945b/ HTTP/1.1"在转发的时候换成了"GET /dashboard/ HTTP/1.1"地址,导致了404

5、猜测有可能是ingress配置有问题,下面我们在用相同的配置将请求转发到grafana试试

6、再次发起请求

7、


请求成功

8、ingress日志
10.0.2.186 - - [24/Aug/2023:10:05:07 +0000] “GET /timonitor/bf45fbdb-1f2a-4562-900e-7cdae8b2945b/ HTTP/1.1” 302 76 “-” “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36” 561 0.001 [bf45fbdb-1f2a-4562-900e-7cdae8b2945b-basic-grafana-3000] [] 10.2.9.185:3000 76 0.001 302 124d29c000583146a7a078579b3a34e3
10.0.2.186 - - [24/Aug/2023:10:05:07 +0000] “GET /timonitor/bf45fbdb-1f2a-4562-900e-7cdae8b2945b/login HTTP/1.1” 200 30453 “-” “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36” 566 0.003 [bf45fbdb-1f2a-4562-900e-7cdae8b2945b-basic-grafana-3000] [] 10.2.9.185:3000 30399 0.004 200 757dd724b6dc7483ad86848669ab309e

至此,ingress配置应该是没啥问题,那么问题来了,为什么ingress无法代理dashboard服务

用nginx代理 路径写/dashboard

现在就是nginx代理

不能改成/dashboard,因为k8s集群中有多个tidb集群,需要按namespace进行转发

dashboard 的完整地址不对?http://www.dashboard.com/dashboard/bf45fbdb-1f2a-4562-900e-7cdae8b2945b/dashboard

http://www.dashboard.com/dashboard/bf45fbdb-1f2a-4562-900e-7cdae8b2945b/
http://www.dashboard.com/dashboard/bf45fbdb-1f2a-4562-900e-7cdae8b2945b/dashboard
http://www.dashboard.com/dashboard/bf45fbdb-1f2a-4562-900e-7cdae8b2945b/dashboard/#/signin

这几个地址都试过了,都不行

1 .单独访问这个服务看下通不通,看下pod 日志
2. 进 ingerss pod ,看下最终生成的nginx 配置?

dashboar服务没问题,能正常访问

可能是由于 Ingress 配置的路径匹配规则导致的。还是要f尝试修改 Ingress 的配置