配置 Sidecar 过滤器

最近更新时间:2024-01-29 14:39:41

我的收藏

操作场景

Service Mesh 应用支持在 Sidecar 上运行用户自定义的 Lua 脚本的能力,用户可以自定义一些业务逻辑放在 Sidecar 上执行,来实现一些自定义的业务逻辑(例如在请求头中添加参数、设置服务路由规则等)。配置 Sidecar 过滤器可以大大加强 Mesh 应用的灵活性。

操作步骤

新建过滤器

1. 登录 TSF 控制台
2. 在左侧导航栏选择应用管理,单击目标应用的 ID,进入应用详情页。
3. 访问 Sidecar过滤器页面,新建过滤器。
填写过滤器名称以及备注。
填写过滤器作用位置。
作为服务端是指:该脚本将在部署组运行启动的微服务作为服务端时生效。
作为客户端是指:该脚本将在部署组运行启动的微服务作为客户端的时候生效。当选择过滤器位置为客户端时,需要填写被调用的微服务的名称。仅当调用被调服务的时候,过滤器会生效。
填写脚本内容。脚本需要严格按照 Lua 脚本的格式进行书写。
说明
Lua 脚本最大为65535字节。
已经下线的过滤器才能删除。
编辑后的 Lua 脚本,需要再次发布之后才能生效。 以下为微服务作为客户端时,向请求头中添加两个字段并返回请求体大小的示例:
function envoy_on_request(request_handle)
request_handle:headers():add("foo", "bar")
end
function envoy_on_response(response_handle)
body_size = response_handle:body():length()
response_handle:headers():add("response-body-size", tostring(body_size))
end
说明
以下为微服务作为服务端时,设置请求响应延迟的示例,该脚本从 HTTP 请求头 header 中读取 x-delay-percent 和 x-delay-duration 字段,然后根据这些字段的值决定是否注入延迟。如果随机数小于 x-delay-percent,则注入延迟(单位:毫秒)。

function envoy_on_request(request_handle)
--自定义部分,定义延迟概率和延迟时间的请求头
local delay_percent = tonumber(request_handle:headers():get("x-delay-percent"))
local delay_duration = tonumber(request_handle:headers():get("x-delay-duration"))

if delay_percent and delay_duration then
local random_value = math.random(100)
if random_value < delay_percent then
request_handle:logInfo("Injecting delay for " .. delay_duration .. " ms")
os.execute("sleep " .. tostring(delay_duration / 1000))
end
end
end

function envoy_on_response(response_handle)
--自定义部分
end
有关 Lua 脚本更多的书写原则,可以参见 Envoy 使用文档
4. 单击提交,完成创建。

发布过滤器

创建好的过滤器需要发布才能生效。当前 TSF 支持将同一个过滤器发布到多个部署组上,或将某一个过滤器下线。过滤器也可以发布在离线状态的部署组上,当部署组启动时会将过滤器加载。
在Sidecar过滤器列表页面,单击操作列的发布,勾选要发布的部署组,单击确认,完成发布。