SNI 动态转发代理

Attention

SNI 动态转发代理目前还在 alpha 阶段,还不能用于生产环境。

通过 TLS 检查 网络监听过滤器,这个网络过滤器和 动态转发代理集群 的组合,Envoy 支持基于 SNI 的动态转发代理。 该实现的机制与 HTTP 动态转发代理 类似,但使用 SNI 中的值作为目标主机。

以下是完整的配置,该配置包含了这个过滤器和 动态转发代理集群 。过滤器和集群都必须一起配置并且指向相同的 DNS 缓存参数,以便让 Envoy 作为 SNI 动态转发代理。

Note

下面的配置没有终止监听器的 TLS,因此不需要在集群中配置 TLS 上下文,TLS 握手机制由 Envoy 传递。

admin:
  access_log_path: /tmp/admin_access.log
  address:
    socket_address:
      protocol: TCP
      address: 127.0.0.1
      port_value: 9901
static_resources:
  listeners:
  - name: listener_0
    address:
      socket_address:
        protocol: TCP
        address: 0.0.0.0
        port_value: 10000
    listener_filters:
      - name: envoy.filters.listener.tls_inspector
    filter_chains:
      - filters:
          - name: envoy.filters.network.sni_dynamic_forward_proxy
            typed_config:
              "@type": type.googleapis.com/envoy.extensions.filters.network.sni_dynamic_forward_proxy.v3alpha.FilterConfig
              port_value: 443
              dns_cache_config:
                name: dynamic_forward_proxy_cache_config
                dns_lookup_family: V4_ONLY
          - name: envoy.tcp_proxy
            typed_config:
              "@type": type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy
              stat_prefix: tcp
              cluster: dynamic_forward_proxy_cluster
  clusters:
  - name: dynamic_forward_proxy_cluster
    connect_timeout: 1s
    lb_policy: CLUSTER_PROVIDED
    cluster_type:
      name: envoy.clusters.dynamic_forward_proxy
      typed_config:
        "@type": type.googleapis.com/envoy.extensions.clusters.dynamic_forward_proxy.v3.ClusterConfig
        dns_cache_config:
          name: dynamic_forward_proxy_cache_config
          dns_lookup_family: V4_ONLY