Menu Close

2.8.3. 使用 3scale Operator 注入自定义策略

在使用嵌入式 APIcast 的 3scale 安装中,您可以使用 3scale 操作器来注入自定义策略。嵌入式 APIcast 也称为受管或托管 APIcast。注入自定义策略会将策略代码添加到 APIcast。然后,您可以使用以下任一策略将自定义策略添加到 API 产品策略链中:

  • 3scale API
  • 产品自定义资源

要使用 3scale 管理门户将自定义策略添加到产品策略链中,还必须使用 CustomPolicyDefinition 自定义资源注册自定义策略的 schema。自定义策略注册是只有在您要使用管理门户配置产品策略链时才需要。

您可以将自定义策略注入为 3scale 安装的一部分或之后。在注入自定义策略并在 3scale 安装后,您可以通过从 APIManager CR 中删除其规格来删除自定义策略。3scale 操作器协调更改。

先决条件

  • 您需要安装或您之前安装了 3scale Operator。
  • 您已定义一个自定义策略,如写您自己的策略中所述。即,已创建了定义自定义策略的 my-policy.luaapicast-policy.jsoninit.lua 文件,

流程

  1. 从定义一个自定义策略的文件创建 secret。例如:

    oc create secret generic my-first-custom-policy-secret \
     --from-file=./apicast-policy.json \
     --from-file=./init.lua \
     --from-file=./my-first-custom-policy.lua

    如果您有多个自定义策略,请为每个自定义策略创建一个 secret。secret 只能包含一个自定义策略。

  2. 定义一个 APIManager 自定义资源来引用包含自定义策略的每个 secret。您可以为 APIcast staging 和 APIcast production 指定相同的 secret。以下示例显示有关引用包含自定义策略的 secret 的内容。

    apiVersion: apps.3scale.net/v1alpha1
    kind: APIManager
    metadata:
      name: apimanager-apicast-custom-policy
    spec:
      apicast:
        stagingSpec:
          customPolicies:
            - name: my-first-custom-policy
              version: "0.1"
              secretRef:
                name: my-first-custom-policy-secret
            - name: my-second-custom-policy
              version: "0.1"
              secretRef:
                name: my-second-custom-policy-secret
        productionSpec:
          customPolicies:
            - name: my-first-custom-policy
              version: "0.1"
              secretRef:
                name: my-first-custom-policy-secret
            - name: my-second-custom-policy
              version: "0.1"
              secretRef:
                name: my-second-custom-policy-secret

    APIManager 自定义资源可以引用定义不同自定义策略的多个 secret。Operator 加载每个自定义策略。

  3. 创建 APIManager 自定义资源来引用包含自定义策略的 secret。例如:

    oc apply -f apimanager.yaml

后续步骤

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

  • 推荐的选项是使用不同的名称创建 secret,并更新 APIManager 自定义资源 customPolicies 部分以引用新 secret。Operator 会触发滚动更新并加载更新的自定义策略。
  • 另外,您可以通过将 spec.apicast.productionSpec.replicasspec.apicast.stagingSpec.replicas 设置为 0 来更新现有的 secret,然后通过将 spec.apicast.productionSpec.replicasspec.apicast.stagingSpec.replicas 设置为其先前的值来再次重新部署 APIcast。