分發 WebAssembly 模組
Istio 提供使用 WebAssembly (Wasm) 擴充 Proxy 功能的能力。Wasm 擴充性的主要優勢之一是擴充功能可以在執行時動態載入。這些擴充功能必須先分發到 Envoy Proxy。Istio 允許 Proxy 代理動態下載 Wasm 模組,從而實現這一點。
設定測試應用程式
在開始此任務之前,請部署 Bookinfo 範例應用程式。
配置 Wasm 模組
在此範例中,您將在網格中新增 HTTP 基本驗證擴充功能。您將配置 Istio 以從遠端映像登錄檔提取 基本驗證模組並載入它。它將被配置為在呼叫 /productpage
時執行。
要使用遠端 Wasm 模組配置 WebAssembly 篩選器,請建立 WasmPlugin
資源
$ kubectl apply -f - <<EOF
apiVersion: extensions.istio.io/v1alpha1
kind: WasmPlugin
metadata:
name: basic-auth
namespace: istio-system
spec:
selector:
matchLabels:
istio: ingressgateway
url: oci://ghcr.io/istio-ecosystem/wasm-extensions/basic_auth:1.12.0
phase: AUTHN
pluginConfig:
basic_auth_rules:
- prefix: "/productpage"
request_methods:
- "GET"
- "POST"
credentials:
- "ok:test"
- "YWRtaW4zOmFkbWluMw=="
EOF
HTTP 篩選器將作為驗證篩選器注入到入口閘道 Proxy 中。Istio 代理將解譯 WasmPlugin
配置,將遠端 Wasm 模組從 OCI 映像登錄檔下載到本機檔案,並透過參考該檔案將 HTTP 篩選器注入到 Envoy 中。
檢查已配置的 Wasm 模組
測試不使用憑證的
/productpage
$ curl -s -o /dev/null -w "%{http_code}" "http://$INGRESS_HOST:$INGRESS_PORT/productpage" 401
測試使用憑證的
/productpage
$ curl -s -o /dev/null -w "%{http_code}" -H "Authorization: Basic YWRtaW4zOmFkbWluMw==" "http://$INGRESS_HOST:$INGRESS_PORT/productpage" 200
如需 WasmPlugin
API 的更多使用範例,請參閱API 參考。
清除 Wasm 模組
$ kubectl delete wasmplugins.extensions.istio.io -n istio-system basic-auth
監控 Wasm 模組分發
有幾個統計數據追蹤遠端 Wasm 模組的分發狀態。
以下統計數據由 Istio 代理程式收集
istio_agent_wasm_cache_lookup_count
:Wasm 遠端提取快取查詢的次數。istio_agent_wasm_cache_entries
:Wasm 配置轉換和結果的次數,包括成功、沒有遠端載入、封送處理失敗、遠端提取失敗以及遺失遠端提取提示。istio_agent_wasm_config_conversion_duration_bucket
:istio-agent 花費在 Wasm 模組配置轉換上的總時間,以毫秒為單位。istio_agent_wasm_remote_fetch_count
:Wasm 遠端提取和結果的次數,包括成功、下載失敗和校驗和不符。
如果 Wasm 過濾器配置被拒絕,無論是因為下載失敗或其他原因,istiod 也會發出帶有類型標籤 type.googleapis.com/envoy.config.core.v3.TypedExtensionConfig
的 pilot_total_xds_rejects
。
開發 Wasm 擴充功能
要了解有關 Wasm 模組開發的更多資訊,請參考 istio-ecosystem/wasm-extensions
儲存庫中提供的指南,該儲存庫由 Istio 社群維護,並用於開發 Istio 的遙測 Wasm 擴充功能。
限制
此模組分發機制存在已知的限制,這些限制將在未來版本中解決
- 僅支援 HTTP 過濾器。