Golang HTTP 过滤器

在本例中,我们将展示如何将 Golang 过滤器与 Envoy 代理一起使用。

该示例演示了一个 Go 插件,它可以直接响应请求,还可以更新上游服务器提供的响应。

它还展示了如何在运行时独立配置 Go 插件。

步骤 1:编译 Go 插件库

切换到 examples/golang-http 目录并构建 Go 插件库。

$ pwd
envoy/examples/golang-http
$ docker compose -f docker-compose-go.yaml run --rm go_plugin_compile

现在,编译后的库应该在 lib 文件夹中。

$ ls lib
simple.so

步骤 2:启动所有容器

启动所有容器。

$ docker compose pull
$ docker compose up --build -d
$ docker compose ps

      Name                      Command               State                          Ports
-----------------------------------------------------------------------------------------------------------------------
golang_proxy_1         /docker-entrypoint.sh /usr ...   Up      10000/tcp, 0.0.0.0:10000->10000/tcp,:::10000->10000/tcp
golang_web_service_1   /bin/echo-server                 Up      8080/tcp

步骤 3:发出由 Go 插件处理的请求

以下 curl 命令的输出应包括简单的 Go 插件添加的标头。

$ curl -v localhost:10000 2>&1 | grep rsp-header-from-go
< rsp-header-from-go: bar-test

步骤 4:发出由上游处理并由 Go 插件更新的请求

以下 curl 命令的输出应包括已由简单的 Go 插件更新的主体。

$ curl localhost:10000/update_upstream_response 2>&1 | grep "updated"
upstream response body updated by the simple plugin

步骤 5:使用自定义配置发出由 Go 插件处理的请求

以下 curl 命令的输出应包括包含简单 Go 插件的 prefix_localreply_body 值的主体。

$ curl localhost:10000/localreply_by_config  2>&1 | grep "localreply"
Configured local reply from go, path: /localreply_by_config

另请参阅

Envoy Go 过滤器

有关 Envoy Go 过滤器的更多信息。

Go 扩展 API

Go 扩展过滤器 API。

Go 插件 API

Envoy 的 Go 插件 API 概述。