Sidecar和网关使用x-request-id
头部来唯一标识请求。对于所有来自集群外部的请求,Sidecar和网关都将自动为请求生成一个x-request-id
头部(若请求已经带有此头部,则默认原头部信息会被清除)。对于集群内部尚未含有此头部的请求,网关和Sidecar也会进行自动生成。
前提条件
已部署入口网关。具体操作,请参见创建入口网关。
已在数据面集群部署httpbin服务。具体操作,请参见部署httpbin应用。
配置字段
CustomRequestId
支持从以下三个角度变更行为:
是否自动生成
x-request-id
是否保留外部请求中已经存在的
x-request-id
是否在请求的响应头中设置
x-request-id
名称 | 数据类型 | 填写要求 | 默认值 | 描述 |
generate_request_id | string 可选值"true"和"false" | 选填 | "true" | 配置是否自动生成 |
preserve_external_request_id | string 可选值"true"和"false" | 选填 | "true" | 配置是否保留外部请求中已经存在的 |
always_set_request_id_in_response | string 可选值"true"和"false" | 选填 | "true" | 配置是否在请求的响应头中设置 |
配置示例
配置在响应头中返回x-request-id
进入插件配置页签,启用本插件CustomRequestId
,插件生效范围选择网关生效,并点击下方的添加网关生效范围,选择插件生效的网关。插件配置使用如下配置:
generate_request_id: 'true'
preserve_external_request_id: 'false'
always_set_request_id_in_response: 'true'
执行以下命令,查看响应头部:
curl {ASM网关ip}/get -I
预期输出:
HTTP/1.1 200 OK
server: istio-envoy
date: Thu, xx xxx 202x 0x:3x:3x GMT
content-type: application/json
content-length: 524
access-control-allow-origin: *
access-control-allow-credentials: true
x-envoy-upstream-service-time: 1
x-request-id: 9ba63dbf-91eb-458a-adb4-61xxxxxxxx
可以在响应头中看到为请求自动生成的x-request-id
。可以利用此能力在问题调试时定位异常请求。
配置停止自动生成x-request-id
将插件配置变更为以下配置
generate_request_id: 'false'
preserve_external_request_id: 'false'
always_set_request_id_in_response: 'true'
执行以下命令,查看响应头部:
curl {ASM网关ip}/get -I
预期输出:
HTTP/1.1 200 OK
server: istio-envoy
date: Thu, xx xxx 202x 0x:3x:3x GMT
content-type: application/json
content-length: 524
access-control-allow-origin: *
access-control-allow-credentials: true
x-envoy-upstream-service-time: 1
可以看到网关已经不再为请求自动生成x-request-id
。
配置保留外部请求中自带的x-request-id
将插件配置变更为以下配置
generate_request_id: 'true'
preserve_external_request_id: 'true'
always_set_request_id_in_response: 'true'
执行以下命令,查看响应头部:
curl {ASM网关ip}/get -I -H "x-request-id:test"
预期输出:
HTTP/1.1 200 OK
server: istio-envoy
date: Thu, xx xxx 202x 0x:3x:3x GMT
content-type: application/json
content-length: 524
access-control-allow-origin: *
access-control-allow-credentials: true
x-envoy-upstream-service-time: 1
x-request-id: test
可以看到网关为请求保留了外部传入的x-request-id
,而没有再自己生成一个。