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

EKS使用AWS ALB Controller时Ingress子路径访问返回404问题

问题根因
  • AWS ALB转发请求时默认保留完整原始路径,访问http://alb-dns/foo/时,到达后端Nginx的请求路径仍为/foo/,而默认Nginx部署仅在根路径/映射首页资源,不存在/foo/、/bar/对应的站点内容,因此返回404,本质是路径重写能力缺失导致的转发不匹配。
可选解决方案

方案1:保留AWS Load Balancer Controller实现需求

不需要切换控制器即可实现路径访问,核心是通过ALB原生支持的自定义转发动作配置路径重写,之前配置未生效通常是注解格式错误、控制器版本过低导致。

  1. 前置检查:确认集群运行的AWS Load Balancer Controller版本不低于v2.2.0,低于该版本不支持路径重写动作。
  2. 正确的Ingress配置参考:通过alb.ingress.kubernetes.io/actions注解定义带路径重写的转发规则,将非根路径的请求重写为/后再转发给后端服务,配置示例如下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  namespace: ns-fargate-app
  name: game-app-ingress
  annotations:
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
    kubernetes.io/ingress.class: alb
    # 定义/foo路径的重写转发动作
    alb.ingress.kubernetes.io/actions.rewrite-foo: >
      {"type":"forward","forwardConfig":{"targetGroups":[{"serviceName":"game-app-service","servicePort":80}]},
      "rewriteConfig":{"path":"/"}}
    # 定义/bar路径的重写转发动作
    alb.ingress.kubernetes.io/actions.rewrite-bar: >
      {"type":"forward","forwardConfig":{"targetGroups":[{"serviceName":"game-app-service","servicePort":80}]},
      "rewriteConfig":{"path":"/"}}
spec:
  rules:
    - http:
        paths:
        - path: /foo/
          pathType: Prefix
          backend:
            service:
                name: rewrite-foo
                port:
                   name: use-annotation
        - path: /bar/
          pathType: Prefix
          backend:
            service:
                name: rewrite-bar
                port:
                   name: use-annotation
        - path: /
          pathType: Prefix
          backend:
            service:
                name: game-app-service
                port:
                   number: 80
  1. 其他轻量替代方式:
    • 直接修改Nginx配置,在Nginx内部添加/foo/、/bar/路径的映射规则,将请求内部跳转至根路径首页,无需调整Ingress配置,但多服务场景下每个服务都需要单独适配路径,维护成本较高。
    • 配置ALB重定向动作,将/foo/、/bar/的请求302跳转至根路径,但该方式会导致用户浏览器地址栏变更为根路径,透明性较差,仅适合临时测试场景。

方案2:切换Nginx Ingress Controller的选型判断

根据实际业务场景选择即可,没有绝对的优劣:

  • 如果业务大量使用路径重写、正则路径匹配、细粒度流量切分、自定义认证等Ingress层高级能力,优先切换为Nginx Ingress Controller。该控制器原生支持nginx.ingress.kubernetes.io/rewrite-target注解,路径重写配置简单,社区生态成熟,这类路径转发问题的排查成本更低。
  • 如果架构已经深度绑定AWS生态,后续需要用到ALB原生的WAF集成、Cognito认证、AWS基础设施原生适配等能力,保留AWS Load Balancer Controller即可,通过上述自定义动作配置完全可以满足路径重写需求,无需强行切换。
配置验证注意事项
  • 应用更新后的Ingress配置后,到AWS控制台查看ALB监听器规则,确认/foo/、/bar/对应的规则已关联「重写路径为/」的动作
  • 验证时清空浏览器缓存,避免历史404响应缓存干扰结果
  • 如果需要同时匹配不带尾斜杠的/foo路径访问,需要额外添加一条path为/foo的转发规则,否则不带尾斜杠的请求仍会匹配失败返回404

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:20:03