NSX Advanced Load Balancer 直接通过 GUI、CLI 或 API 进行配置。但有时本机功能集可能不够强大,无法满足特定用例的需求。为此,NSX Advanced Load Balancer 提供了 DataScript,它是一种基于 Lua 的脚本环境,能够向 NSX Advanced Load Balancer 功能添加显著的可扩展性。

DataScript 是策略的高级版本,允许检查和处理客户端和服务器流量。DataScript 用于检查客户端 HTTP 请求或服务器 HTTP 响应,并执行内容切换、重定向、标头操作、日志记录等。DataScript 脚本语言基于嵌入式 Lua 解释器构建,添加了特定于 NSX Advanced Load Balancer 的其他库以扩展其功能。基本 DataScript 语法基于 Lua,并添加了可用于 NSX Advanced Load Balancer 特定任务的命令(称为函数)。有关 Lua 脚本语法和用法的深入帮助,请参阅 www.lua.org

DataScript 在数据平面上执行,而该数据平面需位于托管该 DataScript 已附加到的虚拟服务的服务引擎上。DataScript 与 ControlScript 不同,后者是基于 Python 的脚本编写工具,用于控制平面的自动化并从 NSX Advanced Load Balancer 控制器 执行。典型的 DataScript 通常采用某种形式的 if / then 逻辑,类似于策略的匹配/操作逻辑。

path = avi.http.get_path()
if string.beginswith(path, "/docs/") then
   avi.redirect("http://docs.avinetworks.com/index.html")
end
注:

NSX Advanced Load Balancer 中,DataScript 尚不支持 IPv6。

  • DataScript 事件:每个 DataScript 将在触发事件时(例如,在 zxz 虚拟服务收到 HTTP 请求或 HTTP 响应时)执行。必须在一个或多个事件中执行 DataScript。

  • DataScript 构造运算符:DataScript 可以使用运算符,这些运算符可以是关系运算符、逻辑运算符或算术运算符。

  • DataScript 函数:函数是特定于 NSX Advanced Load Balancer 的命令,例如 HTTP 重定向或关闭客户端连接。

    Datascript 包含两种类型的函数,分别为 L4 DataScript 函数和 L7 DataScript 函数。

  • 执行优先级:DataScript 与 NSX Advanced Load Balancer 中的其他功能有着复杂的关系。当有多个 DataScript 附加到虚拟服务时,或者策略和其他功能与 DataScript 有冲突时,请务必了解执行优先级的顺序。

  • 故障排除:DataScript 在配置时可能无法保存或加载,或者在创建时可能没有出现任何问题,但在应用于流量时无法执行。