分發 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 模組

  1. 測試不使用憑證的 /productpage

    $ curl -s -o /dev/null -w "%{http_code}" "http://$INGRESS_HOST:$INGRESS_PORT/productpage"
    401
    
  2. 測試使用憑證的 /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.TypedExtensionConfigpilot_total_xds_rejects

開發 Wasm 擴充功能

要了解有關 Wasm 模組開發的更多資訊,請參考 istio-ecosystem/wasm-extensions 儲存庫中提供的指南,該儲存庫由 Istio 社群維護,並用於開發 Istio 的遙測 Wasm 擴充功能。

限制

此模組分發機制存在已知的限制,這些限制將在未來版本中解決

  • 僅支援 HTTP 過濾器。
此資訊是否實用?
您有任何改進建議嗎?

感謝您的回饋!