Envoy 过滤器链配置框架
filter_chains配置段
https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/listener/v3/listener_components.proto#envoy-v3-api-msg-config-listener-v3-filterchain
--
listeners:
...
filter_chains:
filter_chain_match: {...}
filters: [] # 组成过滤器链的单个网络过滤器列表,用于与侦听器建立连接。顺序很重要,因为过滤器在连接事件发生时按顺序处理。注意:如果过滤器列表为空,则默认关闭连接。
use_proxy_proto: {...}
transport_socket: {...}
transport_socket_connect_timeout: {...}
name: ...
filters配置段
filters配置段框架
https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/listener/v3/listener_components.proto#envoy-v3-api-msg-config-listener-v3-filter
--
listeners:
...
filter_chains:
filter_chain_match: {...}
use_proxy_proto: {...}
transport_socket: {...}
transport_socket_connect_timeout: {...}
name: ...
filters: # 组成过滤器链的单个网络过滤器列表,用于与侦听器建立连接。顺序很重要,因为过滤器在连接事件发生时按顺序处理。注意:如果过滤器列表为空,则默认关闭连接。
name: ... # 过滤器配置的名称。取决于typed_config配置的过滤器指定的名称。
typed_config: {...} # 过滤器特定配置,这取决于被实例化的过滤器。
filters.typed_config支持列表
envoy.filters.network.http_connection_manager配置示例
https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/filters/network/http_connection_manager/v3/http_connection_manager.proto#extension-envoy-filters-network-http-connection-manager
--
listeners:
...
filter_chains:
filter_chain_match: {...}
use_proxy_proto: {...}
transport_socket: {...}
transport_socket_connect_timeout: {...}
name: ...
filters: # 组成过滤器链的单个网络过滤器列表,用于与侦听器建立连接。顺序很重要,因为过滤器在连接事件发生时按顺序处理。注意:如果过滤器列表为空,则默认关闭连接。
name: envoy.filters.network.http_connection_manager # 过滤器配置的名称。取决于typed_config配置的过滤器指定的名称。
typed_config: # 过滤器特定配置,这取决于被实例化的过滤器。
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
codec_type: ...
stat_prefix: ...
rds: {...}
route_config: {...}
scoped_routes: {...}
http_filters: []
add_user_agent: {...}
tracing: {...}
common_http_protocol_options: {...}
http_protocol_options: {...}
http2_protocol_options: {...}
server_name: ...
server_header_transformation: ...
scheme_header_transformation: {...}
max_request_headers_kb: {...}
stream_idle_timeout: {...}
request_timeout: {...}
request_headers_timeout: {...}
drain_timeout: {...}
delayed_close_timeout: {...}
access_log: []
use_remote_address: {...}
xff_num_trusted_hops: ...
original_ip_detection_extensions: []
internal_address_config: {...}
skip_xff_append: ...
via: ...
generate_request_id: {...}
preserve_external_request_id: ...
always_set_request_id_in_response: ...
forward_client_cert_details: ...
set_current_client_cert_details: {...}
proxy_100_continue: ...
upgrade_configs: []
normalize_path: {...}
merge_slashes: ...
path_with_escaped_slashes_action: ...
request_id_extension: {...}
local_reply_config: {...}
strip_matching_host_port: ...
strip_any_host_port: ...
stream_error_on_invalid_http_message: {...}
strip_trailing_host_dot: ...
proxy_status_config: {...}
http_filters配置段
https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/filters/network/http_connection_manager/v3/http_connection_manager.proto#envoy-v3-api-msg-extensions-filters-network-http-connection-manager-v3-httpfilter
http_filters配置框架
--
listeners:
...
filter_chains:
...
filters: # 组成过滤器链的单个网络过滤器列表,用于与侦听器建立连接。顺序很重要,因为过滤器在连接事件发生时按顺序处理。注意:如果过滤器列表为空,则默认关闭连接。
name: ... # 过滤器配置的名称。取决于typed_config配置的过滤器指定的名称。
typed_config: {...} # 过滤器特定配置,这取决于被实例化的过滤器。
...
http_filters:
name: ... # 过滤器配置的名称。它还用作 ExtensionConfigDS 中的资源名称。取决于typed_config配置的过滤器指定的名称。
typed_config: {...} # 过滤器特定配置,这取决于被实例化的过滤器。只能设置typed_config、config_discovery之一。
config_discovery: {...} # 扩展配置发现服务的配置源说明符。如果发生故障且没有默认配置,HTTP 侦听器会以代码 500 进行响应。通过此机制交付的扩展配置预计不需要预热。只能设置typed_config、config_discovery之一。
is_optional: ...
http_filters.typed_config支持列表
envoy.filters.http.router过滤器配置示例
https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/filters/http/router/v3/router.proto#extension-envoy-filters-http-router
--
listeners:
...
filter_chains:
filter_chain_match: {...}
use_proxy_proto: {...}
transport_socket: {...}
transport_socket_connect_timeout: {...}
name: ...
filters: # 组成过滤器链的单个网络过滤器列表,用于与侦听器建立连接。顺序很重要,因为过滤器在连接事件发生时按顺序处理。注意:如果过滤器列表为空,则默认关闭连接。
name: envoy.filters.network.http_connection_manager # 过滤器配置的名称。取决于typed_config配置的过滤器指定的名称。
typed_config: # 过滤器特定配置,这取决于被实例化的过滤器。
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
...
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
dynamic_stats: {...}
start_child_span: ...
upstream_log: []
suppress_envoy_headers: ...
strict_check_headers: []
respect_expected_rq_timeout: ...
suppress_grpc_request_failure_code_stats: ...
envoy.filters.http.fault配置示例
https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/filters/http/fault/v3/fault.proto#extension-envoy-filters-http-fault
--
listeners:
...
filter_chains:
filter_chain_match: {...}
use_proxy_proto: {...}
transport_socket: {...}
transport_socket_connect_timeout: {...}
name: ...
filters: # 组成过滤器链的单个网络过滤器列表,用于与侦听器建立连接。顺序很重要,因为过滤器在连接事件发生时按顺序处理。注意:如果过滤器列表为空,则默认关闭连接。
name: envoy.filters.network.http_connection_manager # 过滤器配置的名称。取决于typed_config配置的过滤器指定的名称。
typed_config: # 过滤器特定配置,这取决于被实例化的过滤器。
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
...
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
- name: envoy.filters.http.fault
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.fault.v3.HTTPFault
delay: # 注入延迟,延迟和请求中止至少要定义一个;
fixed_delay: {...} # 持续时长,将请求转发至上游主机之前添加固定延迟;
header_delay: {...} # 基于HTTP标头的指定控制故障延迟;
percentage: {...} # 将注入迟延的 操作/连接/请求(operations/connections/requests) 的百分比,意指将错误注入到多大比例的请求操作上;
abort: # 注入请求中止
percentage: {...} # 将使用的错误代码中止的 请求/操作/连接 的百分比
http_status: ... # 用于中止HTTP请求的状态码;http_status、grpc_status和header_status三者仅能且必须定义一个;
grpc_status: ... # 用于中止grpc请求的状态码;
header_abort: # 由HTTP标头控制的中止;
upstream_cluster: ... # 过路器适配的上游集群,即仅生效于指定的目标集群
headers: [] # 过滤器适配的请求报文标头列表,匹配检测时,各标头间为“与”关系;
downstream_nodes: [] # 要注入故障的下游主机列表,未指定时将匹配所有主机;
max_active_faults: {...} # 在同一个时间点所允许的最大活动故障数,默认为不限制;可以被运行时参数config_http_filters_fault_injection_runtime所覆盖;
response_rate_limit: {...} # 响应速率限制,可以被运行时参数fault.http.rate_limit.response_percent所覆盖;此为单流或连接级别的限制
fixed_limit: {...} # 固定速率,单位KiB/s;
header_limit: {...} # 限制为HTTP首部的指定的速率;
percentage: {...} # 将注入的速率限制为 操作/连接/请求(operations/connections/requests) 的百分比;
delay_percent_runtime: ...
abort_percent_runtime: ...
delay_duration_runtime: ...
abort_http_status_runtime: ...
max_active_faults_runtime: ...
response_rate_limit_percent_runtime: ...
abort_grpc_status_runtime: ...
disable_downstream_cluster_stats: ...
envoy.filters.http.cors配置示例
https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/filters/http/cors/v3/cors.proto#extension-envoy-filters-http-cors
--
listeners:
...
filter_chains:
filter_chain_match: {...}
use_proxy_proto: {...}
transport_socket: {...}
transport_socket_connect_timeout: {...}
name: ...
filters: # 组成过滤器链的单个网络过滤器列表,用于与侦听器建立连接。顺序很重要,因为过滤器在连接事件发生时按顺序处理。注意:如果过滤器列表为空,则默认关闭连接。
name: envoy.filters.network.http_connection_manager # 过滤器配置的名称。取决于typed_config配置的过滤器指定的名称。
typed_config: # 过滤器特定配置,这取决于被实例化的过滤器。
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
...
http_filters:
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
- name: envoy.filters.http.cors
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.cors.v3.Cors
访问日志过滤器
https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/accesslog/v3/accesslog.proto#envoy-v3-api-msg-config-accesslog-v3-accesslogfilter
日志过滤器配置框架
--
listeners:
...
filter_chains:
filter_chain_match: {...}
use_proxy_proto: {...}
transport_socket: {...}
transport_socket_connect_timeout: {...}
name: ...
filters: # 组成过滤器链的单个网络过滤器列表,用于与侦听器建立连接。顺序很重要,因为过滤器在连接事件发生时按顺序处理。注意:如果过滤器列表为空,则默认关闭连接。
name: envoy.filters.network.http_connection_manager # 过滤器配置的名称。取决于typed_config配置的过滤器指定的名称。
typed_config: # 过滤器特定配置,这取决于被实例化的过滤器。
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
...
access_log: # 访问日志配置
name: ... # 要实例化的访问日志实现的名称,该名称必须与静态注册的访问日志相匹配,当前的内置的日志记录器有envoy.access_loggers.file、envoy.access_loggers.http_grpc、envoy.access_loggers.open_telemetry、envoy.access_loggers.stream、envoy.access_loggers.tcp_grpc和envoy.access_loggers.wasm几种
filter: # 用于确定输出哪些日志信息的过滤器,但仅能选择使用其中一种;
status_code_filter: {...} # 状态码过滤器。
duration_filter: {...} # 持续时间过滤器。
not_health_check_filter: {...} # 不健康检查过滤器。
traceable_filter: {...} # 可追踪过滤器。
runtime_filter: {...} # 运行时过滤器。
and_filter: {...}
or_filter: {...}
header_filter: {...}
response_flag_filter: {...}
grpc_status_filter: {...} # gRPC 状态过滤器。
extension_filter: {...} # 扩展过滤器。envoy.access_loggers.extension_filters.cel。
metadata_filter: {...} # 元数据过滤器
typed_config: {...} # 与选定的日志记录器类型相关的专用配置
access_log.typed_config支持列表
envoy.access_loggers.file配置格式
--
listeners:
...
filter_chains:
filter_chain_match: {...}
use_proxy_proto: {...}
transport_socket: {...}
transport_socket_connect_timeout: {...}
name: ...
filters: # 组成过滤器链的单个网络过滤器列表,用于与侦听器建立连接。顺序很重要,因为过滤器在连接事件发生时按顺序处理。注意:如果过滤器列表为空,则默认关闭连接。
name: envoy.filters.network.http_connection_manager # 过滤器配置的名称。取决于typed_config配置的过滤器指定的名称。
typed_config: # 过滤器特定配置,这取决于被实例化的过滤器。
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
...
access_log: # 访问日志配置
name: envoy.access_loggers.file
typed_config: # 与选定的日志记录器类型相关的专用配置
"@type": type.googleapis.com/envoy.extensions.access_loggers.file.v3.FileAccessLog
path: ... # 本地文件系统上的日志文件路径;
format: ... # 访问日志格式字符串,Envoy有默认的日志格式,也支持用户自定义;该字段已废弃,将被log_format所取代;
json_format: {...} # json格式的访问日志字符串;该字段已废弃,将被log_format所取代;
typed_json_format: {...} # json格式的访问日志字符串;该字段已废弃,将被log_format所取代;
log_format: # 访问日志数据及格式定义,未定义时将使用默认值;format、json_format、typed_json_format和log_format仅可定义一个;
text_format: "[%START_TIME%] \"%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%\" %RESPONSE_CODE% %RESPONSE_FLAGS%
%BYTES_RECEIVED% %BYTES_SENT% %DURATION% %RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)% \"%REQ(X-FORWARDED-FOR)%\" \"%REQ(USER-AGENT)%\" \"%REQ(XREQUEST-ID)%\" \"%REQ(:AUTHORITY)%\" \"%UPSTREAM_HOST%\" \"%DOWNSTREAM_REMOTE_ADDRESS_WITHOUT_PORT%\"\n" # 支持命令操作符的文本字串;text_format、json_format和text_format_source仅可定义一个
json_format: {"start": "[%START_TIME%] ", "method": "%REQ(:METHOD)%", "url": "%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%", "protocol": "%PROTOCOL%", "status":
"%RESPONSE_CODE%", "respflags": "%RESPONSE_FLAGS%", "bytes-received": "%BYTES_RECEIVED%", "bytes-sent": "%BYTES_SENT%", "duration": "%DURATION%",
"upstream-service-time": "%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%", "x-forwarded-for": "%REQ(X-FORWARDED-FOR)%", "user-agent": "%REQ(USER-AGENT)%",
"request-id": "%REQ(X-REQUEST-ID)%", "authority": "%REQ(:AUTHORITY)%", "upstream-host": "%UPSTREAM_HOST%", "remote-ip":
"%DOWNSTREAM_REMOTE_ADDRESS_WITHOUT_PORT%"} # 支持命令操作符的json字串
text_format_source: {...} # 支持命令操作符的文本字串,字串来自filename、inline_bytes或inline_string数据源
omit_empty_values: ... # 是否忽略空值
content_type: ... # 内容类型,文本的默认类型为text/plain,json的默认类型为application/json
formatters: [] # 调用的日志格式化插件
filter: # 用于确定输出哪些日志信息的过滤器,但仅能选择使用其中一种;
status_code_filter: {...} # 状态码过滤器。
duration_filter: {...} # 持续时间过滤器。
not_health_check_filter: {...} # 不健康检查过滤器。
traceable_filter: {...} # 可追踪过滤器。
runtime_filter: {...} # 运行时过滤器。
and_filter: {...}
or_filter: {...}
header_filter: {...}
response_flag_filter: {...}
grpc_status_filter: {...} # gRPC 状态过滤器。
extension_filter: {...} # 扩展过滤器。
metadata_filter: {...} # 元数据过滤器