AWS EKS Fargate集群ALB Ingress Controller路径跳转404问题求助
问题根因
- 路径透传问题:当前Ingress配置将
/foo路径完整透传给后端Nginx服务,而Nginx默认未配置/foo路径的路由规则,因此收到/foo请求时直接返回404 - 路径匹配规则不完整:当前配置的
path: /foo仅匹配严格前缀为/foo的请求,若需匹配/foo、/foo/bar等所有/foo开头的请求,需要调整路径规则适配 - 缺少路径重写配置:你注释掉了
alb.ingress.kubernetes.io/rewrite-target注解,未开启路径重写,导致Nginx收到的请求路径始终带有/foo前缀,无法匹配根路径下的资源
解决方案
方案1:配置Ingress路径重写(推荐,无需修改业务服务配置)
修改Ingress配置,调整路径匹配规则并开启路径重写,示例如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: "nginx-ingress" namespace: "default" annotations: kubernetes.io/ingress.class: alb alb.ingress.kubernetes.io/scheme: internet-facing alb.ingress.kubernetes.io/security-groups: sg-014b302d73097d083 # 开启路径重写:把/foo/xxx格式的请求重写为/xxx转发给后端Nginx alb.ingress.kubernetes.io/rewrite-target: /$2 labels: app: nginx-ingress spec: rules: - http: paths: - path: /foo(/|$)(.*) pathType: Prefix backend: service: name: "nginx-service" port: number: 80 - path: /* pathType: Prefix backend: service: name: "mydocker-svc" port: number: 8080
配置修改完成后执行kubectl apply -f <你的ingress配置文件路径>,等待2-3分钟让ALB规则同步完成,即可同时正常访问两个服务:
- 访问
http://<ALB地址>/foo、http://<ALB地址>/foo/xxx走Nginx服务 - 访问其他路径走mydocker-svc服务
方案2:适配服务前缀路径
如果不想修改Ingress配置,可以直接调整Nginx服务的配置,新增/foo前缀路径的路由规则,将/foo路径映射到对应的资源目录即可。
额外建议
你当前使用的v1.1.8版本ALB Ingress Controller已经停止维护,建议后续升级到AWS Load Balancer Controller v2以上版本,可适配更高版本EKS集群,同时支持更多负载均衡特性。
如果配置后仍然异常,可通过命令kubectl logs -n kube-system deployment/alb-ingress-controller查看控制器日志排查具体问题。
内容的提问来源于stack exchange,提问作者vinod827
相关产品推荐
相关产品推荐

