Nginx Ingress Controller VirtualServer路径路由配置故障求助
问题描述
我有如下Nginx Ingress Controller VirtualServer清单:
apiVersion: k8s.nginx.org/v1 kind: VirtualServer metadata: name: tea-vs spec: host: apps.example.com routes: - path: / pathType: Prefix rewrite: path: /tea/ route: path: /tea(.*) pathType: Prefix service: name: tea-svc port: number: 80
我的应用部署在根路径/下,访问apps.example.com时Swagger UI正常加载,显示URL为apps.example.com/index.html。
需求
- 用户访问
apps.example.com/tea时,Swagger UI需正常加载(应用实际在根路径); - tea-svc应收到
apps.example.com的请求,而非apps.example.com/tea; - 用户看到的URL保持为
apps.example.com/tea/index.html; - 不使用Nginx的
Kind: Ingress资源。
现有.NET代码(生产环境运行,无法修改)
app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "V1"); c.RoutePrefix = string.Empty; }); app.UseRouting();
尝试路径路由时始终出现404错误,需要解决。
解决方案
问题出在当前VirtualServer的路由规则配置逻辑错误,需调整路径匹配与重写规则,同时适配Swagger资源的路径映射:
修正后的VirtualServer清单
apiVersion: k8s.nginx.org/v1 kind: VirtualServer metadata: name: tea-vs spec: host: apps.example.com routes: # 处理/tea前缀的主路由 - path: /tea pathType: Prefix rewrite: # 将/tea开头的请求重写为根路径,保留后续路径部分 path: /$1 route: path: /(.*) pathType: Prefix service: name: tea-svc port: number: 80 # 单独处理Swagger的JSON文件请求,避免路径不匹配 - path: /tea/swagger/v1/swagger.json pathType: Exact rewrite: path: /swagger/v1/swagger.json route: path: /swagger/v1/swagger.json pathType: Exact service: name: tea-svc port: number: 80
配置说明
主路由规则:
- 匹配
/tea前缀的所有请求,通过rewrite.path: /$1把/tea/xxx格式的请求重写为/xxx,后端服务收到的是根路径开头的请求,满足需求; - 用户端URL始终保持
apps.example.com/tea/xxx格式,符合要求。
- 匹配
Swagger资源单独路由:
- 由于Swagger UI会发起
/swagger/v1/swagger.json的请求,但用户访问的是/tea路径,所以单独匹配/tea/swagger/v1/swagger.json并重写为后端的真实路径,避免UI加载时出现404。
- 由于Swagger UI会发起
原配置失败原因:
- 原配置用
path: /匹配所有请求并重写为/tea/,导致后端收到的请求路径带/tea前缀,但应用部署在根路径,自然返回404; - 未处理Swagger资源的路径映射,导致UI无法找到
swagger.json文件。
- 原配置用
验证步骤
- 应用修正后的配置:
kubectl apply -f tea-vs.yaml - 访问
apps.example.com/tea,检查Swagger UI是否正常加载,URL是否显示为apps.example.com/tea/index.html; - 查看后端服务日志,确认收到的请求路径为
/、/index.html、/swagger/v1/swagger.json,无/tea前缀。
内容的提问来源于stack exchange,提问作者Venu Reddy
相关产品推荐
相关产品推荐

