Kubernetes Ingress如何仅传递子路径到后端,剔除路径前缀
Azure AGIC Ingress 移除路径前缀配置方案
你使用的Azure Application Gateway Ingress Controller(AGIC)默认会透传完整请求路径到后端服务,因此会出现/abc前缀被一起转发的问题。要实现myhost.net/abc/*转发到后端/*的需求,通过添加AGIC专属的重写规则注解即可实现,修改后的完整配置如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: appgw.ingress.kubernetes.io/connection-draining: "true" appgw.ingress.kubernetes.io/connection-draining-timeout: "30" appgw.ingress.kubernetes.io/request-timeout: "300" appgw.ingress.kubernetes.io/health-probe-status-codes: "200-399, 401" kubernetes.io/ingress.class: azure/application-gateway # 新增重写规则注解 appgw.ingress.kubernetes.io/rewrite-rule: | - source: /abc/(.*) destination: /$1 name: serviceAingress namespace: pantry-services spec: rules: - host: myhost.net http: paths: - backend: service: name: serviceA port: number: 8083 path: /abc/* pathType: Prefix
配置说明
- 新增的
appgw.ingress.kubernetes.io/rewrite-rule是AGIC提供的原生重写配置,规则会提取/abc/后的所有路径片段,重写为根路径下的对应地址,原请求myhost.net/abc/xyz会转发到后端服务的/xyz路径 - 适配了新版Ingress的
networking.k8s.io/v1API版本,废弃了老旧的extensions/v1beta1版本,兼容性更好 - 简化了路径配置,仅保留
/abc/*一条匹配规则即可覆盖所有带/abc前缀的请求
如果你的AGIC版本低于1.4.0,不支持直接通过注解定义重写规则,可以先在绑定的Azure Application Gateway中手动创建重写规则集:
- 规则匹配路径模式为
/abc/* - 重写路径设置为
/{path:2} - 完成后在Ingress注解中添加
appgw.ingress.kubernetes.io/rewrite-rule-set: <你的重写规则集名称>即可生效
内容的提问来源于stack exchange,提问作者Jerald Baker
相关产品推荐
相关产品推荐

