HAProxy привязывает интерфейс к нескольким портам на одном IP - PullRequest
0 голосов
/ 01 октября 2018

У меня есть несколько сред OpenStack.У меня есть один набор веб-серверов / ftp / db для среды DEV и другой набор веб-серверов / ftp / db для среды контроля качества.У меня есть две внутренние записи DNS, по одной для каждой среды:

dev-foo.this.net
qc-foo.this.net

Эти записи DNS указывают на VIP (плавающий IP?) В OpenStack:

dev-vip.this.net (10.240.38.117) <- dev-foo.this.net (10.240.38.117)
qc-vip.this.net (10.240.38.192) <- qc-foo.this.net (10.240.38.192)

Эти VIP не являютсяв настоящее время сопоставлены с любыми фиксированными IP-адресами.

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

proxy1.this.net (10.240.38.68)
proxy2.this.net (10.240.38.69)

Похоже, что любой из них является текущим основным (и, следовательно, единственным активным), получает два VIP 1.0.0.240 и 1.0.0.241.Это VIPS (я предполагаю, что VIP - правильный термин здесь), который я вижу, когда я запускаю ifconfig на первичном.

eth0: inet 1.0.0.19
eth0:0: inet 1.0.0.240
eth0:1: inet 1.0.0.241

Что я хочу / нужно сделать, это:

1> Have HAProxy take ALL traffic requests for dev-foo.this.net and send it to the DEV environment servers.
2> Have HAProxy take ALL traffic requests for qc-foo.this.net and send it to the QC environment servers.
3> Have the SSL requests SSL terminated at the proxy so I can examine the request and change it. This is because I need to translate some URLs to different URLs.
4> Have the request re-encrypted and forwarded on to the backend servers.

Итак, несколько вопросов:

1> Can I bind the same IP to multiple ports on the same front end? 
   For instance bind 80, 443 and 22 on 1.0.0.240 in a single front end definition.
2> What causes the request traffic for dev-foo.this.net to get picked up by a specific VIP on the proxy server? 
   How do I know dev-foo.this.net requests will go to 1.0.0.240 on the proxy servers?
3> How do I get SSL requests re-encrypted and forwarded on to the backend servers?
4> Can I assume that the VIPs (1.0.0.240, 1.0.0.241) on the proxy servers will be the same when a fail over from one to the other happens?
   I don't know how these get associated to the proxy machines.

Позвольте мне сказать, что я не работающий в сети, поэтому, возможно, я не правильно задаю этот вопрос.Потерпите меня.Я думал, что смогу сделать что-то подобное в haproxy.cfg, но я в замешательстве и нуждаюсь в руководстве:

# -----------------------------------------
# web server stuff for DEV environment
# -----------------------------------------
frontend dev-app
    mode http
    bind 1.0.0.240:80
    bind 1.0.0.240:443 ssl crt /etc/haproxy/ssl.pem/star.this.net.pem
    option http-tunnel
    option forwardfor
    reqadd X-Forwarded-Proto:\ https if { ssl_fc }
    use_backend dev-app-backend

backend dev-app-backend
    mode http
    balance roundrobin
    cookie SERVERID insert indirect nocache
    option forwardfor
    option httplog
    option httpchk HEAD /
    option http-tunnel
    http-check expect status 200
    server www01 dweb200.this.net:443 check ssl verify none cookie www01
    server www02 dweb201.this.net:443 check ssl verify none cookie www02

# -----------------------------------------
# web server stuff for QC environment
# -----------------------------------------
frontend qc-app
    mode http
    bind 1.0.0.241:80
    bind 1.0.0.241:443 ssl crt /etc/haproxy/ssl.pem/star.this.net.pem
    option http-tunnel
    option forwardfor
    reqadd X-Forwarded-Proto:\ https if { ssl_fc }
    use_backend qc-app-backend

backend qc-app-backend
    mode http
    balance roundrobin
    cookie SERVERID insert indirect nocache
    option forwardfor
    option httplog
    option httpchk HEAD /
    option http-tunnel
    http-check expect status 200
    server www01 qweb200.this.net:443 check ssl verify none cookie www01
    server www02 qweb201.this.net:443 check ssl verify none cookie www02

# -----------------------------------------
# sftp server stuff for DEV environment
# -----------------------------------------
frontend dev-sftp
    mode tcp
    bind 1.0.0.240:22
    option tcplog
    default_backend dev-sftp-backend

backend dev-sftp-backend
    mode tcp
    balance roundrobin
    option tcplog
    server ftp01 dftp200.this.net:22
    server ftp02 dftp201.this.net:22

# -----------------------------------------
# sftp server stuff for QC environment
# -----------------------------------------
frontend qc-sftp
    mode tcp
    bind 1.0.0.241:22
    option tcplog
    default_backend qc-sftp-backend

backend qc-sftp-backend
    mode tcp
    balance roundrobin
    option tcplog
    server ftp01 qftp200.this.net:22
    server ftp02 qftp201.this.net:22

* РЕДАКТИРОВАТЬ *

ДляВопрос 1.Я видел этот пост , который, кажется, говорит, что вы можете связать несколько портов, как я хочу, но остальные мои вопросы остаются нерешенными.

Для вопроса № 3.Если посмотреть дальше, кажется, что повторное шифрование происходит из-за параметра "ssl" в строках внутреннего сервера.Закрывание сессий вызвано параметром cookie.

Для вопроса № 2.Я думаю, мне нужно как-то настроить IP-адрес DNS для привязки к VIP на прокси-сервере.В веб-интерфейсе OpenStack два плавающих IP-адреса:

dev-vip.this.net (10.240.38.117) qc-vip.this.net (10.240.38.192)

не сопоставлены слюбые фиксированные IP-адреса, и я думаю, что они должны быть сопоставлены, отдельно, с адресами 1.0.0.240 и 1.0.0.241 на прокси-серверах.Это приведет к тому, что правильный трафик будет направлен в правильную серверную среду QC / DEV.По крайней мере, я так думаю.Я не уверен, как это сделать, хотя, может быть, что-то вроде показано здесь Я все еще пытаюсь понять эту часть.

* ДАЛЬНЕЙШЕЕ РЕДАКТИРОВАНИЕ *

Для Вопроса № 2 я нашел это , что в основном то, что я пытаюсь сделать, и, кажется, мне нужно выполнить шаги 6 и 7.

* ДАЛЬНЕЙШЕЕ РЕДАКТИРОВАНИЕ * ПРИМЕЧАНИЕ. Это для запуска CLI OpenStack в Windows.

Ладно, для «привязки» плавающих IP-адресов (dev-vip.this.net 10.240.38.117, qc-vip.this.net 10.240.38.192) для VIP-адресов прокси-серверов (1.0.0.240 и 1.0.0.241), вам необходимо установить OpenStack CLI .По-видимому, вы не можете сделать это из веб-клиента.

Это заменит все другие команды, которые вы увидите там в Интернете, такие как нейтрон и нова.Вы должны установить python версии до 3. Я установил 2.7.1

После установки python поместите основную папку python и папку python \ scripts в свой путь.

Теперь вам нужно установить pip, скачать скрипт установки и поместить его в папку python \ scripts.

Откройте командную строку и запустите сценарий с помощью этой команды «python d: \ python27 \ scripts \ get-pip.py».

Теперь убедитесь, что он также установил setuptools и пакеты wheel с помощью этой команды «python -m pip install --upgrade pip setuptools wheel».

Наконец, вы можете установить CLI openstack с помощью этой команды«Pip install python-openstackclient».

Чтобы открытьРабота CLI в стеке необходима для установки определенных переменных среды.Войдите в веб-панель openstack для зоны, в которой находятся ваши машины / ips. Откройте вкладку Project, откройте вкладку Compute и нажмите Access & Security.На вкладке «Доступ к API» нажмите «Загрузить файл OpenStack RC» и сохраните файл.Это скрипт оболочки Unix, вам нужно преобразовать его в файл Windows cmd и изменить некоторые вещи, которые должны выглядеть примерно так:

set OS_IDENTITY_API_VERSION=3
set OS_AUTH_URL=http://someip:5000/v3
set OS_TENANT_ID=<<your tenant id>>
set OS_TENANT_NAME=<<your tenant name>>
set OS_PROJECT_NAME=<< your project name >>
set OS_REGION_NAME=us-east-1a
set OS_USERNAME=<< YOUR USER NAME >>
set OS_PASSWORD=<< YOUR PASSWORD >>

Обратите внимание, что мне пришлось удалить кавычки из значений взаставить вещи работать.Если вы используете домен в качестве части аутентификации, вам также необходимо добавить один из параметров DOMAIN.

Откройте новую командную строку и запустите этот cmd-файл, чтобы настроить env vars.Теперь вы сможете запускать команду «openstack» в командной строке.Если это сработает, вы получите ответ, похожий на этот «(openstack)» с курсором после него.Затем вы можете выполнить следующую команду, чтобы убедиться, что все работает из CLI openstack «список сетей».Если вы получите список вещей вместо ошибки аутентификации, вы можете идти.

* ДАЛЬШЕ ДАЛЬНЕЙШЕЕ РЕДАКТИРОВАНИЕ *

Обязательно установите сертификат pfxфайл для вашего веб-сайта на серверы IIS на внутренней стороне, чтобы они могли обрабатывать зашифрованный трафик от прокси-серверов.Я все еще пытаюсь получить трафик для маршрутизации через прокси-серверы, я приближаюсь.Я пока не смог связать плавающие IP-адреса с VIP-прокси, и я почти уверен, что именно это мешает мне перенаправлять трафик через прокси.

... так выглядиткак и остальные проблемы, которые у меня были, были из-за брандмауэров и других сетевых вещей.Один из наших парней исправил это для меня, так что я не знаю, в чем дело.Где я использовал FQDN для внутренних серверов, что было неверно, потому что это не разрешало адреса 1.0.0.X на этих машинах.

Я обнаружил, что у меня есть строка httpchk в определениях бэкенда в файле конфигурации прокси.Именно это заставляет HAProxy думать, что веб-серверы не работают, и поэтому он не будет отправлять им трафик.Я взял это и добавил «ca-file /etc/ssl/certs/ca-bundle.crt» в строки внутреннего сервера, чтобы он знал, где можно найти ЦС.И BLAMM-O веб-серверы теперь отображаются как активные на странице статистики прокси-сервера, и я могу использовать оба адреса: https и http.

Также обратите внимание, что мне пришлось изменить привязки в IIS, чтобы НЕ указывать имя хоста.

...