TCP 代理 (proto)

此扩展的限定名称为 envoy.filters.network.tcp_proxy

注意

此扩展旨在对不可信的下游流量具有鲁棒性。它假设上游是可信的。

提示

此扩展扩展并可与以下扩展类别一起使用

此扩展必须使用以下类型 URL 之一进行配置

TCP 代理 配置概述.

extensions.filters.network.tcp_proxy.v3.TcpProxy

[extensions.filters.network.tcp_proxy.v3.TcpProxy proto]

{
  "stat_prefix": ...,
  "cluster": ...,
  "weighted_clusters": {...},
  "on_demand": {...},
  "metadata_match": {...},
  "idle_timeout": {...},
  "access_log": [],
  "max_connect_attempts": {...},
  "hash_policy": [],
  "tunneling_config": {...},
  "max_downstream_connection_duration": {...},
  "access_log_flush_interval": {...},
  "flush_access_log_on_connected": ...,
  "access_log_options": {...}
}
stat_prefix

(string, REQUIRED) 在发出 统计信息 时使用的前缀。

cluster

(string) 要连接的上游集群。

必须设置 clusterweighted_clusters 之一。

weighted_clusters

(extensions.filters.network.tcp_proxy.v3.TcpProxy.WeightedCluster) 可以为给定路由指定多个上游集群。请求根据分配给每个集群的权重路由到其中一个上游集群。

必须设置 clusterweighted_clusters 之一。

on_demand

(extensions.filters.network.tcp_proxy.v3.TcpProxy.OnDemand) 上游集群的按需策略。它适用于 TcpProxy.clusterTcpProxy.weighted_clusters

metadata_match

(config.core.v3.Metadata) 子集负载均衡器使用的可选端点元数据匹配条件。上游集群中只有元数据与这里设置的元数据匹配的端点才会被考虑进行负载均衡。过滤器名称应指定为 envoy.lb

idle_timeout

(Duration) TCP 代理过滤器管理的连接的空闲超时。空闲超时定义为在上游或下游连接上没有发送或接收字节的期间。如果未设置,则默认空闲超时为 1 小时。如果设置为 0s,则超时将被禁用。可以通过为键 envoy.tcp_proxy.per_connection_idle_timeout_ms 设置每个连接过滤器状态对象来动态覆盖此配置。

警告

禁用此超时很可能导致连接泄漏,因为丢失了 TCP FIN 数据包等。

access_log

(repeated config.accesslog.v3.AccessLog) 此 tcp_proxy 发出的 访问日志 的配置。

max_connect_attempts

(UInt32Value) 在放弃之前将进行的最大不成功连接尝试次数。如果未指定参数,则将进行 1 次连接尝试。

hash_policy

(repeated type.v3.HashPolicy) TCP 代理哈希策略的可选配置。如果未设置 hash_policy,则基于哈希的负载均衡算法将随机选择一个主机。当前,哈希策略的数量限制为 1。

tunneling_config

(extensions.filters.network.tcp_proxy.v3.TcpProxy.TunnelingConfig) 如果设置,则此配置隧道,例如,在 HTTP CONNECT 上隧道 TCP 负载的配置选项。如果此消息不存在,则负载将按往常一样代理到上游。可以通过为键 envoy.tcp_proxy.disable_tunneling 设置每个连接过滤器状态对象来动态覆盖此配置并禁用每个连接的隧道。

max_downstream_connection_duration

(Duration) 连接的最大持续时间。持续时间定义为自连接建立以来的时间段。如果未设置,则没有最大持续时间。达到 max_downstream_connection_duration 时,连接将被关闭。持续时间必须至少为 1 毫秒。

access_log_flush_interval

(Duration) .. attention:: 此字段已弃用,建议使用 access_log_flush_interval。请注意,如果同时指定此字段和 access_log_flush_interval,则将忽略前者(已弃用字段)。

flush_access_log_on_connected

(bool) .. attention:: 此字段已弃用,建议使用 flush_access_log_on_connected。请注意,如果同时指定此字段和 flush_access_log_on_connected,则将忽略前者(已弃用字段)。

access_log_options

(extensions.filters.network.tcp_proxy.v3.TcpProxy.TcpAccessLogOptions) TCP 代理的附加访问日志选项。

extensions.filters.network.tcp_proxy.v3.TcpProxy.WeightedCluster

[extensions.filters.network.tcp_proxy.v3.TcpProxy.WeightedCluster proto]

允许指定多个上游集群以及权重,这些权重指示转发到每个集群的流量百分比。路由器根据这些权重选择上游集群。

{
  "clusters": []
}
clusters

(repeated extensions.filters.network.tcp_proxy.v3.TcpProxy.WeightedCluster.ClusterWeight, REQUIRED) 指定与路由关联的一个或多个上游集群。

extensions.filters.network.tcp_proxy.v3.TcpProxy.WeightedCluster.ClusterWeight

[extensions.filters.network.tcp_proxy.v3.TcpProxy.WeightedCluster.ClusterWeight proto]

{
  "name": ...,
  "weight": ...,
  "metadata_match": {...}
}
name

(string, REQUIRED) 上游集群的名称。

weight

(uint32) 当请求匹配路由时,上游集群的选择由其权重决定。clusters 数组中所有条目的权重之和决定总权重。

metadata_match

(config.core.v3.Metadata) 子集负载均衡器使用的可选端点元数据匹配条件。上游集群中只有元数据与这里设置的元数据匹配的端点才会被考虑进行负载均衡。请注意,这将与 TcpProxy.metadata_match 中提供的元数据合并,这里的值优先。过滤器名称应指定为 envoy.lb

extensions.filters.network.tcp_proxy.v3.TcpProxy.TunnelingConfig

[extensions.filters.network.tcp_proxy.v3.TcpProxy.TunnelingConfig proto]

在其他传输或应用程序层上隧道 TCP 的配置。隧道支持 HTTP/1.1 和 HTTP/2。上游协议由集群配置确定。

{
  "hostname": ...,
  "use_post": ...,
  "headers_to_add": [],
  "propagate_response_headers": ...,
  "post_path": ...,
  "propagate_response_trailers": ...
}
hostname

(string, REQUIRED) 发送到上游代理的合成 CONNECT 标头中的主机名。此字段如果设置则评估命令运算符,否则按原样返回主机名。

示例:使用下游 SNI 动态设置主机名

tunneling_config:
  hostname: "%REQUESTED_SERVER_NAME%:443"

示例:使用动态元数据动态设置主机名

tunneling_config:
  hostname: "%DYNAMIC_METADATA(tunnel:address)%"
use_post

(bool) 使用 POST 方法而不是 CONNECT 方法来隧道 TCP 流。‘protocol: bytestream’ 标头也不会为 HTTP/2 设置,以符合规范。

预期上游代理将 POST 负载转换为原始 TCP。

headers_to_add

(repeated config.core.v3.HeaderValueOption) 添加到上游代理的附加请求标头。这主要用于触发上游将 POST 请求转换回 CONNECT 请求。

不能覆盖 :-prefixed 伪标头或 Host: 标头。

propagate_response_headers

(bool) 将响应标头保存到下游信息过滤器状态,以便网络过滤器使用。过滤器状态键是 envoy.tcp_proxy.propagate_response_headers

post_path

(string) 与 POST 方法一起使用的路径。默认路径为 /。如果指定 post path 并且 use_post 字段 不为真,则将被拒绝。

propagate_response_trailers

(bool) 将响应尾部保存到下游信息过滤器状态,以便网络过滤器使用。过滤器状态键为 envoy.tcp_proxy.propagate_response_trailers

extensions.filters.network.tcp_proxy.v3.TcpProxy.OnDemand

[extensions.filters.network.tcp_proxy.v3.TcpProxy.OnDemand proto]

{
  "odcds_config": {...}
}
odcds_config

(config.core.v3.ConfigSource) 用于按需集群发现服务的可选配置。如果未指定,则按需集群发现将被禁用。当指定时,过滤器将暂停对未知集群的请求,并开始集群发现过程。当发现完成(成功或失败)时,请求将被恢复。

extensions.filters.network.tcp_proxy.v3.TcpProxy.TcpAccessLogOptions

[extensions.filters.network.tcp_proxy.v3.TcpProxy.TcpAccessLogOptions proto]

{
  "access_log_flush_interval": {...},
  "flush_access_log_on_connected": ...
}
access_log_flush_interval

(Duration) 刷新访问日志的间隔。默认情况下,TCP 代理在连接关闭时只会刷新一个访问日志。如果设置此字段,TCP 代理将以指定的间隔定期刷新访问日志。间隔必须至少为 1 毫秒。

flush_access_log_on_connected

(bool) 如果设置为 true,则当 TCP 代理已成功与上游建立连接时,将刷新访问日志。如果连接失败,则不会刷新访问日志。