AKS集群Ingress NGINX访问/apple路径返回404无法访问问题排查
问题原因及解决方案
核心故障原因
你遇到的404问题是多个配置不规范叠加导致的,按优先级排查如下:
- 注解前缀错误,重写规则未生效
你当前使用的是旧版注解ingress.kubernetes.io/rewrite-target,官方NGINX Ingress控制器的标准注解前缀为nginx.ingress.kubernetes.io,该错误导致你配置的路径重写规则完全没有生效。请求访问/apple时直接将完整路径转发给后端应用,若你的应用没有配置/apple路径的路由,自然返回404。 - Ingress API版本过旧已废弃
你使用的extensions/v1beta1版本Ingress在K8s 1.16版本就已被弃用,1.22及之后版本完全移除了该API,新版NGINX Ingress控制器不会识别该版本的Ingress资源,你的规则大概率没有被控制器加载。 - 未指定IngressClass
如果你的AKS集群中存在多个Ingress控制器,或者控制器配置了默认IngressClass匹配规则,未显式指定IngressClass的资源会被控制器忽略。你可以看到你的Ingress详情中Address字段为空,也证明了控制器没有关联该资源。 - 后端应用路径适配问题
如果前三项都修复后仍然404,需要确认你的应用是否能处理/apple路径的请求,优先在集群内验证服务可用性:
# 进入集群内Pod测试服务根路径访问是否正常 kubectl run -it --rm --image=curlimages/curl testcurl -n testns -- curl http://my-svc:80
修正后的Ingress配置
使用符合当前K8s标准的配置如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: example-ingress namespace: testns annotations: # 正确的注解前缀,配合路径捕获组实现前缀重写 nginx.ingress.kubernetes.io/rewrite-target: /$2 # 显式指定IngressClass为nginx,确保被NGINX控制器处理 kubernetes.io/ingress.class: "nginx" spec: rules: - http: paths: # 配置路径匹配规则,捕获/apple后的所有路径 - path: /apple(/|$)(.*) pathType: Prefix backend: service: name: my-svc port: number: 80
该配置会将/apple前缀的所有路径重写后转发到后端服务根路径:比如访问<INGRESS_IP>/apple转发到服务的/路径,访问<INGRESS_IP>/apple/test转发到服务的/test路径。
验证步骤
- 应用新的Ingress配置后,执行
kubectl get ingress -n testns,确认ADDRESS字段已经显示Ingress控制器的公网IP - 若Address仍为空,先排查NGINX Ingress控制器运行状态:
kubectl get pods -n ingress-nginx,确认所有控制器Pod处于Running状态 - 仍然异常可查看控制器日志定位转发逻辑:
kubectl logs -n ingress-nginx <你的控制器Pod名称>
内容的提问来源于stack exchange,提问作者Dusty
相关产品推荐
相关产品推荐

