You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Envoy如何实现全端口转发?附现有负载均衡配置

Envoy实现全端口转发方案

可以通过Envoy实现全端口转发,以下是两种常用的实现方式:

方案一:基于原始目标(Original Destination)过滤器

这种方式适合直接转发客户端请求的原始目标端口到后端的场景,无需预先定义固定监听端口。

核心配置要点

  • 监听配置设置bind_to_port: false,让Envoy不绑定固定端口,需结合iptables捕获所有端口流量
  • 添加original_destination过滤器,保留客户端请求的原始目标信息
  • 配置TCP代理过滤器,将流量转发到原始目标或指定集群

示例配置

static_resources:
  listeners:
    - name: all_port_listener
      address:
        socket_address:
          address: 0.0.0.0
          port_value: 0  # 端口0配合bind_to_port: false使用
      bind_to_port: false
      filter_chains:
        - filters:
            - name: envoy.filters.network.original_destination
              typed_config:
                "@type": type.googleapis.com/envoy.extensions.filters.network.original_destination.v3.OriginalDestination
            - name: envoy.filters.network.tcp_proxy
              typed_config:
                "@type": type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy
                stat_prefix: all_port_tcp_proxy
                cluster: dynamic_forward_cluster
  clusters:
    - name: dynamic_forward_cluster
      connect_timeout: 1s
      lb_policy: CLUSTER_PROVIDED
      type: ORIGINAL_DST

方案二:端口范围监听+PROXY协议

如果需要明确监听一段连续端口范围(比如全端口1-65535),可结合端口范围配置和PROXY协议,传递客户端原始地址信息到后端。

核心配置要点

  • 监听配置使用port_range指定覆盖的端口范围
  • 启用PROXY协议过滤器,传递客户端原始地址和端口
  • 配置TCP代理过滤器转发到目标集群(可复用你现有集群配置)

示例配置

static_resources:
  listeners:
    - name: port_range_listener
      address:
        socket_address:
          address: 0.0.0.0
          port_value: 1
          port_range:
            end: 65535
      filter_chains:
        - filters:
            - name: envoy.filters.network.proxy_protocol
              typed_config:
                "@type": type.googleapis.com/envoy.extensions.filters.network.proxy_protocol.v3.ProxyProtocol
            - name: envoy.filters.network.tcp_proxy
              typed_config:
                "@type": type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy
                stat_prefix: port_range_tcp_proxy
                cluster: apiserver
  clusters:
    - name: apiserver
      connect_timeout: 3600s
      lb_policy: round_robin
      type: STATIC
      load_assignment:
        cluster_name: "apiserver"
        endpoints:
          - lb_endpoints:
              - endpoint:
                  address:
                    socket_address:
                      address: 192.168.64.1
                      port_value: 60051
              - endpoint:
                  address:
                    socket_address:
                      address: 192.168.64.2
                      port_value: 60052

注意事项

  • 方案一需配合iptables规则将流量重定向到Envoy,示例命令:
    iptables -t nat -A PREROUTING -p tcp -j REDIRECT --to-port 15001
    
  • 方案二监听全端口会占用较多系统资源,建议根据实际需求缩小端口范围
  • 方案二中后端服务需支持PROXY协议,才能正确获取客户端原始地址

内容的提问来源于stack exchange,提问作者Chris G.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 04:15:08