智能代理Envoy支持基于Lua的过滤器扩展,可以通过定义为Lua过滤器的响应处理程序来完成对请求或响应的操作。Lua过滤器基本上是一个Lua代码片段,它是为每个注册的请求或响应执行的。使用Istio,可以集中配置Lua过滤器,并将其分发到相应的Envoy实例。
Istio提供的EnvoyFilter对象描述了针对Envoy代理的过滤器,这些过滤器可以定制由Istio Pilot生成的代理配置。这一功能一定要谨慎使用,错误的配置内容一旦完成传播,可能会令整个服务网格进入瘫痪状态。
当Envoy在配置中加载脚本时,它会查找脚本定义的两个全局函数如下所示:
function envoy_on_request(request_handle) end function envoy_on_response(response_handle) end
一个脚本可以定义这两个函数中的一个或者两个。在请求路径中,Envoy将作为一个协程运行envoy_on_request,传递一个API句柄。在响应路径中,Envoy将作为一个协程运行envoy_on_response,传递一个API句柄。
Lua脚本的编写在此不做赘述,具体可以参加官方文档:https://www.envoyproxy.io/docs/envoy/latest/conf iguration/http_f ilters/lua_f ilter