Рейтинг:0

Как принудительно настроить маршрутизацию на основе SNI в HAProxy?

флаг in

У меня есть следующая конфигурация HAProxy:

слушать сни-443
    привязать *:443
    режим TCP

    тайм-аут соединения 4 с
    таймаут клиента 3м
    таймаут сервера 3м
    tcp-запрос проверка-задержка 5 с
    Содержимое tcp-запроса принимается, если { req.ssl_hello_type 1 }
    acl без SSL req.ssl_hello_type 0

    использовать сервер backend1.default.svc.cluster.local, если !no-ssl { req_ssl_sni -i www.example.com }
    сервер backend1.default.svc.cluster.local 10.96.245.95:443 вес 0

    использовать сервер backend2.default.svc.cluster.local, если !no-ssl { req_ssl_sni -i demo.example.com }
    сервер backend2.default.svc.cluster.local 10.96.184.199:443 вес 0

если я посещу www.example.com, все хорошо. Но когда я делаю это после перезагрузки demo.example.com с высокой частотой (забивание на Shift-Ctrl-R в браузере) попадаю в demo.example.com. Да, именно: я открываю www.example.com в браузере, но HAProxy направляет его на backend2 (который возвращает ошибку).

Судя по всему, HAProxy не до конца понимает, что эти два сервиса — не альтернативы для балансировки нагрузки, а совершенно разные продукты. Как я могу гарантировать что www.example.com заканчивается backend1?

Michael Hampton avatar
флаг cz
Назовите меня старой школой, но для ясности я предпочитаю раздельные разделы «frontend» и «backend», а не смешанный раздел «listen». В любом случае, в остальном ваша конфигурация выглядит нормально, и я не вижу здесь ничего, что могло бы вызвать проблему. У вас есть что-то еще перед haproxy?
флаг in
Нет.Но в настоящее время я выясняю, может ли тот факт, что сертификаты TLS для обоих бэкендов содержат оба домена (другими словами, один и тот же сертификат с псевдонимами), сбить с толку HAproxy.
Рейтинг:1
флаг ng

Это пример из документов для req_ssl_sni:

tcp-запрос проверка-задержка 5 с
Содержимое tcp-запроса принимается, если { req_ssl_hello_type 1 }
use_backend bk_allow, если {req_ssl_sni -f разрешенные_сайты}
default_backend bk_sorry_page

Вам, вероятно, нужно tcp-запрос проверка-задержка установить что-то, потому что если его не установить, это означает, что haproxy вообще не ждет и понятия не имеет, что такое SNI.
Более подробное объяснение в документы для tcp-запрос-задержка проверки

флаг in
Я добавил дополнительные настройки в свою минимальную конфигурацию. Они не предотвращают такое неблагоприятное поведение HAProxy. В чем разница между use_backend и use-server? Может ли это быть причиной?
tbielaszewski avatar
флаг ng
«сервер» — это служба с одним IP:PORT, а «бэкэнд» — это целая структура конфигурации в haproxy, такая как «прослушивание» или «интерфейс», которая содержит свои собственные правила, списки управления доступом и серверы. определение отдельных серверных частей и размещение там серверов, возможно, поможет еще больше разделить эти серверы. Можете ли вы опубликовать некоторые журналы haproxy с SNI, если это возможно?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.