WebAssembly 模組的提取策略

WasmPlugin API 提供了一種將 Wasm 模組分發到代理的方法。由於每個代理都會從遠端登錄檔或 HTTP 伺服器提取 Wasm 模組,因此了解 Istio 如何選擇提取模組在可用性和效能方面都很重要。

映像檔提取策略和例外情況

類似於 Kubernetes 的 ImagePullPolicyWasmPlugin 也具有 IfNotPresentAlways 的概念,這分別表示「使用快取的模組」和「始終提取模組,無論快取為何」。

使用者使用 ImagePullPolicy 欄位明確配置 Wasm 模組擷取的行為。但是,在以下情況下,Istio 可以覆寫使用者提供的行為

  1. 如果使用者在 WasmPlugin 中設定 sha256,無論 ImagePullPolicy 為何,都會使用 IfNotPresent 策略。
  2. 如果 url 欄位指向 OCI 映像檔,且具有摘要後綴 (例如,gcr.io/foo/bar@sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef),則會使用 IfNotPresent 策略。

當資源未指定 ImagePullPolicy 時,Istio 預設會使用 IfNotPresent 行為。但是,如果提供的 url 欄位指定一個標籤值為 latest 的 OCI 映像檔,Istio 將使用 Always 行為。

快取模組的生命週期

每個代理 (無論是 sidecar 代理還是閘道) 都會快取 Wasm 模組。因此,快取的 Wasm 模組的生命週期受限於相應 Pod 的生命週期。此外,還有一個到期機制,用於盡量減少代理記憶體的佔用:如果快取的 Wasm 模組在一段時間內未使用,則會清除該模組。

此到期時間可以透過 pilot-proxy 的環境變數 WASM_MODULE_EXPIRYWASM_PURGE_INTERVAL 進行配置,它們分別表示到期時間長度和檢查到期時間的間隔。

“Always” 的含義

在 Kubernetes 中,ImagePullPolicy: Always 表示每次建立 Pod 時,都會直接從其來源提取映像檔。每次啟動新的 Pod 時,Kubernetes 都會重新提取映像檔。

對於 WasmPluginImagePullPolicy: Always 表示 Istio 每次建立或變更對應的 WasmPlugin Kubernetes 資源時,都會直接從其來源提取映像檔。請注意,不僅 spec 中的變更,metadata 中的變更也會在使用 Always 策略時觸發 Wasm 模組的提取。這可能意味著在 Pod 的生命週期內,甚至在單個代理的生命週期內,映像檔可能會從來源提取多次。

這個資訊有用嗎?
您有任何改進建議嗎?

感謝您的回饋!