github编辑

Istio/Ambient 模式下 waypoint 如何加载远端 WASM 文件

本文不讨论 WasmPlugin 使用 WASM,而是通过 EnvoyFilter 的方式来更加灵活的使用 WASM。

提出问题

我们知道 envoy 可以通过远端下载 WASM 文件的方式来加载 WASM 程序。envoy 这里不仅需要提供 WASM 的 uri 地址,并且需要提供上游的 Cluster。这里的 cluster 我们可以理解为 outboundCluster。但在 istio ambient 模式下,我们没有直接的 CRD API 来声明 outboundCluster 和 waypoint(s) 的绑定关系的。

Envoy WASM Filter 配置介绍

参考 envoy 的 WASM filer 配置文档,示例配置如下所示,其中高亮部分的为 WASM 文件的远端下载配置。

并且从 config.core.v3.HttpUri定义arrow-up-right,可以很明确的知道 Cluster 为必填项。

cluster

(stringarrow-up-right, REQUIRED) A cluster is created in the Envoy “cluster_manager” config section. This field specifies the cluster name.

Example:

cluster: jwks_cluster

Specify how uri is to be fetched. Today, this requires an explicit cluster, but in the future we may support dynamic cluster creation or inline DNS resolution. See issuearrow-up-right.


解决问题

阅读理解一下 istio cds 的源码,不难发现,istio 可以通过 MeshConfig.ExtensionProviders 来配置 WASM hub 的地址,通过这种方式将 WASM hub 的 cds 下发给所有的 waypoint。

ExtensionProvider 示例如下:

最后更新于