分发 WebAssembly 模块

Istio 提供了 使用 WebAssembly (Wasm) 扩展代理功能 的能力。 Wasm 可扩展性的关键优势之一是扩展可以在运行时动态加载。这些扩展首先必须分发到 Envoy 代理。Istio 通过允许代理代理动态下载 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 过滤器将作为身份验证过滤器注入到入口网关代理中。Istio 代理将解释 WasmPlugin 配置,从 OCI 镜像仓库下载远程 Wasm 模块到本地文件,并通过引用该文件将 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 也会发出 pilot_total_xds_rejects,类型标签为 type.googleapis.com/envoy.config.core.v3.TypedExtensionConfig

开发 Wasm 扩展

要了解有关 Wasm 模块开发的更多信息,请参阅 istio-ecosystem/wasm-extensions 存储库 中提供的指南,该存储库由 Istio 社区维护,用于开发 Istio 的遥测 Wasm 扩展

限制

此模块分发机制存在已知的限制,将在将来的版本中解决

  • 只支持 HTTP 过滤器。
这些信息对您有用吗?
您有什么改进建议吗?

感谢您的反馈!