Azure AKS Ingress配置路径规则时返回502 Bad Gateway错误
故障根因
该502故障与后端服务存活状态、readinessProbe配置无关,核心原因有两点:
- 路径转发逻辑不匹配:Application Gateway Ingress Controller(AGIC)默认会将请求的完整路径原样转发给后端服务。你当前Ingress配置的匹配路径为
/myApp/,当你访问网关的/myApp/xxx地址时,网关会把/myApp/xxx这个完整路径发给后端Pod,但你的ASP.NET Core应用实际只配置了不带/myApp前缀的路由(比如直接监听/api/home),后端无法匹配对应路由返回404,网关就会抛出502 Bad Gateway。之前配置根路径/时不存在多余前缀,所以访问正常,和你描述的“非根路径必现502”现象完全吻合。 - 健康检查结果不代表业务转发正常:你单独配置了
appgw.ingress.kubernetes.io/health-probe-path: "/api/home",网关的健康探测逻辑是直接请求后端IP的/api/home路径,不会带上/myApp前缀,所以探测返回200正常,但实际业务请求携带前缀转发后就会失败。
修复方案
二选一即可解决问题:
方案1:网关层配置路径重写(推荐,无代码侵入)
不需要修改应用代码,直接在Ingress注解中添加路径重写规则,让网关转发前自动去掉路径前缀即可。
修改Ingress资源的metadata.annotations段,添加后端路径前缀配置:
annotations: kubernetes.io/ingress.class: azure/application-gateway appgw.ingress.kubernetes.io/health-probe-path: "/api/home" # 新增以下注解,将匹配到的/myApp/前缀替换为/再转发 appgw.ingress.kubernetes.io/backend-path-prefix: "/"
配置生效后,访问http://<网关IP>/myApp/api/home时,网关转发给后端的路径会自动变为/api/home,和应用的路由规则完全匹配。
注意:你当前配置的pathType: Exact仅会精确匹配路径完全等于/myApp/的请求,所有/myApp/下的子接口(比如/myApp/api/home)都不会命中规则,如果需要代理该路径下的所有资源,请将pathType修改为Prefix。
方案2:应用层配置路径基址
如果不想在网关做重写,可以直接修改ASP.NET Core应用的配置,让应用本身识别/myApp路径前缀。
在Deployment的容器环境变量段添加PathBase配置:
env: - name: ASPNETCORE_HOSTINGSTARTUPASSEMBLIES value: "Microsoft.AspNetCore.ApplicationInsights.HostingStartup" - name: "ApplicationInsights__ConnectionString" value: "myKey" # 新增以下环境变量,配置应用的路径基址 - name: ASPNETCORE_PATHBASE value: "/myApp"
配置后应用会自动将/myApp作为根路径处理,带前缀的请求可以正常匹配路由。
额外排查项
如果配置完成后仍有异常,逐一检查以下配置:
- 检查Pod运行状态:执行
kubectl describe pod -n en02 <myApp对应的pod名>查看是否有OOMKill重启记录,你当前配置的内存limit仅为64Mi,ASP.NET Core应用启动内存通常高于这个阈值,资源不足导致的进程中断也会触发502,如有OOM记录请将内存limit调整到256Mi以上。 - 检查Service端口映射:确认Service的
targetPort和容器暴露的containerPort一致,你当前配置的两个端口都是5100,这部分配置无问题。 - 检查Application Gateway后端池配置:确认AGIC自动同步的后端池地址对应Pod的IP,端口为5100,没有配置错误的端口映射。
内容的提问来源于stack exchange,提问作者Shubham Goel
相关产品推荐
相关产品推荐

