监听器组件(proto)
监听器 配置概述
config.listener.v3.Filter
[config.listener.v3.Filter proto]
{
"name": ...,
"typed_config": {...},
"config_discovery": {...}
}
- 名称
(string, REQUIRED) 过滤器配置的名称。
- typed_config
(Any) 依赖于正在实例化的过滤器的过滤器特定配置。有关更多文档,请参阅支持的过滤器。
只能设置 typed_config 或 config_discovery 之一。
- config_discovery
(config.core.v3.ExtensionConfigSource) 扩展配置发现服务的配置源说明符。在发生故障且没有默认配置的情况下,监听器将关闭连接。
只能设置 typed_config 或 config_discovery 之一。
config.listener.v3.FilterChainMatch
[config.listener.v3.FilterChainMatch proto]
指定用于为监听器选择特定过滤器链的匹配条件。
为了选择过滤器链,所有 它的条件都必须由传入连接满足,这些连接的属性由网络堆栈和/或监听器过滤器设置。
以下顺序适用
目标端口。
目标 IP 地址。
服务器名称(例如 TLS 协议的 SNI),
传输协议。
应用程序协议(例如 TLS 协议的 ALPN)。
直接连接的源 IP 地址(当使用覆盖源地址的监听器过滤器(例如 Proxy Protocol 监听器过滤器)时,这将与源 IP 地址不同)。
源类型(例如,任何网络、本地网络或外部网络)。
源 IP 地址。
源端口。
对于允许范围或通配符的条件,将在所有配置的过滤器链中使用与传入连接匹配的最特定值(例如,对于 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) 如果不为空,则为在确定过滤器链匹配时要考虑的传输协议。此值将与新连接的传输协议进行比较,当它由监听器过滤器之一检测到时。
建议的值包括
raw_buffer- 默认值,在没有检测到传输协议时使用,tls- 由 envoy.filters.listener.tls_inspector 在检测到 TLS 协议时设置。
- application_protocols
(repeated string) 如果不为空,则为在确定过滤器链匹配时要考虑的应用程序协议列表(例如 TLS 协议的 ALPN)。这些值将与新连接的应用程序协议进行比较,当它由监听器过滤器之一检测到时。
建议的值包括
http/1.1- 由 envoy.filters.listener.tls_inspector 设置,h2- 由 envoy.filters.listener.tls_inspector 设置
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的传输套接字以及 DownstreamTlsContext 在typed_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_match、and_match、not_match、any_match、destination_port_range 中的恰好一个。
- and_match
(config.listener.v3.ListenerFilterChainMatchPredicate.MatchSet) 描述逻辑 AND 的集合。如果集合中的所有成员都匹配,则匹配配置匹配。
必须设置 or_match、and_match、not_match、any_match、destination_port_range 中的恰好一个。
- not_match
(config.listener.v3.ListenerFilterChainMatchPredicate) 否定匹配。如果否定匹配条件匹配,则匹配配置将匹配。
必须设置 or_match、and_match、not_match、any_match、destination_port_range 中的恰好一个。
- any_match
(bool) 匹配配置将始终匹配。
必须设置 or_match、and_match、not_match、any_match、destination_port_range 中的恰好一个。
- destination_port_range
(type.v3.Int32Range) 匹配目标端口。特别是,如果拥有监听器过滤器的过滤器在 original_dst 监听器过滤器 之后,则匹配评估必须使用恢复的本地端口。
必须设置 or_match、and_match、not_match、any_match、destination_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_config 或 config_discovery 之一。
- config_discovery
(config.core.v3.ExtensionConfigSource) 扩展配置发现服务的配置源说明符。在发生故障且没有默认配置的情况下,监听器将关闭连接。
只能设置 typed_config 或 config_discovery 之一。
- filter_disabled
(config.listener.v3.ListenerFilterChainMatchPredicate) 可选的匹配谓词,用于禁用过滤器。当此字段为空时,过滤器处于启用状态。有关更多示例,请参阅 ListenerFilterChainMatchPredicate。