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 概述。