如何使用AGIC配置AKS Ingress,解决应用子请求路径前缀缺失问题?
解决AGIC下应用路径前缀的资源加载问题
你遇到的核心问题是:应用发起的静态资源请求是绝对路径(不带/store前缀),但AGIC默认只会路由匹配/store的请求,导致资源请求404。由于不能修改应用代码,必须用AGIC原生支持的路径重写方案来解决,不能用Nginx Ingress的注解。
正确配置步骤
AGIC通过RewriteRuleSet自定义资源(CRD)实现路径重写,以下是完整配置:
创建路径重写规则集
定义一个RewriteRuleSet,将所有/store/xxx格式的请求重写为/xxx,传给后端应用:apiVersion: networking.azure.com/v1 kind: RewriteRuleSet metadata: name: store-rewrite-rules namespace: default # 替换为你的应用命名空间 spec: rewriteRules: - ruleSequence: 100 conditions: - variable: Request_URI pattern: ^/store/(.*) ignoreCase: true action: type: UrlRewrite urlRewrite: modifiedPath: /{R:1} queryString: {originalQueryString} preserveUnmatchedPath: true更新Ingress配置
在Ingress中引用上述规则集,并设置路径为Prefix类型,确保所有以/store开头的请求都被路由到后端:apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: store-front annotations: kubernetes.io/ingress.class: azure/application-gateway appgw.ingress.kubernetes.io/rewrite-rule-set: store-rewrite-rules spec: rules: - http: paths: - path: /store pathType: Prefix backend: service: name: store-front port: number: 80
配置说明
- RewriteRuleSet规则:匹配请求路径中以
/store/开头的部分,将/store/后的内容保留,重写为根路径下的对应资源(比如/store/css/style.css→/css/style.css)。 - Ingress路径类型:使用
Prefix而非Exact,确保所有以/store开头的请求(包括初始页面和后续资源请求)都能被路由到目标服务。 - 注解兼容性:
appgw.ingress.kubernetes.io/rewrite-rule-set是AGIC专属注解,替代Nginx的rewrite-target,确保配置能被应用网关正确识别。
验证配置
部署上述资源后,等待AGIC同步配置到应用网关,然后:
- 访问
<PUBLIC_IP>/store,确认初始页面加载正常。 - 查看浏览器开发者工具的网络请求,检查CSS/JS资源的请求路径是否为
<PUBLIC_IP>/store/xxx,且返回200状态码。
内容的提问来源于stack exchange,提问作者KungWaz
相关产品推荐
相关产品推荐

