4.4. 自定义 3scale API 管理 APIcast 策略
配置自定义策略以修改 APIcast 行为。首先,定义一个策略链来配置 APIcast 策略,包括您的自定义策略;然后,将策略链添加到 APIcast。
红帽 3scale 提供了一种添加自定义策略的方法,但不支持自定义策略。
APIcast 的自定义策略取决于您的 3scale 部署的配置:
- 将自定义策略添加到这些 APIcast 自我管理部署中:OpenShift 上的 APIcast,以及您安装的容器化环境中的 APIcast。
- 您无法将自定义策略添加到 APIcast 托管。
切勿直接在生产网关上进行策略更改。始终测试您的更改。
4.4.1. 关于 3scale API 管理 APIcast 部署的自定义策略
您可以完全创建自定义 APIcast 策略,或修改标准策略。
要创建自定义策略,您必须了解以下内容:
- 策略用 Lua 编写。
- 策略必须遵循,并且必须放在正确的文件目录中。
- 策略行为受到策略链中的放置方式的影响。
- 完全支持添加自定义策略的接口,但不支持自定义策略本身。
要在 3scale API 管理实例中添加自定义策略,请参阅使用 3scale API Management operator 注入自定义策略。
4.4.2. 在另一个 OpenShift Container Platform 中添加自定义策略到 3scale API 管理
您可以通过从集成的 OpenShift Container Platform 注册表获取包含自定义策略的镜像,将自定义策略添加到 OpenShift Container Platform (OCP)上的 APIcast。
流程
- 使用 3scale API 管理操作器注入自定义策略。
- 如果您没有在 OpenShift 主集群中部署 APIcast 网关,请 建立对主 OpenShift 集群上的内部注册表的访问。
- 下载 3scale 2.15 APIcast OpenShift 模板。
要修改模板,请将默认
镜像
目录替换为内部注册表中的完整镜像名称。image: <registry>/<project>/amp-apicast:latest
使用 OpenShift 模板部署 APIcast,并指定您的自定义镜像:
$ oc new-app -f customizedApicast.yml
当自定义策略添加到 APIcast 并构建新镜像时,当 APIcast 使用镜像部署时,这些策略将自动显示在管理门户中。现有服务可以在可用策略列表中看到此新策略,因此可以在任何策略链中使用。
从镜像中删除自定义策略并重启 APIcast 时,该策略将不再在列表中可用,因此您无法再将它添加到策略链中。
4.4.3. 在 3scale API 管理自定义策略中包含外部 Lua 依赖项
您可以将外部 Lua 依赖项添加到自定义策略中,以便 APIcast 可以使用 3scale 镜像中没有的 Lua 库。
此处的步骤演示了如何使用自定义策略示例来将响应正文从 JSON 转换为 XML。自定义策略示例需要 xml2lua
XML 解析器,该解析器使用 Lua 编写。完整的示例显示了用于构建和测试的简短示例,但您无法仅遵循示例过程来部署自定义策略。要部署具有外部 Lua 依赖项的自定义策略,您必须执行此流程中的步骤,并在 另一个 OpenShift Container Platform 中将自定义策略添加到 3scale API 管理。
JSON 到 XML
自定义策略只是示例。它不可用于生产环境。
先决条件
- 3scale 自定义策略。
- 访问外部 Lua 库。
流程
在包含自定义策略的目录中,添加一个可识别外部 Lua 库的文件。
文件的名称必须是
Roverfile
。在JSON 到 XML 自定义
策略示例中,Roverfile
具有此内容:luarocks { group 'production' { module { 'xml2lua' }, } }
lua-rover
是 LuaRocks 的一个打包程序。lua-rover
为依赖项提供传输锁定。LuaRocks 是 Lua 模块的软件包管理器。在包含自定义策略的目录中,添加一个
lua-rover
锁定文件。文件的名称必须是
Roverfile.lock
。在JSON to XML
自定义策略示例中,Roverfile.lock
具有此内容:xml2lua 1.5-2||productionbash-4.4
Roverfile
和Roverfile.lock
一起启用 APIcast 或 3scale 操作器来获取依赖的库。在定义自定义策略的文件中,添加一行来指定 Lua 依赖项。
JSON to XML
自定义策略示例指定这一行:local xml2lua = require("xml2lua")
在用于构建自定义策略的 Dockerfile 中,复制
Roverfile
和Roverfile.lock
,并运行 roverinstall
。JSON to XML
自定义策略示例将以下行添加到其 Dockerfile 中:COPY Roverfile . COPY Roverfile.lock . RUN rover install --roverfile=/opt/app-root/src/Roverfile
您的 Dockerfile 可以使用 APIcast 或 3scale operator 来构建策略。
在自定义策略的
Makefile
中,指定任何自定义策略的build
目标。例如,
构建
目标可能类似如下:TARGET_IMAGE="apicast/json_to_xml:latest" # IP="http://localhost:8080" build: docker build . --build-arg IMAGE=registry.redhat.io/3scale-amp2/apicast-gateway-rhel8:3scale2.15 -t $(TARGET_IMAGE)
后续步骤
部署具有外部 Lua 依赖项的自定义策略的其余步骤与部署其他自定义策略的步骤相同。也就是说,您需要将镜像推送到存储库,并将 APIcast 镜像替换为您刚才构建的镜像。