Istio 和 Envoy WebAssembly 扩展性:一年回顾

Envoy 和 Istio 基于 WebAssembly 的扩展性工作进展更新。

2021 年 3 月 5 日 | 作者:Google 的 Bian Pengyuan

一年前的今天,我们在 1.5 版本中引入了 基于 WebAssembly 的扩展性 到 Istio。在过去的一年中,Istio、Envoy 和 Proxy-Wasm 社区继续共同努力,使 WebAssembly (Wasm) 扩展性更加稳定、可靠和易于采用。让我们一起回顾一下 Istio 1.9 版本中对 Wasm 支持的更新以及我们未来的计划。

WebAssembly 支持合并到上游 Envoy

在为 Istio 的 Envoy 分支添加对 Wasm 和代理 WebAssembly (Proxy-Wasm) ABI 的实验性支持之后,我们从早期采用者的社区收集了一些宝贵的反馈。这些反馈,加上我们在开发核心 Istio Wasm 扩展过程中积累的经验,帮助我们完善并稳定了运行时。这些改进为 2020 年 10 月将 Wasm 支持直接合并到 Envoy 上游铺平了道路,使其成为所有官方 Envoy 版本的一部分。这是一个重要的里程碑,因为它表明

wasm-extensions 生态系统仓库

作为 Envoy Wasm 运行时的早期采用者,Istio 扩展和遥测工作组在扩展开发方面积累了大量经验。我们构建了几个一流的扩展,包括 元数据交换Prometheus 统计信息属性生成。为了更广泛地分享我们的经验,我们在 istio-ecosystem 组织中创建了一个 wasm-extensions 仓库。该仓库有两个目的

该指南目前涵盖了使用 C++ 进行 WebAssembly 扩展开发单元测试,以及使用 Go 测试框架进行 集成测试,通过运行 Istio 代理二进制文件中的 Wasm 模块来模拟真实运行时。在未来,我们还将添加几个更规范的扩展,例如与 Open Policy Agent 的集成以及基于 JWT 令牌的标头操作。

通过 Istio Agent 分发 Wasm 模块

在 Istio 1.9 之前,需要使用 Envoy 远程数据源 将远程 Wasm 模块分发到代理。在 此示例 中,您可以看到定义了两个 EnvoyFilter 资源:一个用于添加远程获取 Envoy 集群,另一个用于将 Wasm 过滤器注入 HTTP 过滤器链。这种方法有一个缺点:如果远程获取失败,无论是由于配置错误还是瞬态错误,Envoy 都将停留在错误的配置状态。如果 Wasm 扩展被配置为 关闭时失败,远程获取失败将阻止 Envoy 提供服务。为了解决此问题,需要对 Envoy xDS 协议进行 一项根本性的更改,使其允许异步 xDS 响应。

Istio 1.9 通过利用 istio-agent 中的 xDS 代理和 Envoy 的 扩展配置发现服务 (ECDS) 提供了一种开箱即用的可靠分发机制。

istio-agent 从 istiod 中截获扩展配置资源更新,从中读取远程获取提示,下载 Wasm 模块,并使用已下载 Wasm 模块的路径重写 ECDS 配置。如果下载失败,istio-agent 将拒绝 ECDS 更新,防止错误配置到达 Envoy。有关更多详细信息,请参阅 有关 Wasm 模块分发的文档

Remote Wasm module fetch flow
远程 Wasm 模块获取流程

Istio Wasm SIG 和未来工作

尽管我们在 Wasm 扩展性方面取得了很大进展,但该项目的许多方面仍有待完成。为了整合来自各方的努力并更好地应对未来的挑战,我们成立了一个 Istio WebAssembly SIG,其目标是为 Istio 提供一种标准且可靠的方式来使用 Wasm 扩展。以下是一些我们正在努力的方向

如果您想加入我们,该小组每两周的星期二下午 2 点(太平洋时间)举行会议。您可以在 Istio 工作组日历 中找到会议时间。

我们期待看到您如何使用 Wasm 来扩展 Istio!

分享此帖子