Вопрос или проблема
У меня есть 2 виртуальные машины за балансировщиком нагрузки в Azure. Я включил HTTPS-соединение для веб-сайтов, которые развернуты на этих виртуальных машинах, используя самоподписанный SSL-сертификат. Когда я подключаюсь к этой ВМ напрямую по IP, я вижу загруженный сертификат, но когда я пытаюсь подключиться через балансировщик нагрузки по HTTPS, я получаю страницу с сообщением “Ваше соединение не является частным” (поскольку это самоподписанный сертификат), и в разделе “Дополнительно” я кликаю “перейти на сайт”. Для виртуальных машин это работает, но когда я использую IP балансировщика нагрузки, эта же страница загружается снова и снова с той же ошибкой. Я также не смог найти много материалов по реализации HTTPS. Я реализовал это на основе своего понимания балансировщика нагрузки Azure.
Могу ли я достичь HTTPS с помощью балансировщика нагрузки или мне нужно реализовать Application Gateway?
Ошибка конфиденциальности:
Вы можете использовать Azure CLI для создания приложенческой шлюза с сертификатом для SSL-терминации, который использует набор экземпляров виртуальной машины для серверов на заднем плане. В этом примере набор содержит два экземпляра виртуальной машины, которые добавлены в стандартный пул на заднем плане приложения шлюза.
https://docs.microsoft.com/en-us/azure/application-gateway/tutorial-ssl-cli
Сертификаты должны соответствовать IP-адресу слушателя балансировщика нагрузки, то есть IP-адресу, который видят клиенты. Вы должны автоматически создать сертификат для IP балансировщика нагрузки и развернуть этот сертификат на всех сбалансированных сайтах, и этот сертификат будет работать только при доступе через балансировщик нагрузки.
Ответ или решение
Чтобы решить проблему с перенаправлением HTTPS-запросов через Azure Load Balancer к вашим виртуальным машинам (VM), необходимо учитывать несколько ключевых моментов.
Причины проблемы
-
Самоподписанный сертификат: Если вы используете самоподписанный SSL-сертификат, браузер будет отображать предупреждение о том, что соединение не защищено. Это происходит потому, что сертификат не доверен общепринятыми центрами сертификации. Поэтому, при прямом подключении к IP-адресу виртуальной машины, самоподписанный сертификат работает, но при подключении через IP-адрес балансировщика нагрузки это может вызвать проблемы с доверием.
-
Конфигурация Azure Load Balancer: Azure Load Balancer не способна выполнять SSL-терминацию, а просто перенаправляет трафик на виртуальные машины. Таким образом, вам необходимо настроить SSL-сертификаты на каждой из ваших виртуальных машин, чтобы трафик передавался корректно по протоколу HTTPS.
Решение
-
Настройка сертификатов: Убедитесь, что самоподписанный сертификат установлен не только на каждом экземпляре виртуальной машины, но и соответствует IP-адресу, который видят клиенты. Это может потребовать создания новых самоподписанных сертификатов с использованием IP-адресов балансировщика нагрузки или доменных имен.
-
Использование Azure Application Gateway: Рекомендуется рассмотреть возможность перехода на Azure Application Gateway, который поддерживает SSL-терминацию. Это позволит вам настроить один сертификат на уровне балансировщика, и внутренний трафик будет передаваться через HTTP. В этом случае Application Gateway будет принимать запросы через HTTPS, расшифровывать их и пересылать на ваши виртуальные машины по HTTP.
-
Для создания Application Gateway можно использовать Azure CLI. Например:
az network application-gateway create --name MyAppGateway --resource-group MyResourceGroup --location eastus --sku Standard_v2 --capacity 2
-
Затем добавьте сертификат и настройте маршруты. Вам нужно будет создать и настроить бэкэнд-пулы и правила для перенаправления трафика.
-
-
Документация: Для более детального понимания настройки Application Gateway обратитесь к официальной документации Azure:
Заключение
Ваша текущая настройка Azure Load Balancer ограничена в отношении обработки SSL. Использование Application Gateway не только упростит процесс управления сертификатами, но и повысит уровень безопасности и функциональности вашего приложения.
Если у вас возникнут дополнительные вопросы или сложности, пожалуйста, не стесняйтесь задавать их!