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_write
、fd_read
、fd_seek
、fd_close
、fd_fdstat_get
、environ_get
、environ_sizes_get
、args_get
、args_sizes_get
、proc_exit
、clock_time_get
、random_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.BytesValue
和google.protobuf.StringValue
直接传递,没有包装器。
- allow_precompiled
(bool) 允许 wasm 文件在支持它的 VM 上包含预编译的代码。警告:这仅应在可信来源的情况下启用,因为预编译的代码未经验证。
- nack_on_code_cache_miss
(bool) 如果为 true 并且代码需要远程获取并且它不在缓存中,则 NACK 配置更新并执行后台获取以填充缓存,否则异步获取代码并进入预热状态。
- environment_variables
(extensions.wasm.v3.EnvironmentVariables) 指定要注入到此 VM 的环境变量,这些变量将通过 WASI 的
environ_get
和environ_get_sizes
系统调用可用。请注意,这些函数通常由您的语言的标准库隐式调用。因此,您不需要直接调用它们。您可以以与在本地平台上相同的方式访问环境变量。警告:如果密钥空间存在冲突,Envoy 将拒绝配置。
extensions.wasm.v3.EnvironmentVariables
[extensions.wasm.v3.EnvironmentVariables 原型]
{
"host_env_keys": [],
"key_values": {...}
}
- host_env_keys
(repeated string) 公开给此 VM 的Envoy环境变量的键。换句话说,如果 Envoy 的环境变量中存在键,则该键值对将被注入。请注意,如果键不存在,它将被忽略。
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_id
和root_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.BytesValue
和google.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 关联的所有插件将被忽略,过滤器链将继续。当插件是可选时,这很有意义。