CustomRequestId插件

Sidecar和网关使用x-request-id头部来唯一标识请求。对于所有来自集群外部的请求,Sidecar和网关都将自动为请求生成一个x-request-id头部(若请求已经带有此头部,则默认原头部信息会被清除)。对于集群内部尚未含有此头部的请求,网关和Sidecar也会进行自动生成。

前提条件

配置字段

CustomRequestId支持从以下三个角度变更行为:

  • 是否自动生成x-request-id

  • 是否保留外部请求中已经存在的x-request-id

  • 是否在请求的响应头中设置x-request-id

名称

数据类型

填写要求

默认值

描述

generate_request_id

string

可选值"true"和"false"

选填

"true"

配置是否自动生成x-request-id

preserve_external_request_id

string

可选值"true"和"false"

选填

"true"

配置是否保留外部请求中已经存在的x-request-id

always_set_request_id_in_response

string

可选值"true"和"false"

选填

"true"

配置是否在请求的响应头中设置x-request-id

配置示例

配置在响应头中返回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,而没有再自己生成一个。