监听器过滤器

监听器过滤器在连接建立时处理网络级别的操作,如协议检测、连接修改等。

HTTP 检查器过滤器

基本配置

listeners:
- name: listener_0
  address:
    socket_address:
      address: 0.0.0.0
      port_value: 10000
  listener_filters:
  - name: envoy.filters.listener.http_inspector
    typed_config:
      "@type": type.googleapis.com/envoy.extensions.filters.listener.http_inspector.v3.HttpInspector
  filter_chains:
  - filter_chain_match:
      application_protocols: ["http/1.0", "http/1.1", "h2c"]
    filters:
    - name: envoy.filters.network.http_connection_manager
      typed_config:
        "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
        stat_prefix: ingress_http
        route_config:
          name: local_route
          virtual_hosts:
          - name: local_service
            domains: ["*"]
            routes:
            - match:
                prefix: "/"
              route:
                cluster: some_service

HTTP 检查器功能

  • 检测 HTTP/1.0、HTTP/1.1、HTTP/2 协议
  • 自动设置 application_protocols 字段
  • 支持 HTTP/2 明文连接(h2c)

TLS 检查器过滤器

基本配置

listeners:
- name: listener_0
  address:
    socket_address:
      address: 0.0.0.0
      port_value: 443
  listener_filters:
  - name: envoy.filters.listener.tls_inspector
    typed_config:
      "@type": type.googleapis.com/envoy.extensions.filters.listener.tls_inspector.v3.TlsInspector
  filter_chains:
  - filter_chain_match:
      transport_protocol: "tls"
      server_names: ["example.com"]
    transport_socket:
      name: envoy.transport_sockets.tls
      typed_config:
        "@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
        common_tls_context:
          tls_certificates:
          - certificate_chain:
              filename: "/etc/ssl/certs/example.com.crt"
            private_key:
              filename: "/etc/ssl/private/example.com.key"
    filters:
    - name: envoy.filters.network.http_connection_manager
      typed_config:
        "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
        stat_prefix: ingress_http
        route_config:
          name: local_route
          virtual_hosts:
          - name: example_com
            domains: ["example.com"]
            routes:
            - match:
                prefix: "/"
              route:
                cluster: example_service

TLS 检查器功能

  • 检测 TLS 握手
  • 提取 SNI(Server Name Indication)
  • 支持 ALPN(Application-Layer Protocol Negotiation)
  • 设置 transport_protocolserver_names 字段

代理协议过滤器

基本配置

listeners:
- name: listener_0
  address:
    socket_address:
      address: 0.0.0.0
      port_value: 10000
  listener_filters:
  - name: envoy.filters.listener.proxy_protocol
    typed_config:
      "@type": type.googleapis.com/envoy.extensions.filters.listener.proxy_protocol.v3.ProxyProtocol
  filter_chains:
  - filters:
    - name: envoy.filters.network.http_connection_manager
      typed_config:
        "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
        stat_prefix: ingress_http
        route_config:
          name: local_route
          virtual_hosts:
          - name: local_service
            domains: ["*"]
            routes:
            - match:
                prefix: "/"
              route:
                cluster: some_service

代理协议功能

  • 解析 PROXY 协议 v1 和 v2
  • 提取真实客户端地址
  • 支持 TCP 和 UDP 协议
  • 设置 x-forwarded-for 头部

原始目标过滤器

基本配置

listeners:
- name: listener_0
  address:
    socket_address:
      address: 0.0.0.0
      port_value: 10000
  listener_filters:
  - name: envoy.filters.listener.original_dst
    typed_config:
      "@type": type.googleapis.com/envoy.extensions.filters.listener.original_dst.v3.OriginalDst
  filter_chains:
  - filters:
    - name: envoy.filters.network.tcp_proxy
      typed_config:
        "@type": type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy
        stat_prefix: tcp_proxy
        cluster: original_dst_cluster

原始目标功能

  • 恢复原始目标地址
  • 支持透明代理
  • 用于服务网格场景
  • 保持连接的真实目标

原始源过滤器

基本配置

listeners:
- name: listener_0
  address:
    socket_address:
      address: 0.0.0.0
      port_value: 10000
  listener_filters:
  - name: envoy.filters.listener.original_src
    typed_config:
      "@type": type.googleapis.com/envoy.extensions.filters.listener.original_src.v3.OriginalSrc
      mark: 123
  filter_chains:
  - filters:
    - name: envoy.filters.network.http_connection_manager
      typed_config:
        "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
        stat_prefix: ingress_http
        route_config:
          name: local_route
          virtual_hosts:
          - name: local_service
            domains: ["*"]
            routes:
            - match:
                prefix: "/"
              route:
                cluster: some_service

原始源功能

  • 恢复原始源地址
  • 设置网络标记
  • 用于透明代理
  • 保持连接的真实源

组合使用

多过滤器配置

listeners:
- name: listener_0
  address:
    socket_address:
      address: 0.0.0.0
      port_value: 443
  listener_filters:
  - name: envoy.filters.listener.tls_inspector
    typed_config:
      "@type": type.googleapis.com/envoy.extensions.filters.listener.tls_inspector.v3.TlsInspector
  - name: envoy.filters.listener.http_inspector
    typed_config:
      "@type": type.googleapis.com/envoy.extensions.filters.listener.http_inspector.v3.HttpInspector
  filter_chains:
  - filter_chain_match:
      transport_protocol: "tls"
      application_protocols: ["h2", "http/1.1"]
      server_names: ["example.com"]
    transport_socket:
      name: envoy.transport_sockets.tls
      typed_config:
        "@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
        common_tls_context:
          tls_certificates:
          - certificate_chain:
              filename: "/etc/ssl/certs/example.com.crt"
            private_key:
              filename: "/etc/ssl/private/example.com.key"
          alpn_protocols: ["h2", "http/1.1"]
    filters:
    - name: envoy.filters.network.http_connection_manager
      typed_config:
        "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
        stat_prefix: ingress_http
        route_config:
          name: local_route
          virtual_hosts:
          - name: example_com
            domains: ["example.com"]
            routes:
            - match:
                prefix: "/"
              route:
                cluster: example_service

最佳实践

过滤器顺序

  • TLS 检查器应在 HTTP 检查器之前
  • 原始目标过滤器应在最后
  • 考虑过滤器的性能影响

性能优化

  • 合理使用过滤器组合
  • 避免不必要的过滤器
  • 监控过滤器性能
  • 使用适当的超时设置

安全考虑

  • 验证客户端证书
  • 使用强加密套件
  • 监控异常连接
  • 实施访问控制

注意事项

  • 监听器过滤器会影响连接建立性能
  • 复杂的过滤器组合可能难以调试
  • 需要确保过滤器兼容性
  • 配置变更需要谨慎测试

监听器过滤器为 Envoy 提供了强大的连接处理能力,合理使用可以实现复杂的网络需求。

文章导航

章节内容

这是章节的内容页面。

章节概览

评论区