服务网格Istio中lua过滤器及测试样例

lua 过滤器

网络过滤器(L3/L4)构成 Envoy 连接处理的核心,envoy更是借助于网络过滤器下的http连接管理器(L7)实现了大量的http特定功能。

除了功能强大的http连接管理器之外,envoy还内置了诸多的http过滤器(L7),用于自定义扩展http请求代理功能,如故障注入外部授权限流等。

其中lua过滤器允许在请求和响应流期间运行 Lua 脚本,该特性为扩展自定义处理流程预留了很大的操作空间。

当前lua过滤器支持的高级特性包括:

  • 在流式传输的请求流和/或响应流中检查头部、正文和尾部。

  • 修改头部和尾部。

  • 阻塞并缓存整个请求/响应正文以进行检查。

  • 对上游主机执行出站异步 HTTP 调用。可以在缓冲正文数据的同时执行此类调用,以便在调用完成时可以修改上游头部。

  • 执行直接响应并跳过后续的过滤器迭代。例如,脚本可以向上游发起 HTTP 身份认证调用,然后直接响应 403 响应码。

配置

API引用参考官网

过滤器在envoy配置中被引用名为envoy.filters.http.lua

基于每条路由的配置全局配置

默认情况下,定义在 inline_code 中的 Lua 脚本会被认定为 GLOBAL 脚本。

 name: envoy.lua
 typed_config:
   "@type": "type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua"
   inline_code: |-
     function envoy_on_request(request_handle)
       -- lua处理脚本
     end
     function envoy_on_response(response_handle)
       -- lua处理脚本
     end
   source_codes:
     hello.lua:
       inline_string: |
         function envoy_on_request(request_handle)
           request_handle:logInfo("Hello World.")
         end
     bye.lua:
       inline_string: |
         function envoy_on_response(response_handle)
           response_handle:logInfo("Bye Bye.")
         end  

过滤器类型为type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua

 {
   "inline_code": "...",
   "source_codes": "{...}"
 }
  • inline_code: 必填项,默认情况下,Envoy 将会在每个引用了lua filter的 HTTP 请求中执行inline_code中的脚本,相当于是无条件匹配

  • source_codes: source_codes中的配置则不会被默认执行,source_codes相当于以Map的方式(key为脚本名称,value为脚本内容)为后续其他地方引用lua脚本提供源头。

    source_codes中的脚本被引用时,将覆盖inline_code中的处理脚本,即执行source_codes中的脚本而不再执行inline_code

基于每条路由的配置

通过在虚拟主机路由加权集群上提供 LuaPerRoute 配置(属性typed_per_filter_config),还可以基于每条路由禁用或覆盖 Lua HTTP 过滤器。

 {
   "disabled": "...",
   "name": "...",
   "source_code": "{...}"
 }
  • disabled: 通

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值