Lua 集群指定器
概述
HTTP Lua 集群指定器允许 Lua 脚本在请求流期间选择路由器集群。
配置
此过滤器应使用类型 URL
type.googleapis.com/envoy.extensions.router.cluster_specifiers.lua.v3.LuaConfig
配置。
Lua 集群的简单示例配置
1 prefix: "/"
2 route:
3 inline_cluster_specifier_plugin:
4 extension:
5 name: envoy.router.cluster_specifier_plugin.lua
6 typed_config:
7 "@type": type.googleapis.com/envoy.extensions.router.cluster_specifiers.lua.v3.LuaConfig
8 source_code:
9 inline_string: |
10 function envoy_on_route(route_handle)
11 local header_value = route_handle:headers():get("header_key")
12 if header_value == "fake" then
13 return "fake_cluster"
14 end
15 return "example_cluster"
16 end
17 default_cluster: example_cluster
18 http_filters:
19 - name: envoy.filters.http.router
在 source_code 中定义的 Lua 脚本将被执行以选择路由的集群。
它还可以根据匹配的请求头选择集群。
如果 Lua 脚本的执行导致失败,将使用 default_cluster。
完整示例
使用 Docker 的完整示例在 Lua 集群指定器沙箱 中提供。
路由句柄 API
当 Envoy 加载配置中的脚本时,它会查找脚本定义的全局函数
function envoy_on_route(route_handle)
end
遵循路由路径,Envoy 将运行 envoy_on_route
作为协程,并将句柄传递给路由 API。
流句柄支持以下方法
headers()
local headers = route_handle:headers()
返回流的头。这些头可用于选择特定集群。
返回 header 对象。
头对象 API
get()
headers:get(key)
此方法获取头。
key
是一个字符串,指定头键。
返回包含头值的字符串,或者如果头不存在,则返回 nil
。
如果在同一个不区分大小写的键中有多个头,它们的 value 将被连接到以 ,
分隔的字符串中。