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: {...}  # 元数据过滤器          

 

posted @ 2022-08-31 18:00  小吉猫  阅读(706)  评论(0编辑  收藏  举报