Wasm (proto)

此擴展的完整名稱為 envoy.bootstrap.wasm

注意

此擴展功能正常,但尚未經過大量的生產環境使用時間,請僅在考量此警告的情況下使用。

此擴展具有未知的安全狀態,應僅在下游和上游皆受信任的部署中使用。

提示

此擴展延伸並可用於以下擴展類別

此擴展必須使用以下類型 URL 之一進行組態

extensions.wasm.v3.ReloadConfig

[extensions.wasm.v3.ReloadConfig proto]

{
  "backoff": {...}
}
退避

(config.core.v3.BackoffStrategy) VM 失敗重新載入的退避策略。如果未指定,將套用預設的 1 秒基本間隔。

extensions.wasm.v3.CapabilityRestrictionConfig

[extensions.wasm.v3.CapabilityRestrictionConfig proto]

用於限制模組可用的 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 proto]

用於清理允許的功能之輸入的組態。

注意:目前尚未實作。

extensions.wasm.v3.VmConfig

[extensions.wasm.v3.VmConfig proto]

Wasm VM 的組態。

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

(string) 一個 ID,將與 wasm 程式碼的雜湊值 (或已註冊的 Null VM 外掛程式名稱) 一起使用,以判斷哪個 VM 將用於外掛程式。所有使用相同 vm_id 和程式碼的外掛程式都將使用相同的 VM。可以留白。在多個外掛程式之間共用 VM 可以減少記憶體使用量,並更容易共用資料,這可能會帶來安全性影響。

runtime

(string) Wasm 執行階段類型,預設為 Envoy 建置時使用的第一個可用 Wasm 引擎。搜尋可用引擎的優先順序為:v8 -> wasmtime -> wamr。可用的 Wasm 執行階段類型註冊為擴展。以下執行階段包含在 Envoy 程式碼庫中

envoy.wasm.runtime.null: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 的 Wasm 組態 (proxy_on_start)。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 proto]

{
  "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 proto]

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_configure 回傳 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) 如果為 true,則建立單一 VM,而不是每個工作執行緒建立一個 VM。這種單例不能與篩選器一起使用。

Enum extensions.wasm.v3.FailurePolicy

[extensions.wasm.v3.FailurePolicy proto]

如果 VM 上發生嚴重錯誤 (例如例外、abort()),則將會套用此策略。

UNSPECIFIED

(預設) ⁣未指定策略。將會使用預設策略。預設策略為 FAIL_CLOSED

FAIL_RELOAD

⁣如果 VM 失敗,將為新的請求建立新的外掛程式實例。請注意,這只會應用於以下失敗情況:

  • proxy_wasm::FailState::RuntimeError

對於所有其他失敗,將會回退至 FAIL_CLOSED

FAIL_CLOSED

⁣所有與 VM 相關聯的外掛程式都將回傳 HTTP 503 錯誤。

FAIL_OPEN

⁣所有與 VM 相關聯的外掛程式都將被忽略,並且篩選器鏈將會繼續。當外掛程式為可選時,此設定才有意義。