Golang 网络过滤器
在本示例中,我们展示了如何将 Golang 网络过滤器与 Envoy 代理一起使用。我们还展示了如何在运行时独立配置 Go 插件。
示例 Go 插件在从其 TCP 连接接收到的请求中添加 hello,
前缀。然后,这些修改后的请求被代理到从配置文件中检索到的回声服务。
plugin_config:
"@type": type.googleapis.com/xds.type.v3.TypedStruct
value:
echo_server_addr: echo_service
步骤 1:编译 Go 插件库
更改到 examples/golang-network
目录并构建 Go 插件库。
$ pwd
envoy/examples/golang-network
$ 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 SERVICE STATUS PORTS
golang-network-echo_service-1 "/tcp-echo" echo_service running
golang-network-proxy-1 "/docker-entrypoint.…" proxy running 0.0.0.0:10000->10000/tcp
在本示例中,我们启动了两个容器 - 一个回声服务,它只是对从其 TCP 连接接收到的内容做出响应,以及一个代理服务,它利用 Golang 插件来处理数据并将其代理到回声服务。
步骤 3:发送一些数据由 Go 插件处理
来自以下 nc
命令的响应应该包含 hello,
前缀,该前缀将由示例 Go 插件添加。
$ echo "world" | nc localhost 10000 2>&1
< hello, world
另请参阅
- Envoy Go 网络过滤器
有关 Envoy Go 网络过滤器的更多信息。
- Envoy Go HTTP 过滤器
有关 Envoy Go HTTP 过滤器的更多信息。
- Go 插件 API
Envoy 的 Go 插件 API 概述。