higress-plugin-server
这篇文章将向大家介绍 Higress 近期在 Wasm 插件生态方面的一个进展——Higress Wasm 插件服务器(Higress Plugin Server)。这个新的组件解决了用户在私有化部署 Higress 网关时拉取插件的痛点,优化了插件的下载与管理效率。
一、Wasm 插件:Higress 的扩展能力与挑战
Higress 自开源以来就一直将 Wasm 技术视为核心的网关扩展手段。Wasm 带来的工程可靠性、沙箱安全性、热更新能力以及 Higress 团队在此基础上构建的域名/路由级生效、Redis 访问能力、AI 特性支持等,都丰富了网关的扩展性,并为企业用户带来了性能提升和成本降低。通过自定义 Wasm 插件,用户可以根据自身的业务需求,在网关层完成鉴权、加解密、会话管理等逻辑,减少了额外资源的小号,降低了后端服务的处理负担。
尽管 Wasm 插件技术本身具备优势,但在实际的企业级部署和大规模应用场景中,我们依然面临一些实际的挑战,主要体现在以下几个方面:
1. OCI 机制带来的私有化部署挑战
当前,Higress Wasm 插件的下载和管理主要依赖 OCI(Open Container Initiative)仓库。
关于 OCI、oras 和 Docker
- OCI (Open Container Initiative): OCI 旨在为容器镜像和运行时定义开放标准,以确保不同容器技术之间的互操作性。在云原生生态中,OCI 镜像仓库(如 Docker Hub、Harbor、registry.k8s.io 等)是分发容器镜像的标准方式。Higress 最初将 Wasm 插件作为 OCI Artifacts 发布,即将其打包成符合 OCI 规范的制品并存储在 OCI 仓库中。
- Docker: Docker 是目前最流行的容器平台,它使用 OCI 镜像作为其核心分发格式。通常,我们使用 docker pull 和 docker push 命令来拉取和推送容器镜像。
- oras (OCI Registry As Storage): oras 是一个命令行工具,它允许用户在 OCI 仓库中存储和管理任意内容,而不仅仅是容器镜像。对于 Higress Wasm 插件这类非标准的容器镜像(Wasm 模块),oras 提供了一种方便的方式来与 OCI 仓库进行交互(例如拉取、推送 Wasm 插件)。
OCI 机制的挑战
虽然 OCI 机制在云原生环境中是标准且高效的方式,但对于一些企业,尤其是对网络安全性有严格要求的私有化部署场景来说,OCI 仓库的引入成了一个不小的门槛,并带来了以下问题:
- 技术门槛与工具使用不便: 许多用户可能习惯于应用程序的直接安装或通过简单的包管理器进行部署,而对容器镜像、OCI 标准、以及 oras 这类专门用于非镜像内容的 OCI 工具的使用并不熟悉。这增加了 Wasm 插件的上手难度和运维复杂度。
- 网络限制与私有化部署: 许多企业内部网络严格,对外部公共网络(如 Docker Hub、GitHub Container Registry等)的访问有严格限制。私有化部署环境下,更是会因为无法访问外部公开仓库而导致无法配置插件和更新插件。
- 额外的基础设施搭建: 为了在私有环境中拉取插件,用户可能需要单独部署和维护一个内部 OCI 仓库。这无疑增加了部署的复杂度和运维成本,对于仅需简单使用 Wasm 插件的用户而言,为了几个插件去搭建和管理一套完整的 OCI 生态,显得过于笨重。
- 插件迁移困难: 在不同私有化环境(如开发、测试、生产)之间迁移 Wasm 插件时,由于 OCI 仓库的独立性,往往需要用户手动进行插件的拉取、推送和版本管理,且需要适配不同仓库的认证和网络配置,这增加了操作的复杂性和出错的可能性。
2. 重复下载与性能开销:Always 策略的隐忧
Higress 网关拉取 Wasm 插件时,支持插件拉取策略的配置,默认为 IfNotPresent,即本地存在则不重新拉取。这在大多数情况下是合理的。但当用户希望 Wasm 插件能够及时更新(例如在开发测试环境中频繁迭代)或者希望确保始终使用最新版本的插件时,会倾向于将策略设置为 Always,导致以下问题:
- 网络延迟与带宽消耗: Always 策略意味着每次 Wasm 插件被引用或网关 Pod 重启时,都会尝试从 OCI 仓库重新下载插件。会引入不必要的网络延迟,并消耗带宽资源。
- 冗余操作: 即使插件内容没有变化,Always 策略也会触发下载。尽管 OCI 协议本身支持内容哈希校验,但客户端依然需要与仓库进行通信以确认。
3. 用户体验与操作复杂度:
上述问题共同导致了用户在配置和使用 Wasm 插件时,可能会面临不必要的复杂性。我们希望能够提供一种更简单、更符合直觉的插件分发方式,让用户能够更专注于业务逻辑的实现。
正是基于这些痛点,我们开发了 Higress Wasm 插件服务器。