Istio VirtualService带路径参数的URI重写语法咨询
带路径参数的URI重写正确语法及配置修正
要实现你需要的URI重写,Istio里得结合正则匹配+捕获组来保留动态路径参数,以下是具体修正方案:
1. 修正匹配规则
你原来的正则/my-service/requests/.*/history存在过度匹配的问题(会误匹配包含多段路径的URI),应该用精准的正则来捕获单个路径段的requestId:
match: - uri: regex: "^/my-service/requests/([^/]+)/history$" ignoreUriCase: true
^和$锚定整个URI,确保完全匹配目标格式([^/]+)是捕获组,专门提取requestId(匹配除斜杠外的任意字符,保证只取单个路径段)
2. 修正重写规则
重写时通过\1引用前面捕获到的requestId值,就能保留动态参数完成路径改写:
rewrite: uri: "/requests/\1/history"
完整修正后的VirtualService配置
注意:YAML不支持//注释,已替换为标准的#注释:
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: my-service namespace: world spec: hosts: - "*" gateways: - internal-gateway.istio-system http: - match: - uri: prefix: "/my-service/requests/send" ignoreUriCase: true rewrite: uri: "/requests/send" route: - destination: host: my-service.world.svc.cluster.local port: number: 8080 - match: - uri: regex: "^/my-service/requests/([^/]+)/history$" # 精准匹配带requestId的路径 ignoreUriCase: true rewrite: uri: "/requests/\1/history" # 引用捕获组保留requestId完成重写 route: - destination: host: my-service.world.svc.cluster.local port: number: 8080
内容的提问来源于stack exchange,提问作者LubošCZ
相关产品推荐
相关产品推荐

