搜索

11.8. 3scale API Management WebAssembly 模块配置

download PDF

WasmPlugin 自定义资源规格提供了 Proxy-WASM 模块从中读取的配置。

该 spec 嵌入主机中,并由 Proxy-WASM 模块读取。通常,配置采用要解析的模块的 JSON 文件格式。但是,WasmPlugin 资源可以将 spec 值解释为 YAML,并将其转换为 JSON 以供模块使用。

如果您在独立模式中使用 Proxy-WASM 模块,则必须使用 JSON 格式编写配置。使用 JSON 格式意味着在 host 配置文件中根据需要使用转义和引用,如 Envoy。当您将 WebAssembly 模块与 WasmPlugin 资源搭配使用时,配置采用 YAML 格式。在这种情况下,无效的配置会强制模块根据其 JSON 表示将诊断显示到 sidecar 的日志记录流。

重要

EnvoyFilter 自定义资源(CR)不是受支持的 API,但它可在 3scale Istio 适配器或 Service Mesh 版本中使用。不建议使用 EnvoyFilter CR。使用 WasmPlugin API 而不是 EnvoyFilter CR。如果需要使用 EnvoyFilter CR,则必须以 JSON 格式指定 spec。

11.8.1. 配置 3scale API Management WebAssembly 模块

3scale WebAssembly 模块配置的架构取决于 3scale 帐户和授权服务,以及要处理的服务列表。

前提条件

在所有情形中,先决条件都是一组最低必填字段:

  • 对于 3scale 帐户和授权服务:backend-listener URL。
  • 要处理的服务列表:服务 ID 和至少一个凭据查找方法以及查找方法。
  • 您将找到处理 userkey、以及带有 appkeyappid,以及 OpenID Connect(OIDC)模式的示例。
  • WebAssembly 模块使用您在静态配置中指定的设置。例如,如果您向模块中添加映射规则配置,它将始终适用,即使 3scale 管理门户没有这样的映射规则。其余的 WasmPlugin 资源围绕 spec.pluginConfig YAML 条目存在。

11.8.2. 3scale WebAssembly API Management 模块 api 对象

3scale WebAssembly 模块的 api 顶级字符串定义模块要使用的配置版本。

注意

api 对象的不存在或不受支持的版本会导致 3scale WebAssembly 模块无法正常运行。

api 顶级字符串示例

apiVersion: extensions.istio.io/v1alpha1
kind: WasmPlugin
metadata:
  name: <threescale_wasm_plugin_name>
  namespace: <info>
spec:
  pluginConfig:
    api: v1
...

api 条目定义配置的其余值。唯一接受的值是 v1。破坏与当前配置兼容性或需要更多使用 v1 的模块无法处理的逻辑的新设置将需要不同的值。

11.8.3. 3scale API Management WebAssembly 模块系统对象

system 顶级对象指定如何访问特定帐户的 3scale 帐户管理 API。upstream 字段是对象最重要的部分。system 对象是可选的,但建议使用,除非您为 3scale WebAssembly 模块提供完全静态的配置。如果您不想提供与 3scale 的 系统组件 连接,则后者是一个选项。

当您在 system 对象之外提供静态配置对象时,静态配置对象始终优先。

apiVersion: extensions.istio.io/v1alpha1
kind: WasmPlugin
metadata:
  name: <threescale_wasm_plugin_name>
spec:
  pluginConfig:
    system:
      name: <saas_porta>
      upstream: <object>
      token: <my_account_token>
      ttl: 300
  ...
表 11.1. system 对象字段
名称描述必需

name

3scale 服务的标识符,目前没有在别处引用。

选填

upstream

要联系的网络主机的详细信息。upstream 代表 3scale 帐户管理 API 主机,称为 system。

token

具有读取权限的 3scale 个人访问令牌。

ttl

在尝试获取新更改之前,将从此主机检索到的配置视为有效的最少秒数。默认为 600 秒(10 分钟)。注意:没有最大值,但模块通常会在此 TTL apsaps 之后合理时间段内获取任何配置。

选填

11.8.4. 3scale API Management WebAssembly 模块上游对象

upstream 对象描述代理可以对其执行调用的外部主机。

apiVersion: maistra.io/v1
upstream:
  name: outbound|443||multitenant.3scale.net
  url: "https://myaccount-admin.3scale.net/"
  timeout: 5000
...
表 11.2. upstream 对象字段
名称描述必需

name

name 不是自由格式的标识符。它是外部主机的标识符,如代理配置中所定义。对于独立 Envoy 配置,它会映射到一个集群的名称,在其他代理中也称为 上游(upstream)注: 这个字段的值,因为 Service Mesh 和 3scale Istio 适配器 control plane 根据使用竖线(|)作为多个字段分隔符的格式来配置名称。对于此集成,请始终使用格式:outbound|<port>||<hostname>

url

用于访问所描述服务的完整 URL。除非被方案所暗示,否则您必须包含 TCP 端口。

Timeout(超时)

超时时间(毫秒),使得响应时间超过响应时间的连接将被视为错误。默认值为 1000 秒。

选填

11.8.5. 3scale API Management WebAssembly 模块后端对象

backend 顶级对象指定如何访问 3scale Service Management API 来授权和报告 HTTP 请求。此服务由 3scale 的 Backend 组件提供。

apiVersion: extensions.istio.io/v1alpha1
kind: WasmPlugin
metadata:
  name: <threescale_wasm_plugin_name>
spec:
  pluginConfig:
    ...
    backend:
      name: backend
      upstream: <object>
    ...
表 11.3. backend 对象字段
名称描述必需

name

3scale 后端的标识符,目前没有在别处引用。

选填

upstream

要联系的网络主机的详细信息。这必须引用 3scale 帐户管理 API 主机,即已知系统。

是。最重要和必填字段。

11.8.6. 3scale API Management WebAssembly 模块服务对象

services 顶级对象指定由 module 的特定实例处理哪些服务标识符。

您必须指定要处理哪些服务,因为帐户有多个服务。其余的配置会围绕如何配置服务。

services 字段是必需的。它是必须至少包含一个服务的数组,才可使用。

apiVersion: extensions.istio.io/v1alpha1
kind: WasmPlugin
metadata:
  name: <threescale_wasm_plugin_name>
spec:
  pluginConfig:
    ...
    services:
    - id: "2555417834789"
      token: service_token
      authorities:
        - "*.app"
        - 0.0.0.0
        - "0.0.0.0:8443"
      credentials: <object>
      mapping_rules: <object>
    ...

services 数组中的每个元素代表 3scale 服务。

表 11.4. services 对象字段
名称描述必填

id

此 3scale 服务的标识符,目前没有在别处引用。

token

token 可以在您的系统中的服务的代理配置中找到,也可以使用以下 curl 命令从系统检索它:

curl "\https://<system_host>/admin/api/services/<service_id>/proxy/configs/production/latest.json?access_token=<access_token>" | jq '.proxy_config.content.backend_authentication_value'

选填

authorities

一个字符串数组,每个字符串代表要匹配的 URL颁发机构。这些字符串接受支持星号(*)加号(+)和问号(?)匹配器的 glob 模式。

credentials

定义要查找和在哪里查找的凭据的对象。

mapping_rules

代表要命中映射规则和 3scale 方法的一组对象。

选填

11.8.7. 3scale API Management WebAssembly 模块凭证对象

credentials 对象是 service 对象的组件。credentials 指定要查找的凭证类型,以及执行此操作的步骤。

所有字段均为可选,但您必须至少指定一个 user_keyapp_id。指定每个凭据的顺序无关紧要,因为它由模块预先建立。仅指定每个凭证的一个实例。

apiVersion: extensions.istio.io/v1alpha1
kind: WasmPlugin
metadata:
  name: <threescale_wasm_plugin_name>
spec:
  pluginConfig:
    ...
    services:
    - credentials:
        user_key: <array_of_lookup_queries>
        app_id: <array_of_lookup_queries>
        app_key: <array_of_lookup_queries>
    ...
表 11.5. credentials 对象字段
名称描述必需

user_key

这是一组查询,用于定义 3scale 用户密钥。用户密钥通常称为 API 密钥。

选填

app_id

这是一组查询,用于定义 3scale 应用标识符。应用程序标识符由 3scale 提供,或使用 Red Hat Single Sign-On (RH-SS0) 或 OpenID Connect(OIDC)等身份提供程序来提供。此处指定的查找查询的解析(只要成功并解析为两个值),它会设置 app_idapp_key

选填

app_key

这是一组用于定义 3scale 应用键的查询。没有解析的 app_id 的应用程序密钥是无用的,因此仅在指定 app_id 时指定此字段。

选填

11.8.8. 3scale API Management WebAssembly 模块查找查询

lookup query 对象是 credentials 对象中任何字段的一部分。它指定如何查找和处理给定凭证字段。评估之后,成功解析意味着找到一个或多个值。失败的解决方案意味着没有找到任何值。

lookup queries 的数组描述了一个短电路或关系:成功解析其中一个查询会停止评估任何剩余查询,并将值或值分配到指定的凭证类型。数组中的每个查询相互独立。

lookup queries 由单个字段(一个源对象)组成,它可以是多个源类型之一。请参见以下示例:

apiVersion: extensions.istio.io/v1alpha1
kind: WasmPlugin
metadata:
  name: <threescale_wasm_plugin_name>
spec:
  pluginConfig:
    ...
    services:
    - credentials:
        user_key:
          - <source_type>: <object>
          - <source_type>: <object>
          ...
        app_id:
          - <source_type>: <object>
          ...
        app_key:
          - <source_type>: <object>
          ...
    ...

source 对象作为任何 credentials 对象字段中的源数组的一部分存在。对象字段名称,称为 source 类型代表以下任意一个:

  • header :查找查询接收 HTTP 请求标头作为输入。
  • query_stringlookup query 接收 URL 查询字符串参数作为输入。
  • filterlookup query 接收过滤器元数据作为输入。

所有 source 类型对象至少具有以下两个字段:

表 11.6. source 类型对象字段
名称描述必需

keys

一个字符串数组,各自对应一个 key,引用输入数据中找到的条目。

ops

用于执行 key 项匹配的操作数组。该数组是操作在下一个操作上接收输入并生成输出的管道。如果 operation 无法提供一个输出将会被解析为 lookup query 失败。操作的管道顺序决定了评估顺序。

选填

path

显示用于查找数据的元数据中的路径。但是,当使用 headerquery_string 源类型时不需要它,但在使用 filter source-type 时是必需的。

选填

key 与输入数据匹配时,不会评估其余的密钥,而且源解析算法会跳转到执行指定的操作ops),如果存在。如果没有指定 ops,则返回匹配 key 的结果值(若有)。

Operations 提供了一种方式,用于您在第一阶段查找 key 后为输入指定某些条件和转换。当您需要转换、解码和断言属性时,请使用 Operations,但它们不提供成熟的语言来满足所有需求并缺少 Turing-completeness

存储 operations 输出的堆栈。评估时,lookup query 通过在堆栈的底部分配值或值来完成,具体取决于凭据使用的值。

11.8.9. 3scale API Management WebAssembly 模块操作对象

属于特定 source typeops 数组中的每个元素都是 operation 对象,可以应用转换到值或执行测试。用于此类对象的字段名称是 operation 本身的名称,任何值都是 operation 的参数,可以是结构对象,例如,带有字段和值、列表或字符串的映射。

大多数 operation 都参与一个或多个输入,产生一个或多个输出。当它们消耗输入或生成输出时,它们与一个堆栈相关:操作消耗的每个值都从堆栈中弹出,最初填充任何 source 匹配。它们输出的值将推送到堆栈。其他 operations 没有使用或生成的输出不是声明的特定属性,但您检查值的堆栈。

注意

完成解析后,下一步获取的值,例如将值分配给 app_idapp_keyuser_key,取自堆栈的底部值。

有几个不同的 operations 类别:

  • 解码

    这些通过解码来转换输入值,以获得不同的格式。

  • string

    它们取字符串值作为输入,并对它执行转换和检查。

  • queue

    它们取输入中的一组值,并执行多个堆栈转换和选择堆栈中的特定位置。

  • check

    这些 assert 属性以一个副作用的方式有关一组操作。

  • Control (控制)

    它们执行允许修改评估流程的操作。

  • 格式

    它们解析输入值的格式特定结构,并在其中查找值。

所有操作都由名称标识符以字符串形式指定。

其他资源

11.8.10. 3scale API Management WebAssembly 模块 mapping_rules 对象

mapping_rules 对象是 service 对象的一部分。它指定一组 REST 路径模式和相关 3scale 指标,并在模式匹配时指定要使用的递增数。

如果 system 顶级对象中没有提供动态配置,则需要该值。如果对象在 system 顶级条目外提供,则首先评估 mapping_rules 对象。

mapping_rules 是一个数组对象。该数组的每个元素都是 mapping_rule 对象。传入请求上评估的匹配映射规则提供了一组 3scale methods,用于授权并向 APIManager 报告。当多个匹配规则指代相同的 methods 时,调用 3scale 时会有一个 deltas 的总结。例如,如果两个规则使用 deltas 1 和 3 将 Hits 方法增加两次,则报告至 3scale 的 Hits 的单一方法条目的 delta 为 4。

11.8.11. 3scale API Management WebAssembly 模块 mapping_rule 对象

mapping_rule 对象是 mapping_rules 对象中的数组的一部分。

mapping_rule 对象字段指定以下信息:

  • 要匹配的 HTTP 请求方法
  • 匹配路径的模式.
  • 要报告的 3scale 方法以及要报告的数量。指定字段的顺序决定了评估顺序。
表 11.7. mapping_rule 对象字段
名称描述必需

方法

指定代表 HTTP 请求方法的字符串,也称为 verb。接受的值与接受的 HTTP 方法名称之一匹配,不区分大小写。任何方法都匹配的特殊值。

pattern

与 HTTP 请求的 URI 路径组件匹配的模式。此模式遵循与 3scale 中记录的相同语法。它允许使用大括号(如 {this})之间的任意字符序列使用通配符(使用星号(*)字符)。

usages

usage 对象列表。当规则匹配时,所有带有其 deltas 的方法都会添加到发送到 3scale 的方法列表中,以进行授权和报告。

使用以下必填字段嵌入 usages 对象 :

  • name: 要报告的 method 系统名。注意:name 是区分大小写的。
  • delta: method 增加的数量。

last

当成功与此规则匹配,是否应停止评估更多映射规则。

可选布尔值。默认值为 false

以下示例独立于 3scale 中方法之间的现有层次结构。也就是说,在 3scale 侧运行的任何内容都不会受到影响。例如,Hits 指标可以是全部的父项,因此它存储了 4 个命中,因为授权请求中的所有报告方法总和,并调用 3scale Authrep API 端点。

以下示例使用到匹配所有规则的路径 /products/1/soldGET 请求。

mapping_rules GET 请求示例

apiVersion: extensions.istio.io/v1alpha1
kind: WasmPlugin
metadata:
  name: <threescale_wasm_plugin_name>
spec:
  pluginConfig:
    ...
    mapping_rules:
      - method: GET
        pattern: /
        usages:
          - name: hits
            delta: 1
      - method: GET
        pattern: /products/
        usages:
          - name: products
            delta: 1
      - method: ANY
        pattern: /products/{id}/sold
        usages:
          - name: sales
            delta: 1
          - name: products
            delta: 1
    ...

所有 usages 都会添加到模块执行的请求中使用用量数据 3scale,如下所示:

  • 命中:1
  • 产品:2 个
  • 销售:1
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.