4.3.4. 在 3scale 自定义策略中包含外部 Lua 依赖项

您可以将外部 Lua 依赖项添加到自定义策略中,以便 APIcast 可以使用 3scale 镜像中没有的 Lua 库。

此处的步骤演示了如何使用自定义策略示例来将响应正文从 JSON 转换为 XML。自定义策略示例需要 xml2lua XML 解析器,该解析器使用 Lua 编写。完整的示例显示了用于构建和测试的简短示例,但您无法仅遵循示例过程来部署自定义策略。要部署具有外部 Lua 依赖项的自定义策略,您必须执行此流程中的步骤,以及在另一个 OpenShift Container Platform 中将自定义策略添加到 3scale

JSON 到 XML 自定义策略只是示例。它不可用于生产环境。

先决条件

  • 3scale 自定义策略
  • 访问外部 Lua 库

步骤

  1. 在包含自定义策略的目录中,添加一个可识别外部 Lua 库的文件。

    文件的名称必须是 Roverfile。在 JSON 到 XML 自定义 策略示例中,Roverfile 具有此内容:

    luarocks {
    	group 'production' {
    		module { 'xml2lua' },
    	}
    }

    lua-rover 是一个 LuaRocks 的 wrapper ,lua-rover 提供依赖项的传递锁定。LuaRocks 是 Lua 模块的软件包管理器。

  2. 在包含自定义策略的目录中,添加一个 lua-rover 锁定文件。

    文件的名称必须是 Roverfile.lock。在 JSON to XML 自定义策略示例中,Roverfile.lock 具有此内容:

    xml2lua 1.5-2||productionbash-4.4

    RoverfileRoverfile.lock 一起启用 APIcast 或 3scale 操作器来获取依赖的库。

  3. 在定义自定义策略的文件中,添加一行来指定 Lua 依赖项。JSON to XML 自定义策略示例指定这一行:

    local xml2lua = require("xml2lua")
  4. 在用于构建自定义策略的 Dockerfile 中,复制 RoverfileRoverfile.lock,并运行 rover installJSON to XML 自定义策略示例将以下行添加到其 Dockerfile 中:

    COPY Roverfile .
    COPY Roverfile.lock .
    
    RUN rover install --roverfile=/opt/app-root/src/Roverfile

    您的 Dockerfile 可以使用 APIcast 或 3scale operator 来构建策略。

  5. 在自定义策略的 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.11 -t $(TARGET_IMAGE)

后续步骤

部署具有外部 Lua 依赖项的自定义策略的其余步骤与部署其他自定义策略的步骤相同。也就是说,您需要将镜像推送到存储库,并将 APIcast 镜像替换为您刚才构建的镜像。