Как настроить кластеры Envoy для обратного проксирования SNI sni_cluster? - PullRequest
0 голосов
/ 20 января 2020

Я хочу, чтобы Envoy завершил TLS и обратил прокси к нескольким кластерам на основе имени SNI, используемого в соединении TLS от клиента к Envoy. Соединения - это TCP (не HTTP).

Из документации сетевой фильтр sni_cluster использует значение SNI в соединении TLS в качестве имени восходящего кластера. Я думаю, это означает, что я должен быть в состоянии создать (например) 2 кластера, sni_1 и sni_2, и Envoy будет прокси-сервер к этим 2 кластерам, если SNI в соединении TLS совпадает с любым из этих двух значений.

В документации также говорится, что сетевой фильтр tcp_proxy должен быть настроен и настроен после sni_cluster.

Я использую следующую конфигурацию (у меня есть фиктивные значения в узлах кластера, поэтому игнорируйте их):

static_resources:
  listeners:
  - name: tcp_front_end
    address:
      socket_address: { address: 0.0.0.0, port_value: 5000 }


    filter_chains:
    - filters:
      - name: envoy.filters.network.sni_cluster
      - name: envoy.tcp_proxy
        config:
          stat_prefix: tcp
          max_connect_attempts: 3
      tls_context:
        common_tls_context:
          tls_certificates:
            - certificate_chain:
                filename: "/etc/envoy/cert.pem"
              private_key:
                filename: "/etc/envoy/key.pem"

  clusters:
  - name: sni_1
    connect_timeout: 0.25s
    type: LOGICAL_DNS
    dns_lookup_family: V4_ONLY
    lb_policy: ROUND_ROBIN
    hosts: [{ socket_address: { address: google.com, port_value: 443 }}]

  - name: sni_2
    connect_timeout: 0.25s
    type: LOGICAL_DNS
    dns_lookup_family: V4_ONLY
    lb_policy: ROUND_ROBIN
    hosts: [{ socket_address: { address: news.bbc.co.uk, port_value: 443 }}]

admin:
  access_log_path: /tmp/admin_access.log
  address:
    socket_address: { address: 0.0.0.0, port_value: 9091 }

Документация tcp_proxy также гласит:

Точно один из кластеров, weighted_clusters должен быть установлен.

Я не поместил секцию cluster в мою секцию фильтра tcp_proxy, так как не вижу, как определить кластер, к которому tcp_proxy должен подключиться, учитывая, что документация кажется сделать вывод, что фильтр sni_cluster должен указать это для меня.

Как мне добиться обратного прокси SNI с использованием TCP (не HTTP)?

...