监听器组件(proto)

监听器 配置概述

config.listener.v3.Filter

[config.listener.v3.Filter proto]

{
  "name": ...,
  "typed_config": {...},
  "config_discovery": {...}
}
名称

(string, REQUIRED) 过滤器配置的名称。

typed_config

(Any) 依赖于正在实例化的过滤器的过滤器特定配置。有关更多文档,请参阅支持的过滤器。

只能设置 typed_configconfig_discovery 之一。

config_discovery

(config.core.v3.ExtensionConfigSource) 扩展配置发现服务的配置源说明符。在发生故障且没有默认配置的情况下,监听器将关闭连接。

只能设置 typed_configconfig_discovery 之一。

config.listener.v3.FilterChainMatch

[config.listener.v3.FilterChainMatch proto]

指定用于为监听器选择特定过滤器链的匹配条件。

为了选择过滤器链,所有 它的条件都必须由传入连接满足,这些连接的属性由网络堆栈和/或监听器过滤器设置。

以下顺序适用

  1. 目标端口。

  2. 目标 IP 地址。

  3. 服务器名称(例如 TLS 协议的 SNI),

  4. 传输协议。

  5. 应用程序协议(例如 TLS 协议的 ALPN)。

  6. 直接连接的源 IP 地址(当使用覆盖源地址的监听器过滤器(例如 Proxy Protocol 监听器过滤器)时,这将与源 IP 地址不同)。

  7. 源类型(例如,任何网络、本地网络或外部网络)。

  8. 源 IP 地址。

  9. 源端口。

对于允许范围或通配符的条件,将在所有配置的过滤器链中使用与传入连接匹配的最特定值(例如,对于 SNI www.example.com,最特定的匹配将是 www.example.com,然后是 *.example.com,然后是 *.com,然后是任何没有 server_names 要求的过滤器链)。

另一种推理过滤器链匹配的方法:假设存在 N 个过滤器链。使用上述 8 个步骤修剪过滤器链集。在每个步骤中,最具体匹配属性的过滤器链将继续到下一步。监听器保证在所有步骤之后最多剩下 1 个过滤器链。

示例

对于目标端口,指定传入流量的目标端口的过滤器链是最具体的匹配。如果没有任何过滤器链指定确切的目标端口,则不指定端口的过滤器链是最具体的匹配。指定错误端口的过滤器链永远不会是最具体的匹配。

{
  "destination_port": {...},
  "prefix_ranges": [],
  "direct_source_prefix_ranges": [],
  "source_type": ...,
  "source_prefix_ranges": [],
  "source_ports": [],
  "server_names": [],
  "transport_protocol": ...,
  "application_protocols": []
}
destination_port

(UInt32Value) 可选的目标端口,在监听器上设置 use_original_dst 时用于确定过滤器链匹配时要考虑的端口。

prefix_ranges

(repeated config.core.v3.CidrRange) 如果不为空,则为 IP 地址和前缀长度,用于在监听器绑定到 0.0.0.0/:: 或指定 use_original_dst 时匹配地址。

direct_source_prefix_ranges

(repeated config.core.v3.CidrRange) 如果下游连接的直接连接的源 IP 地址包含在至少一个指定的子网中,则满足条件。如果未指定参数或列表为空,则会忽略直接连接的源 IP 地址。

source_type

(config.listener.v3.FilterChainMatch.ConnectionSourceType) 指定连接源 IP 匹配类型。可以是任何网络、本地网络或外部网络。

source_prefix_ranges

(repeated config.core.v3.CidrRange) 如果下游连接的源 IP 地址包含在至少一个指定的子网中,则满足条件。如果未指定参数或列表为空,则会忽略源 IP 地址。

source_ports

(repeated uint32) 如果下游连接的源端口包含在至少一个指定的端口中,则满足条件。如果未指定参数,则会忽略源端口。

server_names

(repeated string) 如果不为空,则为服务器名称列表(例如 TLS 协议的 SNI),在确定过滤器链匹配时要考虑的名称。这些值将与新连接的服务器名称进行比较,这些名称由监听器过滤器之一检测到。

服务器名称将与所有通配符域匹配,即 www.example.com 将首先与 www.example.com 匹配,然后是 *.example.com,然后是 *.com

请注意,不支持部分通配符,并且 *w.example.com 等值无效。值 * 也不受支持,并且应该省略 server_names

注意

有关如何配置 SNI 的更多信息,请参阅 常见问题解答条目

transport_protocol

(string) 如果不为空,则为在确定过滤器链匹配时要考虑的传输协议。此值将与新连接的传输协议进行比较,当它由监听器过滤器之一检测到时。

建议的值包括

application_protocols

(repeated string) 如果不为空,则为在确定过滤器链匹配时要考虑的应用程序协议列表(例如 TLS 协议的 ALPN)。这些值将与新连接的应用程序协议进行比较,当它由监听器过滤器之一检测到时。

建议的值包括

注意

目前,只有 TLS 检查器 提供基于请求的 ALPN 值的应用程序协议检测。

但是,ALPN 的使用几乎仅限于互联网上的 HTTP/2 流量,除非所有连接的客户端都已知使用 ALPN,否则匹配 h2 以外的值会导致大量假阴性。

Enum config.listener.v3.FilterChainMatch.ConnectionSourceType

[config.listener.v3.FilterChainMatch.ConnectionSourceType proto]

ANY

(DEFAULT) ⁣任何连接源都匹配。

SAME_IP_OR_LOOPBACK

⁣匹配来自同一主机的连接。

EXTERNAL

⁣匹配来自不同主机的连接。

config.listener.v3.FilterChain

[config.listener.v3.FilterChain proto]

过滤器链包含一组匹配条件、可选的 TLS 上下文、一组过滤器以及各种其他参数。

{
  "filter_chain_match": {...},
  "filters": [],
  "use_proxy_proto": {...},
  "transport_socket": {...},
  "transport_socket_connect_timeout": {...},
  "name": ...
}
filter_chain_match

(config.listener.v3.FilterChainMatch) 将连接与此过滤器链匹配时要使用的条件。

filters

(repeated config.listener.v3.Filter) 构成与监听器建立连接的过滤器链的一组独立网络过滤器。顺序很重要,因为过滤器会按顺序在连接事件发生时进行处理。注意:如果过滤器列表为空,连接将默认关闭。

对于 QUIC 监听器,可以创建除 HTTP 连接管理器 (HCM) 之外的网络过滤器,但由于连接实现与 TCP 相比有所不同,因此 onData() 方法将永远不会被调用。因此,用于 QUIC 监听器的网络过滤器应该只期望在新连接开始时执行工作(即在 onNewConnection() 中)。HCM 必须是链中最后一个(或唯一的)过滤器。

use_proxy_proto

(BoolValue) 监听器是否应在新连接上预期 PROXY 协议 V1 标头。如果启用此选项,监听器将假定连接的远程地址是在标头中指定的地址。包括 AWS ELB 在内的一些负载均衡器支持此选项。如果选项不存在或设置为 false,Envoy 将使用连接的物理对等地址作为远程地址。

此字段已弃用。请改用 PROXY 协议监听器过滤器

transport_socket

(config.core.v3.TransportSocket) 可选的自定义传输套接字实现,用于下游连接。要设置 TLS,请设置名称为 envoy.transport_sockets.tls 的传输套接字以及 DownstreamTlsContexttyped_config 中。如果没有指定传输套接字配置,新连接将使用纯文本建立。

transport_socket_connect_timeout

(Duration) 如果存在且不为零,则允许传入连接完成任何传输套接字协商的时间量。如果在传输报告连接建立之前此时间过期,连接将立即关闭。

名称

(string) 此过滤器链的唯一名称(或为空)。注意:filter_chain_matcher 要求过滤器链在监听器中具有唯一名称。

config.listener.v3.ListenerFilterChainMatchPredicate

[config.listener.v3.ListenerFilterChainMatchPredicate proto]

监听器过滤器链匹配配置。这是一个递归结构,允许使用各种逻辑运算符构建复杂的嵌套匹配配置。

示例

  • 如果目标端口为 3306,则匹配。

destination_port_range:
 start: 3306
 end: 3307
  • 如果目标端口为 3306 或 15000,则匹配。

or_match:
  rules:
    - destination_port_range:
        start: 3306
        end: 3307
    - destination_port_range:
        start: 15000
        end: 15001
{
  "or_match": {...},
  "and_match": {...},
  "not_match": {...},
  "any_match": ...,
  "destination_port_range": {...}
}
or_match

(config.listener.v3.ListenerFilterChainMatchPredicate.MatchSet) 描述逻辑 OR 的集合。如果集合中的任何成员匹配,则匹配配置匹配。

必须设置 or_matchand_matchnot_matchany_matchdestination_port_range 中的恰好一个。

and_match

(config.listener.v3.ListenerFilterChainMatchPredicate.MatchSet) 描述逻辑 AND 的集合。如果集合中的所有成员都匹配,则匹配配置匹配。

必须设置 or_matchand_matchnot_matchany_matchdestination_port_range 中的恰好一个。

not_match

(config.listener.v3.ListenerFilterChainMatchPredicate) 否定匹配。如果否定匹配条件匹配,则匹配配置将匹配。

必须设置 or_matchand_matchnot_matchany_matchdestination_port_range 中的恰好一个。

any_match

(bool) 匹配配置将始终匹配。

必须设置 or_matchand_matchnot_matchany_matchdestination_port_range 中的恰好一个。

destination_port_range

(type.v3.Int32Range) 匹配目标端口。特别是,如果拥有监听器过滤器的过滤器在 original_dst 监听器过滤器 之后,则匹配评估必须使用恢复的本地端口。

必须设置 or_matchand_matchnot_matchany_matchdestination_port_range 中的恰好一个。

config.listener.v3.ListenerFilterChainMatchPredicate.MatchSet

[config.listener.v3.ListenerFilterChainMatchPredicate.MatchSet proto]

用于逻辑运算的匹配配置集。

{
  "rules": []
}
rules

(repeated config.listener.v3.ListenerFilterChainMatchPredicate, REQUIRED) 构成集合的规则列表。

config.listener.v3.ListenerFilter

[config.listener.v3.ListenerFilter proto]

{
  "name": ...,
  "typed_config": {...},
  "config_discovery": {...},
  "filter_disabled": {...}
}
名称

(string, REQUIRED) 过滤器配置的名称。

typed_config

(Any) 依赖于正在实例化的过滤器的过滤器特定配置。有关更多文档,请参阅支持的过滤器。

提示

此扩展类别具有以下已知扩展

只能设置 typed_configconfig_discovery 之一。

config_discovery

(config.core.v3.ExtensionConfigSource) 扩展配置发现服务的配置源说明符。在发生故障且没有默认配置的情况下,监听器将关闭连接。

只能设置 typed_configconfig_discovery 之一。

filter_disabled

(config.listener.v3.ListenerFilterChainMatchPredicate) 可选的匹配谓词,用于禁用过滤器。当此字段为空时,过滤器处于启用状态。有关更多示例,请参阅 ListenerFilterChainMatchPredicate