流量监听

Envoy 目前提供两个实验性的扩展,可以监听流量

监听传输套接字配置

注意

监听传输套接字处于实验阶段,目前正在积极开发中。目前匹配条件、输出配置、输出接收器等功能集非常有限。随着时间的推移,功能将不断扩展,配置结构也可能会发生变化。

监听可以在 监听器集群 传输套接字上配置,分别提供对下游和上游 L4 连接的拦截能力。

要配置流量监听,请在监听器或集群中添加一个 envoy.transport_sockets.tap 传输套接字 配置。对于纯文本套接字,这可能看起来像

29      transport_socket:
30        name: envoy.transport_sockets.tap
31        typed_config:
32          "@type": type.googleapis.com/envoy.extensions.transport_sockets.tap.v3.Tap
33          common_config:
34            static_config:
35              match:
36                any_match: true
37              output_config:
38                sinks:
39                - format: PROTO_BINARY
40                  file_per_tap:
41                    path_prefix: /some/tap/path
42          transport_socket:
43            name: envoy.transport_sockets.raw_buffer
44            typed_config:
45              "@type": type.googleapis.com/envoy.extensions.transport_sockets.raw_buffer.v3.RawBuffer

对于 TLS 套接字,这将是

44    transport_socket:
45      name: envoy.transport_sockets.tap
46      typed_config:
47        "@type": type.googleapis.com/envoy.extensions.transport_sockets.tap.v3.Tap
48        common_config:
49          static_config:
50            match:
51              any_match: true
52            output_config:
53              sinks:
54              - format: PROTO_BINARY
55                file_per_tap:
56                  path_prefix: /some/tap/path
57        transport_socket:
58          name: envoy.transport_sockets.tls
59          typed_config:
60            "@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext

其中 TLS 上下文配置将替换监听器或集群上任何现有的 下游上游 TLS 配置,分别。

每个唯一的套接字实例都将生成一个以 path_prefix 为前缀的跟踪文件。例如,/some/tap/path_0.pb

缓冲数据限制

对于缓冲套接字监听,Envoy 将限制监听的正文数据量,以避免出现 OOM 情况。接收和传输数据的默认限制均为 1KiB。这可以通过 max_buffered_rx_bytesmax_buffered_tx_bytes 设置进行配置。当缓冲套接字监听被截断时,跟踪将通过 read_truncatedwrite_truncated 字段以及正文 truncated 字段来指示截断。

流式传输

监听传输套接字支持缓冲和流式传输,由 streaming 设置控制。缓冲时,将发出 SocketBufferedTrace 消息。流式传输时,将发出一系列 SocketStreamedTraceSegment

有关更多信息,请参阅 HTTP 监听过滤器流式传输 文档。HTTP 过滤器和传输套接字之间的许多概念是重叠的。

PCAP 生成

生成的跟踪文件可以转换为 libpcap 格式,适合使用 Wireshark 等工具进行分析,使用 tap2pcap 实用程序,例如

bazel run @envoy_api//tools:tap2pcap /some/tap/path_0.pb path_0.pcap
tshark -r path_0.pcap -d "tcp.port==10000,http2" -P
  1   0.000000    127.0.0.1  127.0.0.1    HTTP2 157 Magic, SETTINGS, WINDOW_UPDATE, HEADERS
  2   0.013713    127.0.0.1  127.0.0.1    HTTP2 91 SETTINGS, SETTINGS, WINDOW_UPDATE
  3   0.013820    127.0.0.1  127.0.0.1    HTTP2 63 SETTINGS
  4   0.128649    127.0.0.1  127.0.0.1    HTTP2 5586 HEADERS
  5   0.130006    127.0.0.1  127.0.0.1    HTTP2 7573 DATA
  6   0.131044    127.0.0.1  127.0.0.1    HTTP2 3152 DATA, DATA