2. 重写配置
重写用于修改请求的URL路径或主机头,不改变请求的实际目的地,仅在Sidecar代理层调整请求信息,适用于路径规范化、兼容旧版接口等场景。支持普通路径重写、正则路径重写(uriRegexRewrite)及主机头重写三种方式,可按需适配不同复杂度的路径调整需求。

2.1 普通路径重写示例
适用于固定前缀、后缀的路径调整,直接指定目标重写路径,配置简洁直观。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: demo-service-vs
namespace: default
spec:
hosts:
- demo-service
http:
- match: # 匹配规则:锁定/old-api前缀流量
- uri:
prefix: /old-api
rewrite: # 重写规则:将路径替换为/api/v1
uri: /api/v1 # 示例:/old-api/user → /api/v1/user
route:
- destination:
host: demo-service
subset: v12.2 正则路径重写(uriRegexRewrite)示例
适用于非固定格式的复杂路径重写,通过正则表达式精准匹配路径结构,再动态替换为目标格式,支持分组引用实现灵活的路径转换,适配接口版本迭代、路径格式优化等场景。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: demo-service-vs
namespace: default
spec:
hosts:
- demo-service
http:
- match:
- uri:
regex: ^/api/(v\d+)/users/(\d+)$ # 匹配路径格式(例:/api/v2/users/123)
rewrite:
uriRegexRewrite:
match: ^/api/(v\d+)/users/(\d+)$ # 正则匹配规则
rewrite: /api/$1/user/$2 # 路径替换模板(转换为:/api/v2/user/123)
route:
- destination:
host: demo-service
subset: v12.2.1 正则分组替换说明
通过正则表达式中的
()定义分组,替换模板中用$1、$2依次引用对应分组内容,支持多分组嵌套和复杂规则组合,满足多样化路径转换需求。上述示例中,
$1匹配版本号(如v2),$2匹配用户ID(如123),可快速将多格式旧路径统一为标准路径,无需逐一路由配置。
2.3 主机头重写示例
用于修改请求的主机头信息,适用于服务别名映射、跨服务透明转发等场景,可配合匹配规则实现精准的主机头调整。
http:
- match: # 匹配/api前缀流量
- uri:
prefix: /api
rewrite: # 重写请求主机头
authority: service-new.default.svc.cluster.local
route:
- destination:
host: demo-service
subset: v12.4 操作注意事项
重写仅作用于Sidecar代理转发环节,客户端收到的响应内容不变,需提前确认后端服务可处理重写后的路径或主机头,避免服务异常。
正则路径重写需严格校验正则语法,建议先在测试环境验证匹配和替换效果,避免线上流量因规则错误被误匹配或漏匹配。
多规则叠加重写时,按配置顺序优先执行,建议为每条重写规则单独配置匹配条件,明确流量范围,避免规则冲突。
作者:叶奕珺 创建时间:2026-01-23 14:41
最后编辑:叶奕珺 更新时间:2026-01-30 18:08
最后编辑:叶奕珺 更新时间:2026-01-30 18:08