使用Envoy进行蓝绿部署时能否通过自定义代码实现流量动态路由
Envoy 是否支持使用 JavaScript/Python 编写自定义路由逻辑?
Envoy 本身没有直接内置 JavaScript、Python 的运行时来编写自定义路由逻辑,但有多种成熟方案可以实现你描述的需求(提取 query string 参数、查询映射关系后动态路由),具体可选方案如下:
- WASM 扩展方案(官方推荐自定义扩展方式)
Envoy 支持 WebAssembly(WASM)扩展过滤器,你可以将 JavaScript、Python 代码编译为 WASM 模块加载到 Envoy 中运行:- JavaScript 可通过 AssemblyScript、QuickJS 等工具编译为符合 Envoy ABI 要求的 WASM 模块
- Python 可通过 Pyodide 等工具编译为 WASM 模块
编译后的 WASM 模块可以直接获取请求的 query string、header 等所有元数据,也可以通过 Envoy 提供的外部调用接口发起请求,调用你独立部署的映射查询服务获取路由目标,不需要直接在扩展中耦合数据库连接。
- 外部路由决策服务方案(语言完全自由)
如果你不想做 WASM 编译,可直接使用 Envoy 原生支持的外部路由/扩展授权机制:你可以用任意语言(包括 JavaScript、Python)编写独立的路由决策服务,Envoy 会将请求元数据转发给该服务,你在服务内部完成参数解析、数据库查询、路由目标计算后,将决策结果返回给 Envoy,Envoy 会直接按照结果执行路由。该方案不需要修改 Envoy 本身的配置和扩展,逻辑迭代也完全独立,适合复杂的动态路由场景。 - 轻量替代方案:Lua 过滤器
如果可以接受用 Lua 实现逻辑,Envoy 原生内置了 Lua 过滤器,不需要额外编译扩展,只需在配置中嵌入 Lua 代码即可完成参数提取、远程服务调用、动态修改路由目标等操作,性能开销远低于 WASM 扩展,开发成本更低。
如果你的蓝绿部署场景路由规则固定,也可以直接通过 Envoy 原生的路由配置规则实现,不需要额外自定义逻辑;只有当路由规则需要依赖外部动态数据时,才需要用到上述自定义方案。
内容的提问来源于stack exchange,提问作者inside
相关产品推荐
相关产品推荐

