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