Настройки HAProxy для подключения к Snowflake Data - PullRequest
1 голос
/ 31 января 2020

Я пытался подключиться к Snowflake с помощью драйвера ODB C через прокси-сервер, но пока не смог. Я использую HAProxy для этого.

Это из odbc.ini, где я настроил свой DSN:

[ODBC Data Sources]
SnowflakeDSII = Snowflake

[SnowflakeDSII]
Server = <account>.<region>.snowflakecomputing.com
Port = 443
UID = <username>
PWD = <password>
Schema =
Warehouse =
Driver = /opt/snowflake/snowflakeodbc/lib/universal/libSnowflake.dylib
Description = Snowflake DSII
Locale = en-US
Tracing = 0
proxy = http://127.0.0.1:8000

Это моя конфигурация HAProxy:

global
  log stdout format raw local0 info

defaults
  log global
  # timeouts
  timeout connect 3600s
  timeout client 3600s
  timeout server 3600s
  maxconn 4000

frontend snowflake_proxy
  mode tcp
  option tcplog

  bind 0.0.0.0:8000
  default_backend snowflake

backend snowflake
  mode tcp
  option tcp-check
  server server0 <account>.<region>.snowflakecomputing.com:443 check

При запуске iodbctest я вижу эту ошибку:

OOB curl_easy_perform() failed: Failure when receiving data from the peer
1: SQLDriverConnect = [Snowflake][Snowflake] (4)
      REST request for URL https://<account>.<region>.snowflakecomputing.com:443/session/v1/login-request?requestId=0fe536ed-4d6c-4858-b468-52a6757248a7&request_guid=5477913c-989a-4da3-bbbc-b62a68391749 failed: CURLerror (curl_easy_perform() failed) - code=56 msg='Failure when receiving data from the peer' osCode=36 osMsg='Operation now in progress'.
     (4) SQLSTATE=HY000
1: ODBC_Connect = [Snowflake][Snowflake] (4)
      REST request for URL https://<account>.<region>.snowflakecomputing.com:443/session/v1/login-request?requestId=0fe536ed-4d6c-4858-b468-52a6757248a7&request_guid=5477913c-989a-4da3-bbbc-b62a68391749 failed: CURLerror (curl_easy_perform() failed) - code=56 msg='Failure when receiving data from the peer' osCode=36 osMsg='Operation now in progress'.
     (4) SQLSTATE=HY000

Я также пытался настроить HAProxy, чтобы он действовал как простой HTTP-прокси. Это моя конфигурация HAProxy для этого:

global
  log stdout format raw local0 info

defaults
  log global
  # timeouts
  timeout connect 3600s
  timeout client 3600s
  timeout server 3600s
  maxconn 4000

frontend snowflake_proxy
  mode http
  option httplog

  bind 0.0.0.0:8000
  default_backend snowflake

backend snowflake
  mode http
  option http-server-close
  option http_proxy

В приведенной выше конфигурации HAProxy я вижу эту ошибку:

OOB curl_easy_perform() failed: Failure when receiving data from the peer
1: SQLDriverConnect = [Snowflake][Snowflake] (4)
      REST request for URL https://<account>.<region>.snowflakecomputing.com:443/session/v1/login-request?requestId=01ccf8d9-895b-47d1-9102-41f7524ec436&request_guid=773e75b3-9137-4862-a5e1-3bf49e076a1d failed: CURLerror (curl_easy_perform() failed) - code=56 msg='Failure when receiving data from the peer'.
     (4) SQLSTATE=HY000
1: ODBC_Connect = [Snowflake][Snowflake] (4)
      REST request for URL https://<account>.<region>.snowflakecomputing.com:443/session/v1/login-request?requestId=01ccf8d9-895b-47d1-9102-41f7524ec436&request_guid=773e75b3-9137-4862-a5e1-3bf49e076a1d failed: CURLerror (curl_easy_perform() failed) - code=56 msg='Failure when receiving data from the peer'.
     (4) SQLSTATE=HY000

Из журналов HAProxy:

127.0.0.1:64824 [31/Jan/2020:13:28:19.888] snowflake_proxy snowflake/<NOSRV> -1/-1/-1/-1/0 400 211 - - PR-- 1/1/0/0/3 0/0 "CONNECT <account>.<region>.snowflakecomputing.com:443 HTTP/1.1"
127.0.0.1:64825 [31/Jan/2020:13:28:21.890] snowflake_proxy snowflake/<NOSRV> -1/-1/-1/-1/0 400 211 - - PR-- 1/1/0/0/3 0/0 "CONNECT <account>.<region>.snowflakecomputing.com:443 HTTP/1.1"
127.0.0.1:64826 [31/Jan/2020:13:28:25.894] snowflake_proxy snowflake/<NOSRV> -1/-1/-1/-1/0 400 211 - - PR-- 1/1/0/0/3 0/0 "CONNECT <account>.<region>.snowflakecomputing.com:443 HTTP/1.1"
127.0.0.1:64829 [31/Jan/2020:13:28:33.898] snowflake_proxy snowflake/<NOSRV> -1/-1/-1/-1/0 400 211 - - PR-- 1/1/0/0/3 0/0 "CONNECT <account>.<region>.snowflakecomputing.com:443 HTTP/1.1"
127.0.0.1:64830 [31/Jan/2020:13:28:33.903] snowflake_proxy snowflake/<NOSRV> -1/-1/-1/-1/0 400 211 - - PR-- 1/1/0/0/3 0/0 "CONNECT sfctest.client-telemetry.snowflakecomputing.com:443 HTTP/1.1"

У кого-нибудь была удача сделать что-то подобное? Не могли бы вы поделиться соответствующими частями вашей конфигурации HAProxy, пожалуйста?

1 Ответ

0 голосов
/ 03 февраля 2020

Поскольку для прокси-сервера SSL требуется настроить прокси-сервер, HAProxy может быть трудно, если не невозможно, настроить и использовать в качестве прокси-сервера пересылки для драйвера Snowflake ODB C.

Причина указано в этом SO-ответе :

Я перехватил пакеты, используя прокси для посещения веб-сайта https, curl запустит метод HTTP CONNECT для установления sh туннеля. Туннель должен находиться между клиентом и прокси-сервером, но TCP-прокси будет доставлять все сообщения на веб-сервер, поэтому веб-сервер будет сбрасывать соединение.

Прямой прокси-сервер должен не просто доставлять сообщения между клиентом и веб-сервером. должен понимать метод HTTP CONNECT

HAProxy при выполнении сквозной передачи SSL ведет себя как TCP-прокси и поэтому не анализирует лежащие в основе сообщения. Однако для этого необходимо сначала настроить туннель, а для этого нужно ответить на метод HTTP CONNECT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...