网络过滤器

网络过滤器在 TCP 连接级别处理流量,支持各种协议和功能。

TCP 代理过滤器

基本配置

listeners:
- name: listener_0
  address:
    socket_address:
      address: 0.0.0.0
      port_value: 10000
  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: tcp_service
        access_log:
        - name: envoy.access_loggers.file
          typed_config:
            "@type": type.googleapis.com/envoy.extensions.access_loggers.file.v3.FileAccessLog
            path: "/var/log/envoy/tcp_access.log"

高级配置

- 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: tcp_service
    idle_timeout: 1h
    max_downstream_connection_duration: 2h
    access_log:
    - name: envoy.access_loggers.file
      typed_config:
        "@type": type.googleapis.com/envoy.extensions.access_loggers.file.v3.FileAccessLog
        path: "/var/log/envoy/tcp_access.log"
        format: "[%START_TIME%] %DOWNSTREAM_REMOTE_ADDRESS% -> %UPSTREAM_HOST% %RESPONSE_FLAGS%\n"

MongoDB 代理过滤器

基本配置

listeners:
- name: listener_0
  address:
    socket_address:
      address: 0.0.0.0
      port_value: 27017
  filter_chains:
  - filters:
    - name: envoy.filters.network.mongo_proxy
      typed_config:
        "@type": type.googleapis.com/envoy.extensions.filters.network.mongo_proxy.v3.MongoProxy
        stat_prefix: mongo_proxy
        access_log: "/var/log/envoy/mongo_access.log"
        emit_dynamic_metadata: true
    - 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: mongo_cluster

MongoDB 功能

  • 解析 MongoDB 协议
  • 记录查询和响应
  • 支持动态元数据
  • 提供详细的统计信息

Redis 代理过滤器

基本配置

listeners:
- name: listener_0
  address:
    socket_address:
      address: 0.0.0.0
      port_value: 6379
  filter_chains:
  - filters:
    - name: envoy.filters.network.redis_proxy
      typed_config:
        "@type": type.googleapis.com/envoy.extensions.filters.network.redis_proxy.v3.RedisProxy
        stat_prefix: redis_proxy
        settings:
          op_timeout: 5s
          enable_hashtagging: true
          enable_redirection: true
          max_buffer_size_before_flush: 16384
          buffer_flush_timeout: 3ms
          max_upstream_unknown_connections: 100
        prefix_routes:
          catch_all_route:
            cluster: redis_cluster

Redis 集群配置

clusters:
- name: redis_cluster
  connect_timeout: 0.25s
  type: STRICT_DNS
  lb_policy: MAGLEV
  load_assignment:
    cluster_name: redis_cluster
    endpoints:
    - lb_endpoints:
      - endpoint:
          address:
            socket_address:
              address: redis-1
              port_value: 6379
      - endpoint:
          address:
            socket_address:
              address: redis-2
              port_value: 6379
      - endpoint:
          address:
            socket_address:
              address: redis-3
              port_value: 6379

MySQL 代理过滤器

基本配置

listeners:
- name: listener_0
  address:
    socket_address:
      address: 0.0.0.0
      port_value: 3306
  filter_chains:
  - filters:
    - name: envoy.filters.network.mysql_proxy
      typed_config:
        "@type": type.googleapis.com/envoy.extensions.filters.network.mysql_proxy.v3.MySQLProxy
        stat_prefix: mysql_proxy
        access_log: "/var/log/envoy/mysql_access.log"
    - 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: mysql_cluster

Thrift 代理过滤器

基本配置

listeners:
- name: listener_0
  address:
    socket_address:
      address: 0.0.0.0
      port_value: 9090
  filter_chains:
  - filters:
    - name: envoy.filters.network.thrift_proxy
      typed_config:
        "@type": type.googleapis.com/envoy.extensions.filters.network.thrift_proxy.v3.ThriftProxy
        stat_prefix: thrift_proxy
        transport: AUTO_TRANSPORT
        protocol: AUTO_PROTOCOL
        route_config:
          name: local_route
          routes:
          - match:
              method_name: "getUser"
            route:
              cluster: user_service

Dubbo 代理过滤器

基本配置

listeners:
- name: listener_0
  address:
    socket_address:
      address: 0.0.0.0
      port_value: 20880
  filter_chains:
  - filters:
    - name: envoy.filters.network.dubbo_proxy
      typed_config:
        "@type": type.googleapis.com/envoy.extensions.filters.network.dubbo_proxy.v3.DubboProxy
        stat_prefix: dubbo_proxy
        protocol_type: Dubbo
        serialization_type: Hessian2
        route_config:
        - name: local_route
          interface: "com.example.UserService"
          routes:
          - match:
              method:
                name:
                  exact: "getUser"
            route:
              cluster: user_service

过滤器链配置

多过滤器组合

listeners:
- name: listener_0
  address:
    socket_address:
      address: 0.0.0.0
      port_value: 10000
  filter_chains:
  - filters:
    - name: envoy.filters.network.rate_limit
      typed_config:
        "@type": type.googleapis.com/envoy.extensions.filters.network.ratelimit.v3.RateLimit
        stat_prefix: rate_limit
        domain: rate_limit_domain
        rate_limit_service:
          transport_api_version: V3
          grpc_service:
            envoy_grpc:
              cluster_name: rate_limit_cluster
    - 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: tcp_service

过滤器统计

统计指标

网络过滤器提供丰富的统计指标:

  • downstream_cx_total:下游连接总数
  • downstream_cx_active:活跃下游连接数
  • downstream_cx_destroy:销毁的下游连接数
  • downstream_cx_destroy_remote:远程关闭的连接数
  • downstream_cx_destroy_local:本地关闭的连接数

自定义统计

- name: envoy.filters.network.tcp_proxy
  typed_config:
    "@type": type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy
    stat_prefix: custom_tcp_proxy
    cluster: tcp_service
    access_log:
    - name: envoy.access_loggers.file
      typed_config:
        "@type": type.googleapis.com/envoy.extensions.access_loggers.file.v3.FileAccessLog
        path: "/var/log/envoy/custom_tcp_access.log"
        format: "[%START_TIME%] %DOWNSTREAM_REMOTE_ADDRESS% -> %UPSTREAM_HOST% %RESPONSE_FLAGS% %BYTES_RECEIVED% %BYTES_SENT%\n"

最佳实践

1. 性能优化

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

2. 监控和调试

  • 启用访问日志
  • 监控统计指标
  • 设置性能告警
  • 定期审查配置

3. 安全考虑

  • 验证上游连接
  • 使用 TLS 加密
  • 实施访问控制
  • 监控异常流量

注意事项

  • 网络过滤器会影响连接性能
  • 复杂的过滤器链可能难以调试
  • 需要确保协议兼容性
  • 配置变更需要谨慎测试

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

文章导航

章节内容

这是章节的内容页面。

章节概览