使用者資料包協定 (UDP)

此沙箱提供了一個非常簡單的 Envoy 代理 UDP 的範例。

它還演示了 Envoy 管理介面端點提供的 UDP 流量統計資訊。

步驟 1: 建置沙箱

將目錄變更到 Envoy 儲存庫中的 examples/udp

啟動 Docker 組合

$ pwd
envoy/examples/udp
$ docker compose pull
$ docker compose up --build -d
$ docker compose ps

    Name                 Command                   State      Ports
-----------------------------------------------------------------------------------------------------------------------
udp_envoy-udp_1     /docker-entrypoint.sh /usr ... Up     10000/tcp, 0.0.0.0:10000->10000/udp, 0.0.0.0:10001->10001/tcp
udp_service-udp_1   python -u /udplistener.py      Up     5005/tcp, 5005/udp

Envoy 應將 UDP 從連接埠 10000 代理到監聽連接埠 5005 的上游伺服器。

Envoy 還提供了一個監聽連接埠 10001 的管理介面端點。

步驟 2: 發送一些 UDP 訊息

您可以使用 netcat 將數據包發送到由 Envoy 代理的上游伺服器

echo -n HELO | nc -4u -w1 127.0.0.1 10000
echo -n OLEH | nc -4u -w1 127.0.0.1 10000

步驟 3: 檢查上游 UDP 監聽器伺服器的日誌

檢查上游伺服器的日誌,您應該會看到您發送的數據包

$ docker compose logs service-udp
Attaching to udp_service-udp_1
service-udp_1  | Listening on UDP port 5005
service-udp_1  | HELO
service-udp_1  | OLEH

步驟 4: 查看 Envoy 管理介面的 UDP 統計資訊

您可以查看 Envoy 管理介面端點提供的 UDP 相關統計資訊。

例如,要查看非零統計資訊

$ curl -s http://127.0.0.1:10001/stats | grep udp | grep -v "\: 0"
cluster.service_udp.default.total_match_count: 1
cluster.service_udp.max_host_weight: 1
cluster.service_udp.membership_change: 1
cluster.service_udp.membership_healthy: 1
cluster.service_udp.membership_total: 1
cluster.service_udp.udp.sess_tx_datagrams: 2
cluster.service_udp.update_attempt: 1
cluster.service_udp.update_success: 1
cluster.service_udp.upstream_cx_tx_bytes_total: 8
udp.service.downstream_sess_active: 2
udp.service.downstream_sess_rx_bytes: 8
udp.service.downstream_sess_rx_datagrams: 2
udp.service.downstream_sess_total: 2
cluster.service_udp.upstream_cx_connect_ms: No recorded values
cluster.service_udp.upstream_cx_length_ms: No recorded values