Golang 網路過濾器

在此範例中,我們展示如何將 Golang 網路過濾器與 Envoy 代理一起使用。我們也展示如何在執行時獨立設定 Go 外掛程式。

範例 Go 外掛程式會在從其 TCP 連線收到的請求中加入 hello, 字首。然後,這些修改後的請求會被代理到從組態檔擷取的 echo 服務。

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

在此範例中,我們啟動兩個容器 - 一個 echo 服務,它只會回應從其 TCP 連線接收到的內容,以及一個代理服務,它會使用 Golang 外掛程式來處理資料並將其代理到 echo 服務。

步驟 3:傳送一些資料給 Go 外掛程式處理

以下 nc 命令的回應應包含範例 Go 外掛程式加入的 hello, 字首。

$ echo "world" | nc localhost 10000 2>&1
< hello, world

另請參閱

Envoy Go 網路過濾器

關於 Envoy Go 網路過濾器的更多資訊。

Envoy Go HTTP 過濾器

關於 Envoy Go HTTP 過濾器的更多資訊。

Go 外掛程式 API

Envoy Go 外掛程式 API 的概述。