Lua 集群指定器

概述

HTTP Lua 集群指定器允许 Lua 脚本在请求流期间选择路由器集群。

注意

LuaJIT 用作运行时。

这意味着目前支持的 Lua 版本主要是 5.1,具有一些 5.2 特性。

有关更多详细信息,请参见 LuaJIT 文档

配置

  • 此过滤器应使用类型 URL type.googleapis.com/envoy.extensions.router.cluster_specifiers.lua.v3.LuaConfig 配置。

  • v3 API 参考

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 将被连接到以 , 分隔的字符串中。