流量捕获

Envoy 当前提供了一个实验性的传输套接字扩展,用于拦截流量并写入一个 protobuf 文件中。

警告

这个功能是实验性的,并存在一个已知的问题,当在给定的 socket 上出现很长的跟踪调用的时候会 OOM。 如果担心存在安全问题,也可以在构建时禁用它,请参阅 https://github.com/envoyproxy/envoy/blob/master/bazel/README.md#disabling-extensions

配置

捕获行为可以被配置在 ListenerCluster 上,提供了一种能力,可以分别针对上行流量和下行流量进行拦截。

要配置流量捕获, 添加一个envoy.transport_sockets.capture配置到 listener 或 cluster 上. 如:

transport_socket:
  name: envoy.transport_sockets.capture
  config:
    file_sink:
      path_prefix: /some/capture/path
    transport_socket:
      name: raw_buffer

若支持 TLS, 如:

transport_socket:
  name: envoy.transport_sockets.capture
  config:
    file_sink:
      path_prefix: /some/capture/path
    transport_socket:
      name: ssl
      config: <TLS context>

这里的 TLS 配置会分别替换现有在 listener 或 cluster 上 下行流量上行流量 的 TLS 配置.

任一的 socket 实例都会生成一个包含path前缀的跟踪文件. 如:/some/capture/path_0.pb

PCAP 传播

生成的跟踪文件可以被转成 libpcap format, 可以使用如 Wireshark 和 capture2pcap 这样的工具进行分析, 如:

bazel run @envoy_api//tools:capture2pcap /some/capture/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
Copyright © 温玉 2021 | 浙ICP备2020032454号 all right reserved,powered by Gitbook该文件修订时间: 2021-03-27 13:36:20

results matching ""

    No results matching ""