Wasm(原型)

此扩展的限定名称为 envoy.bootstrap.wasm

注意

此扩展功能齐全,但尚未在生产环境中经过大量实际使用,仅在了解此警告的情况下使用。

此扩展的安全状况未知,应仅在上下游都可信的部署中使用。

提示

此扩展扩展了以下扩展类别,并且可以与之一起使用

此扩展必须使用以下类型 URL 之一进行配置

extensions.wasm.v3.ReloadConfig

[extensions.wasm.v3.ReloadConfig 原型]

{
  "backoff": {...}
}
backoff

(config.core.v3.BackoffStrategy) VM 故障重新加载的回退策略。如果未指定,将应用默认的 1 秒基本间隔。

extensions.wasm.v3.CapabilityRestrictionConfig

[extensions.wasm.v3.CapabilityRestrictionConfig 原型]

用于限制模块可用的 Proxy-Wasm 功能的配置。

{
  "allowed_capabilities": {...}
}
allowed_capabilities

(repeated map<string, extensions.wasm.v3.SanitizationConfig>) 将被允许的 Proxy-Wasm 功能。功能通过名称进行映射。每个功能映射到的 SanitizationConfig 目前未实现且被忽略,因此应保持为空。

功能名称在 Proxy-Wasm ABI 中给出。此外,以下来自 此列表 的 WASI 功能已实现并且可以允许:fd_writefd_readfd_seekfd_closefd_fdstat_getenviron_getenviron_sizes_getargs_getargs_sizes_getproc_exitclock_time_getrandom_get

extensions.wasm.v3.SanitizationConfig

[extensions.wasm.v3.SanitizationConfig 原型]

用于对允许功能的输入进行清理的配置。

注意:这目前未实现。

extensions.wasm.v3.VmConfig

[extensions.wasm.v3.VmConfig 原型]

用于 Wasm VM 的配置。

{
  "vm_id": ...,
  "runtime": ...,
  "code": {...},
  "configuration": {...},
  "allow_precompiled": ...,
  "nack_on_code_cache_miss": ...,
  "environment_variables": {...}
}
vm_id

(string) 将与 Wasm 代码的哈希(或注册的 Null VM 插件的名称)一起使用以确定将使用哪个 VM 的 ID。使用相同 vm_id 和代码的所有插件都将使用相同的 VM。可以留空。在插件之间共享 VM 可以减少内存使用并使数据共享更容易,这可能存在安全隐患。

runtime

(string) Wasm 运行时类型,默认为在 Envoy 构建时使用的第一个可用 Wasm 引擎。搜索可用引擎的优先级为:v8 -> wasmtime -> wamr。可用的 Wasm 运行时类型作为扩展注册。以下运行时包含在 Envoy 代码库中

envoy.wasm.runtime.null:空沙箱,Wasm 模块必须编译并链接到 Envoy 二进制文件。注册名称在 code 字段中以 inline_string 的形式给出。

envoy.wasm.runtime.v8:基于 V8 的 WebAssembly 运行时。

envoy.wasm.runtime.wamr:基于 WAMR 的 WebAssembly 运行时。此运行时在官方构建中未启用。

envoy.wasm.runtime.wasmtime:基于 Wasmtime 的 WebAssembly 运行时。此运行时在官方构建中未启用。

code

(config.core.v3.AsyncDataSource) Envoy 将执行的 Wasm 代码。

configuration

(Any) 用于初始化新 VM(proxy_on_start)的 Wasm 配置。google.protobuf.Struct 在传递到插件之前被序列化为 JSON。google.protobuf.BytesValuegoogle.protobuf.StringValue 直接传递,没有包装器。

allow_precompiled

(bool) 允许 wasm 文件在支持它的 VM 上包含预编译的代码。警告:这仅应在可信来源的情况下启用,因为预编译的代码未经验证。

nack_on_code_cache_miss

(bool) 如果为 true 并且代码需要远程获取并且它不在缓存中,则 NACK 配置更新并执行后台获取以填充缓存,否则异步获取代码并进入预热状态。

environment_variables

(extensions.wasm.v3.EnvironmentVariables) 指定要注入到此 VM 的环境变量,这些变量将通过 WASI 的 environ_getenviron_get_sizes 系统调用可用。请注意,这些函数通常由您的语言的标准库隐式调用。因此,您不需要直接调用它们。您可以以与在本地平台上相同的方式访问环境变量。警告:如果密钥空间存在冲突,Envoy 将拒绝配置。

extensions.wasm.v3.EnvironmentVariables

[extensions.wasm.v3.EnvironmentVariables 原型]

{
  "host_env_keys": [],
  "key_values": {...}
}
host_env_keys

(repeated string) 公开给此 VM 的Envoy环境变量的键。换句话说,如果 Envoy 的环境变量中存在键,则该键值对将被注入。请注意,如果键不存在,它将被忽略。

key_values

(repeated map<string, string>) 以“KEY=VALUE”形式显式给出的要注入到此 VM 的键值对。

extensions.wasm.v3.PluginConfig

[extensions.wasm.v3.PluginConfig 原型]

Wasm 插件(例如过滤器和服务)的基本配置。

{
  "name": ...,
  "root_id": ...,
  "vm_config": {...},
  "configuration": {...},
  "fail_open": ...,
  "failure_policy": ...,
  "reload_config": {...},
  "capability_restriction_config": {...}
}
name

(string) VM 中过滤器/服务的唯一名称,用于在相同 vm_idroot_id 下处理多个过滤器/服务时标识过滤器/服务,以及用于日志记录/调试。

root_id

(string) VM 中一组过滤器/服务的唯一 ID,这些过滤器/服务将共享 RootContext 和 Contexts(如果适用)(例如 Wasm HttpFilter 和 Wasm AccessLog)。如果留空,则所有具有相同 vm_id 的空白 root_id 的过滤器/服务将共享 Context(s)。

vm_config

(extensions.wasm.v3.VmConfig) 用于查找或启动 VM 的配置。

configuration

(Any) 用于配置或重新配置插件 (proxy_on_configure) 的过滤器/服务配置。google.protobuf.Struct 在传递到插件之前被序列化为 JSON。google.protobuf.BytesValuegoogle.protobuf.StringValue 直接传递,没有包装器。

fail_open

(bool) 如果 VM 上出现致命错误(例如异常、abort()、on_start 或 on_configure 返回 false),则与 VM 关联的所有插件将要么失败关闭(默认情况下),例如通过返回 HTTP 503 错误,要么失败打开(如果 ‘fail_open’ 设置为 true),通过绕过过滤器。注意:当 xDS 更新期间 on_start 或 on_configure 返回 false 时,xDS 配置将被拒绝;当初始启动期间 on_start 或 on_configuration 返回 false 时,代理将不会启动。此字段已弃用,建议使用 failure_policy 字段。

failure_policy

(extensions.wasm.v3.FailurePolicy) 插件的失败策略。

reload_config

(extensions.wasm.v3.ReloadConfig) 重新加载配置。这仅在 failure_policy 设置为 FAIL_RELOAD 时应用。

capability_restriction_config

(extensions.wasm.v3.CapabilityRestrictionConfig) 用于限制模块可用的 Proxy-Wasm 功能的配置。

extensions.wasm.v3.WasmService

[extensions.wasm.v3.WasmService proto]

WasmService 被配置为内置的 envoy.wasm_service WasmService。此不透明配置将用于创建 Wasm 服务。

{
  "config": {...},
  "singleton": ...
}
config

(extensions.wasm.v3.PluginConfig) 通用插件配置。

singleton

(bool) 如果为真,则创建一个单个 VM,而不是为每个工作线程创建一个 VM。这种单例不能与过滤器一起使用。

Enum extensions.wasm.v3.FailurePolicy

[extensions.wasm.v3.FailurePolicy proto]

如果 VM 出现致命错误(例如异常、中止),则将应用该策略。

UNSPECIFIED

(DEFAULT) ⁣未指定策略。将使用默认策略。默认策略是 FAIL_CLOSED

FAIL_RELOAD

⁣如果 VM 失败,将为新请求创建新的插件实例。请注意,这仅适用于以下失败

  • proxy_wasm::FailState::RuntimeError

对于所有其他失败,这将回退到 FAIL_CLOSED

FAIL_CLOSED

⁣与 VM 关联的所有插件将返回 HTTP 503 错误。

FAIL_OPEN

⁣与 VM 关联的所有插件将被忽略,过滤器链将继续。当插件是可选时,这很有意义。