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_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 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.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 proto]
{
"host_env_keys": [],
"key_values": {...}
}
- host_env_keys
(repeated string) 暴露給此 VM 的 Envoy 環境變數的金鑰。換句話說,如果金鑰存在於 Envoy 的環境變數中,則會注入該金鑰值配對。請注意,如果金鑰不存在,則會被忽略。
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_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_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 相關聯的外掛程式都將被忽略,並且篩選器鏈將會繼續。當外掛程式為可選時,此設定才有意義。