Files
higress/plugins/golang-filter/README.md
2025-04-29 22:08:10 +08:00

2.1 KiB

Golang HTTP Filter

English | 简体中文

简介

Golang HTTP Filter 允许开发者使用 Go 语言编写自定义的 Envoy Filter。该框架支持在请求和响应流程中执行 Golang 代码,使 Envoy 的扩展开发变得更加简单。最重要的是,使用此框架开发的 Go 插件可以独立于 Envoy 进行编译,这大大提高了开发和部署的灵活性。

注意 Golang Filter 需要 Higress 2.1.0 或更高版本才能使用。

特性

  • 支持在HTTP请求和响应流程中执行 Go 代码
  • 支持插件独立编译,无需重新编译 Envoy
  • 提供简洁的 API 接口
  • 支持请求/响应头部修改
  • 支持请求/响应体修改
  • 支持同步请求

快速开始

请参考 Envoy Golang HTTP Filter 示例 了解如何开发和运行一个基本的 Golang Filter。

插件注册

在开发新的 Golang Filter 时,需要在main.goinit() 函数中注册你的插件。注册时需要提供插件名称、Filter 工厂函数和配置解析器:

func init() {
    envoyHttp.RegisterHttpFilterFactoryAndConfigParser(
        "your-plugin-name",    // 插件名称
        yourFilterFactory,     // Filter 工厂函数
        &yourConfigParser{},   // 配置解析器
    )
}

配置示例

多个 Golang Filter 插件可以共同编译到一个 golang-filter.so 文件中,通过 plugin_name 来指定要使用的插件。配置示例如下:

http_filters:
- name: envoy.filters.http.golang
  typed_config:
    "@type": type.googleapis.com/envoy.extensions.filters.http.golang.v3alpha.Config
    library_id: your-plugin-name
    library_path: "./golang-filter.so"  # 包含多个插件的共享库文件
    plugin_name: your-plugin-name       # 指定要使用的插件名称,需要与 init() 函数中注册的插件名称保持一致
    plugin_config:
      "@type": type.googleapis.com/xds.type.v3.TypedStruct
      value:
          your_config_here: value

快速构建

使用以下命令可以快速构建 golang filter 插件:

make build