用户数据报协议 (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 应该将端口 10000 上的 UDP 代理到端口 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