Menu Close

2.8.2. 使用 3scale Operator 注入自定义虚拟环境

在使用嵌入式 APIcast 的 3scale 安装中,您可以使用 3scale 操作器注入自定义环境。嵌入式 APIcast 也称为受管或托管 APIcast。自定义环境定义 APIcast 适用于网关服务的所有上游 API 的行为。要创建自定义环境,请在 Lua 代码中定义全局配置。

您可在 3scale 安装前或之后注入自定义环境。在注入自定义环境并在 3scale 安装后,您可以删除自定义环境。3scale 操作器协调更改。

先决条件

  • 已安装 3scale Operator。

流程

  1. 编写用于定义您要注入的自定义环境的 Lua 代码。例如,以下 env1.lua 文件显示了 3scale 操作器为所有服务加载的自定义日志策略。

    local cjson = require('cjson')
    local PolicyChain = require('apicast.policy_chain')
    local policy_chain = context.policy_chain
    
    local logging_policy_config = cjson.decode([[
    {
      "enable_access_logs": false,
      "custom_logging": "\"{{request}}\" to service {{service.id}} and {{service.name}}"
    }
    ]])
    
    policy_chain:insert( PolicyChain.load_policy('logging', 'builtin', logging_policy_config), 1)
    
    return {
      policy_chain = policy_chain,
      port = { metrics = 9421 },
    }
  2. 从定义自定义环境的 Lua 文件创建 secret。例如:

    oc create secret generic custom-env-1 --from-file=./env1.lua

    secret 可以包含多个自定义虚拟环境。为定义自定义环境的每个文件指定 '-from-file 选项。Operator 会加载每个自定义环境。

  3. 定义 APIManager 自定义资源来引用您刚才创建的 secret。以下示例显示了相对于引用定义自定义环境的 secret 的内容。

    apiVersion: apps.3scale.net/v1alpha1
    kind: APIManager
    metadata:
      name: apimanager-apicast-custom-environment
    spec:
      wildcardDomain: <desired-domain>
      apicast:
        productionSpec:
          customEnvironments:
            - secretRef:
                name: custom-env-1
        stagingSpec:
          customEnvironments:
            - secretRef:
                name: custom-env-1

    APIManager 自定义资源可以引用定义自定义虚拟环境的多个 secret。Operator 会加载每个自定义环境。

  4. 创建添加自定义虚拟环境的 APIManager 自定义资源。例如:

    oc apply -f apimanager.yaml

后续步骤

您无法更新定义自定义环境的 secret 的内容。如果需要更新自定义环境,您可以执行以下操作之一:

  • 推荐的选项是创建具有不同名称的 secret,并更新 APIManager 自定义资源字段 customEnvironments[].secretRef.name。Operator 会触发滚动更新并加载更新的自定义环境。
  • 另外,您可以通过将 spec.apicast.productionSpec.replicasspec.apicast.stagingSpec.replicas 设置为 0 来更新现有的 secret,然后通过将 spec.apicast.productionSpec.replicasspec.apicast.stagingSpec.replicas 设置为其先前的值来再次重新部署 APIcast。