ALB Ingress Controller路径路由仅/*生效 /app1等路径返回404问题求助
问题根因与解决方案
核心原因:ALB默认透传完整请求路径,后端服务无对应前缀路由
你当前配置的Ingress规则仅指定了ALB的路径匹配逻辑,默认ALB会将完整的请求路径直接透传给后端服务:
- 访问
https://my-domain-name/app1时,请求路径/app1会直接转发给app1-service - 若app1-service本身的路由部署在根路径
/下,没有适配/app1前缀的路由,就会直接返回404错误 - 你访问
/app3正常是因为该路径刚好匹配/*规则,透传给app3-service后,app3-service本身存在/app3路径的路由
解决方案
方案1:配置路径重写规则(推荐)
在Ingress的annotations中添加重写注解,将/app1、/app2前缀从转发路径中移除,适配后端服务的根路径路由:
- 新增重写注解
annotations: # 新增以下注解,将匹配到的路径后缀重写到根路径 alb.ingress.kubernetes.io/rewrite-target: /$2
- 修改路径匹配规则
spec: rules: - http: paths: - path: /app1(/|$)(.*) pathType: Prefix backend: service: name: app1-service port: number: 30002 - path: /app2(/|$)(.*) pathType: Prefix backend: service: name: app2-service port: number: 3030 - path: / pathType: Prefix backend: service: name: app3-service port: number: 443
修改后,访问https://my-domain-name/app1/xxx会被转发到app1-service的/xxx路径,适配后端服务的路由规则。
方案2:修改后端服务路由前缀
如果不方便修改Ingress配置,可以直接调整app1、app2服务的路由,让其适配/app1、/app2前缀即可。
额外检查项
- 检查你的Ingress YAML格式是否正确,原配置中
- path: /*的缩进比前两条路径规则多了1个空格,属于语法错误,可能导致规则解析异常 - 原配置中
/*配pathType: Prefix不符合K8s Ingress规范,Prefix类型路径不需要带通配符,改为path: /+pathType: Prefix即可 - 可以直接在集群内执行
curl <app1-service集群IP>:30002/app1验证后端服务是否本身支持该前缀路径,排除服务本身的问题
内容的提问来源于stack exchange,提问作者Gowmi
相关产品推荐
相关产品推荐

