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

AKS环境下Nginx Ingress访问mydns/post/test出现404错误求助

问题:访问mydns/post/test出现Nginx 404错误

我已将DNS映射至AKS负载均衡器的外部IP,负载均衡器下部署了Nginx Ingress Controller以对接集群内服务的Ingress。尝试访问mydns/post/test时收到Nginx 404错误,推测是内部路由映射问题。以下是实现步骤:

  • 通过命令安装Nginx Ingress Controller:
    kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/cloud/deploy.yaml
    
    执行kubectl get all -n ingress-nginx可查看资源状态。
  • 创建Ingress资源:
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: service-ingress
      annotations:
        kubernetes.io/ingress.class: nginx
    spec:
      rules:
        - http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: post-service
                    port:
                      number: 8080
    
  • 对应post-service资源:
    apiVersion: v1
    kind: Service
    metadata:
      name: post-service
    spec:
      selector:
        app.kubernetes.io/name: post
      ports:
        - port: 8080
          targetPort: 8080
    

该服务关联的Pod运行Spring Boot应用,其/test端点已通过端口转发验证正常:

@RestController
@Slf4j
public class PostController {
    @GetMapping("/test")
    String all() {
        return "Hello!";
    }
}

原因分析与解决方案

错误原因

你访问的mydns/post/test路径中,/post是Ingress未配置的前缀。当前Ingress仅匹配/前缀,默认会把完整请求路径/post/test转发给后端Spring Boot应用,但你的应用只监听/test端点,因此后端返回404,最终Nginx将该错误返回给客户端。

解决办法

办法1:调整Ingress规则适配/post前缀

修改Ingress资源,添加/post前缀的匹配规则,并通过注解重写路径,去掉/post部分后转发给后端:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: service-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  rules:
    - http:
        paths:
          - path: /post(/|$)(.*)
            pathType: ImplementationSpecific
            backend:
              service:
                name: post-service
                port:
                  number: 8080

配置生效后,/post/test会被重写为/test转发给后端,匹配你的Spring Boot端点。

办法2:修改访问路径

如果不需要/post前缀,直接访问mydns/test即可,当前Ingress已将所有/前缀的请求转发给post-service,后端/test端点可正常响应。

验证配置

修改Ingress后执行以下命令确认生效:

kubectl apply -f <修改后的ingress.yaml>
# 查看Ingress状态
kubectl get ingress service-ingress
# 查看Nginx Ingress日志,确认路由规则
kubectl logs -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 01:09:55