You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AKS环境下前端无法连接后端微服务,Ingress请求报404

AKS Ingress返回404故障排查

问题背景

已在AKS中部署服务,前端通过LoadBalancer暴露,本应请求两个微服务数据但网站无法接收数据。直接向Ingress发起请求仍返回404错误。

Ingress资源配置

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: bert-ingress  
  namespace: default
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:
      - path: /reinforcement
        pathType: Prefix
        backend:
          service:
            name: bertreinforcement
            port:
              number: 5000
      - path: /environment
        pathType: Prefix
        backend:
          service:
            name: bertenvironment
            port:
              number: 8080

请求测试结果

(base) b:~$ curl -I http://<IngressIP>/reinforcement/get_prediction_result
HTTP/1.1 404 Not Found
Date: Tue, 13 Aug 2024 05:44:26 GMT
Content-Type: text/html
Content-Length: 146
Connection: keep-alive

(base) b:~$ curl -I http://<IngressIP>/environment/get_result
HTTP/1.1 404 Not Found
Date: Tue, 13 Aug 2024 05:44:39 GMT
Content-Type: text/html
Content-Length: 146
Connection: keep-alive

已确认端口及名称配置无误,代码端点配置正确,需排查故障原因是Ingress配置还是内部微服务暴露流程问题。


故障原因及解决方法

问题出在Ingress的rewrite-target注解配置上:

当前设置nginx.ingress.kubernetes.io/rewrite-target: /,当请求/reinforcement/get_prediction_result时,Ingress会把整个路径重写为/,而非保留/get_prediction_result部分,导致请求发到后端服务的根路径,但你的服务实际监听的是/get_prediction_result这类具体端点,因此返回404。

正确配置方式

需要使用带正则捕获组的重写规则,适配Kubernetes v1版本Ingress的路径处理逻辑:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: bert-ingress  
  namespace: default
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:
      - path: /reinforcement(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: bertreinforcement
            port:
              number: 5000
      - path: /environment(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: bertenvironment
            port:
              number: 8080

配置说明

  • path: /reinforcement(/|$)(.*):通过正则捕获组,把/reinforcement之后的路径部分捕获到$2变量中
  • rewrite-target: /$2:将请求重写为后端服务对应的路径,比如请求/reinforcement/get_prediction_result会被转换为/get_prediction_result,完美匹配后端服务的端点

额外验证步骤

  1. 应用修改后的Ingress配置:kubectl apply -f your-ingress-file.yaml
  2. 等待Ingress控制器更新配置后,重新测试请求
  3. 如果仍有问题,先验证后端服务本身是否正常:
    • 查看服务Pod状态:kubectl get pods
    • 本地端口转发测试:kubectl port-forward service/bertreinforcement 5000:5000,然后访问http://localhost:5000/get_prediction_result确认服务端点是否正常响应

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 14:36:10