如何在Istio VirtualService中添加自定义HTTP请求头及使用动态取值
结论
Istio 1.10.0版本完全支持添加请求头,也支持从现有请求属性中动态取值,不需要额外扩展组件。
配置调整方法
你只需要在原有VirtualService的route.headers配置块下,新增request字段配置请求头操作即可,动态取值使用%REQ(目标请求头名称)%的Envoy表达式语法即可。
调整后的完整配置如下:
apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: annotations: helm.sh/hook: pre-install, pre-upgrade creationTimestamp: "2021-11-22T13:01:36Z" generation: 8 name: direct-vs namespace: cvrm resourceVersion: "72069" selfLink: /apis/networking.istio.io/v1beta1/namespaces/cvrm/virtualservices/cvrm-direct-vs uid: d398a13e-fd81-4ada-8e36-617287cae1bc spec: gateways: - gateway.istio-system.svc.cluster.local hosts: - '*' http: - match: - uri: prefix: /console route: - destination: host: console-bs.cvrm.svc.cluster.local port: number: 8087 headers: # 新增请求头操作配置 request: add: X-Forwarded-Host: "%REQ(Host)%" X-Forwarded-Port: "9090" X-Forwarded-Proto: "http" # 原有响应头配置保持不变 response: add: Custom-Header: test
注意事项
- 动态取值语法不区分请求头名称大小写,取值为空时会填充空字符串
- 如果需要覆盖请求中已存在的同名头,将
add替换为set即可,add默认是在原有头值后追加新值 - 除了请求头之外,你也可以使用其他Envoy内置属性实现更丰富的动态取值,例如客户端IP可以用
%DOWNSTREAM_REMOTE_ADDRESS_WITHOUT_PORT%,请求路径用%REQ(:PATH)%
内容的提问来源于stack exchange,提问作者Shankar Vignesh
相关产品推荐
相关产品推荐

