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