You need to enable JavaScript to run this app. Azure K8s中Nginx Ingress下Swagger UI路由错误致API调用404问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

Azure K8s中Nginx Ingress下Swagger UI路由错误致API调用404问题咨询

K8s Nginx Ingress 转发ASP.NET Core API 404问题修复方案

问题根源

原有Ingress仅配置了/swagger路径的转发规则,完全没有覆盖/api/*开头的API请求,这类请求无法匹配到任何Ingress规则,因此直接返回404。
另外存在域名配置不一致的隐患:Ingress绑定的host是api-swagger.azure.com,但测试curl命令使用的是api-swagger.cloudapp.azure.com,域名不匹配也会导致请求不命中当前Ingress规则。

修复步骤

1. 补全Ingress路径转发规则

由于Swagger界面和API接口都部署在同一个后端服务development-manager中,需要在Ingress的paths列表下新增/api前缀的转发规则,同样指向该后端服务,保证所有API请求能命中转发逻辑。
如果使用的K8s版本≥1.19,建议显式指定pathType: Prefix避免路径匹配逻辑歧义。
补全后的基础配置如下:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: basic-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: "nginx" 
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
  rules:
  # 改成你实际访问的域名,需和curl命令的域名保持一致
  - host: api-swagger.cloudapp.azure.com
    http:
      paths:
      # 保留原有Swagger路径规则
      - path: /swagger
        backend:
          serviceName: development-manager
          servicePort: 80
      # 新增API路径规则
      - path: /api
        backend:
          serviceName: development-manager
          servicePort: 80

2. 按需配置路径重写(仅特定场景需要)

如果你的ASP.NET Core后端服务本身的路由不带/api前缀(比如后端实际接口路径为/v1/DevelopmentManager/batches),才需要配置路径重写,把请求的/api前缀剥离后再转发:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: basic-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: "nginx" 
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    # 新增重写注解
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
  - host: api-swagger.cloudapp.azure.com
    http:
      paths:
      - path: /swagger
        backend:
          serviceName: development-manager
          servicePort: 80
      # 路径增加捕获组,匹配/api下的所有路径
      - path: /api/(.*)
        backend:
          serviceName: development-manager
          servicePort: 80

注意:如果后端服务本身的路由已经包含/api前缀(比如直接访问后端Pod时需要请求/api/v1/xxx才能通),不需要配置任何重写规则,使用第一步的基础配置即可。

3. 验证配置生效

配置修改后执行kubectl apply -f <你的ingress配置文件>更新规则,再用kubectl describe ingress basic-ingress确认规则和域名配置正确,重新执行curl测试即可正常转发请求。


内容的提问来源于stack exchange,提问作者ikenahim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.03 14:24:03