本节将介绍 avi.requests()
函数以及通过 DataScript 配置带外请求处理的步骤。
当虚拟服务收到请求时,可以将整个请求、部分请求或完全不同的请求发送到第三方端点以验证特定条件。对原始请求执行的操作基于因此收到的响应。可以暂停处理某些入站客户端请求,以便通过 DataScript 从外部资源检索信息。
外部资源可以是单个服务器(可能属于第三方实体)或服务器池。服务器可通过 IP 地址或 FQDN 进行访问。
本节将介绍 DataScript avi.requests.xxx
,它支持:
暂停入站客户端请求
配置新的 HTTP 请求 将请求发送到第三方池
等待来自第三方池的响应
恢复初始客户端请求、关闭该请求或使用本地重定向/响应重新发布
确保在 NSX Advanced Load Balancer 中将第三方或外部实体配置为池。
外部请求验证的一些用例包括:
查询 LDAP 以获取属性并将其作为标头插入后端服务器
在向第三方服务器发送信息之前,将令牌名称转换为服务器中的用户名
实时查找数据库,而不是使用静态数据库阻止来自特定国家/地区的用户
函数 |
avi.requests.[get/post/put/head](pool [, server [, port]], URI [, req_args]) |
描述 |
每当入站客户端请求到达 NSX Advanced Load Balancer 时,都会将外部 HTTP 请求发送到 DataScript 中的外部(第三方)服务器。允许暂停客户端请求并配置自定义 HTTP 请求(或转发原始客户端请求),将其发送到第三方资源,等待其响应,然后使用该响应在将初始客户端请求发送到后端服务器时为初始客户端请求做出负载均衡决策。 |
函数 |
HTTP 方法将是函数名称,而不是参数,如下所示:
|
事件 |
|
参数 |
|
返回的值 |
表包含以下值:
|
配置 |
要使用外部请求验证 API,请使用要将外部请求发送到的外部服务器配置新的 Pool 对象: [admin:controller]: > configure vsdatascriptset vsds-external-request [admin:controller]: vsdatascriptset> pool_refs pool-1 [admin:controller]: vsdatascriptset> save
注:
要发送 HTTPS 请求,请使用 SSL 配置文件配置池,并确保服务器端口具有 SSL 端口。 |
示例 |
headers = { Host= "www.example.com:80", Accept= "*/", ["Content-Type"] = "text/html", } req_args = {headers = headers, body = "example body"} -- Pool must have "Lookup server by name" turned on resp = avi.requests.post("pool-1", "www.example.com", "/", req_args) 由于存在可选参数,可以通过多种方式调用 avi.requests.get('pool', '/index.html') avi.requests.get('pool', 'server', '/index.html') avi.requests.get('pool', 'server', 80, '/index.html') avi.requests.get('pool', /index_html', req_args) avi.requests.get('pool', 'server', '/index_html', req_args) avi.requests.get('pool', 'server', 80, '/index.html', req_args) |
配置带外请求处理的步骤
配置池。可以通过多种方式定义/引用外部应用程序。它可以是单个服务器或服务器池。要在 DataScript 中使用外部池,请将该池附加到 VSDataScriptSet 对象。
使用
avi.requests()
函数编写 DataScript。将池与 DataScript 关联
将 DataScript 绑定到需要带外处理的虚拟服务。
带外请求处理中的数据包流场景
让我们考虑客户端请求恢复的数据包流场景。
客户端发送入站请求,这将触发发送带外请求的 DataScript 条件
DataScript 创建 HTTP 请求并将其发送到配置的外部服务器
该服务器提供 HTTP 响应,DataScript 将对其进行评估
根据外部服务器响应处理初始客户端请求后,将客户端请求转发到后端
NSX Advanced Load Balancer 从后端服务器接收响应
NSX Advanced Load Balancer 将后端服务器响应转发到客户端
注意事项
不支持同时发送多个带外请求
不支持异步带外请求
不支持发送分块请求
只能发送 HTTP/1.1 请求