AWS EKS配置ALB Ingress多路径路由访问返回404错误修复咨询
你遇到的404错误由以下几个常见配置错误导致,按优先级排查修复即可:
1. 全局健康检查端口配置错误
你当前在Ingress全局注解中写死了健康检查端口为8012,但另外两个后端服务ee-pe、ee-um的服务端口分别是8013、8014,ALB会使用8012端口检查这两个服务的健康状态,必然检查失败,ALB会判定后端不健康、拒绝转发流量,从而返回404。
修复方法
删除Ingress全局注解中的alb.ingress.kubernetes.io/healthcheck-port: '8012'配置,改为给每个Service资源单独配置对应健康检查参数:
- 给
ee-rwdsService添加注解:alb.ingress.kubernetes.io/healthcheck-port: '8012' - 给
ee-peService添加注解:alb.ingress.kubernetes.io/healthcheck-port: '8013' - 给
ee-umService添加注解:alb.ingress.kubernetes.io/healthcheck-port: '8014'
若不同服务的健康检查路径不一样,也可以单独给对应Service配置
alb.ingress.kubernetes.io/healthcheck-path注解。
2. 路径前缀未重写导致后端路由匹配失败
AWS Load Balancer Controller默认会将完整请求路径原封不动转发给后端服务:比如你访问ALB地址/rwds/api/getInfo,转发到ee-rwds服务的路径就是/rwds/api/getInfo,但你直接访问服务时用的是服务IP:8012/api/getInfo不带/rwds前缀,后端服务没有对应前缀的路由就会返回404。
修复方法
在Ingress的annotations中添加路径重写注解,匹配路径的*部分作为转发路径:
alb.ingress.kubernetes.io/rewrite-target: /$1
3. Ingress版本与路径匹配规则问题
你当前使用的networking.k8s.io/v1beta1版本Ingress在K8s 1.19及更高版本中已废弃,路径匹配规则可能不兼容。建议升级为networking.k8s.io/v1版本的Ingress配置,明确指定路径类型:
修复后的Ingress配置示例
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: namespace: ee-be name: ee-ingress annotations: kubernetes.io/ingress.class: "alb" alb.ingress.kubernetes.io/scheme: internet-facing alb.ingress.kubernetes.io/rewrite-target: /$1 # 全局健康检查公共配置,端口、路径按服务单独配在Service上 alb.ingress.kubernetes.io/healthcheck-protocol: HTTP alb.ingress.kubernetes.io/healthcheck-interval-seconds: '15' alb.ingress.kubernetes.io/healthcheck-timeout-seconds: '5' alb.ingress.kubernetes.io/success-codes: '200' alb.ingress.kubernetes.io/healthy-threshold-count: '2' alb.ingress.kubernetes.io/unhealthy-threshold-count: '2' spec: rules: - http: paths: - path: /rwds/* pathType: Prefix backend: service: name: ee-rwds port: number: 8012 - path: /point/* pathType: Prefix backend: service: name: ee-pe port: number: 8013 - path: /user-mgt/* pathType: Prefix backend: service: name: ee-um port: number: 8014
验证方式
配置更新完成后,登录AWS控制台查看对应ALB的Target组,确认所有Target组的健康状态为Healthy后再测试访问即可。
内容的提问来源于stack exchange,提问作者blaCkninJa

