.NET微服务部署NGINX Ingress返回404错误排查求助
Ingress资源识别异常
你当前使用的kubernetes.io/ingress.class: nginx注解在v1.19+版本的NGINX Ingress Controller中已被废弃,需要在Ingress的spec字段下显式添加ingressClassName: nginx配置,否则Controller不会识别该Ingress规则,导致路径匹配不到返回404。
修正后的spec示例:spec: ingressClassName: nginx # 新增该行配置 rules: - host: acme.com # 剩余原有规则保持不变缺失路径重写规则
你已开启nginx.ingress.kubernetes.io/use-regex: "true"正则匹配,但未配置路径重写规则,若需要匹配带后缀的路径(如你访问的带尾斜杠的/api/platforms/、子路由/api/platforms/1),需要做两处修改:- 在annotations中新增重写注解:
nginx.ingress.kubernetes.io/rewrite-target: /$1 - 将路径修改为正则匹配格式:
path: /api/platforms(/|$)(.*),对应pathType改为ImplementationSpecific
- 在annotations中新增重写注解:
后端服务可达性验证
先跳过Ingress直接验证后端服务是否正常响应,执行端口转发命令:kubectl port-forward service/platforms-clusterip-srv 8080:80
访问http://localhost:8080/api/platforms/,如果仍返回404则问题出在.NET服务本身的路由配置,和Ingress无关,需要检查服务的路由规则、是否配置了UsePathBase路径前缀等。Ingress Controller日志排查
执行命令查看Controller的请求处理日志,定位具体匹配失败原因:kubectl logs -n ingress-nginx <替换为你的ingress-nginx-controller的pod名称>
可看到请求的匹配路径、转发目标,明确是路径未匹配还是转发到Service失败。
内容的提问来源于stack exchange,提问作者KiddoDeveloper

