Частный домен AWS Lightsail Container Service - net :: ERR_NAME_NOT_RESOLVED

Как отправить https-запрос из одного развертывания в другое, используя частный домен AWS Lightsail?

Я создал два развертывания контейнера AWS Lightsail, используя два образа докеров. Я хочу отправить https-запрос от одного развертывания образа (отправителя) к другому развертыванию образа (получателю). Это нормально работает, когда включена общедоступная конечная точка получателя. Однако я не хочу открывать этот сервис для всех, а вместо этого маршрутизирую трафик с использованием частного домена AWS Lightsail.

Моя проблема в том, что когда я пытаюсь отправить https-запрос от отправителя в частный домен получателя (.service.local :), я получаю https://<service_name>.service.local:52020/tester/status net::ERR_NAME_NOT_RESOLVED на html-странице отправителя. Согласно Документы Lightsail (раздел Частный домен), он должен быть доступен для моих ресурсов Lightsail в том же регионе AWS, что и ваш сервис.

Я нашел похожий Вопрос и ответ в stackoverflow. Я попробовал этот ответ, используя свой регион, но не смог, потому что для контейнера Lightsail требуется https, а для .service.local - http. После создания экземпляра Amazon Linux мне удалось выполнить http-запрос, но не удалось сделать https-запрос. (скриншот ниже). А пока Lightsail строго просит вас использовать https.

введите описание изображения здесь

Если я принудительно отправлю HTTP-запрос с веб-страницы https, хром сгенерирует Mixed content: The page at ... was loaded over HTTPS but requested an insecure ... ошибку. Я могу обойти проблему https, используя маршруты api next.js, но это небезопасно, потому что маршруты next.js api общедоступны.

введите описание изображения здесь

Есть ли что-нибудь, чего мне здесь не хватает?

Что я проверил:

  • Образ запущен и работает нормально при подключении к нему через общественное достояние.
  • Я использую и экземпляр, и контейнерную службу в одном регионе.

Заранее спасибо.

Несколько скриншотов

  • Выполнение поиска в скрипте точки входа докера  введите описание изображения здесь

  • Сообщение об ошибке, когда отправитель отправляет http-запрос получателю  введите описание изображения здесь


person bluemoon    schedule 02.06.2021    source источник
comment
Голосование за этот вопрос было отклонено. Возможно, это либо банальный вопрос, либо его считают дубликатом некоторых людей. Даже если это тривиально или повторяется для вас, было бы очень полезно, если бы вы могли поделиться некоторыми соображениями или сослаться на URL-адрес, как решить эту проблему, в этом вопросе. Я нашел один похожий вопрос в stackoverflow, но это не отвечает на мой вопрос. :( stackoverflow.com/questions/65754995/   -  person bluemoon    schedule 02.06.2021
comment
HTTP работает? Не думаю, что у вас будет HTTPS для частных доменов.   -  person Marcin    schedule 05.06.2021
comment
http работает. Однако, поскольку SSL / TLS принудительно используется для веб-серверов Lightsail с пользовательским доменом для отправки запроса api от внешнего развертывания Lightsail к внутреннему развертыванию Lightsail, запрос должен быть https-запросом.   -  person bluemoon    schedule 05.06.2021
comment
HTTPS предназначен для публичных доменов, и вы пишете, что используете частные имена. В этом случае нет необходимости в HTTPS, поскольку весь трафик является внутренним, внутри AWS (без Интернета).   -  person Marcin    schedule 05.06.2021
comment
Спасибо @Marcin. Похоже, работает. Раньше я получал Mixed content: The page at ... was loaded over HTTPS but requested an insecure ... ошибку из chrome. Я мог бы исправить это, ретранслируя HTTP-запрос с помощью локального бэкэнда вместо прямого запроса к развертыванию Lightsail из html. Я еще раз проверю это завтра. Спасибо за вашу помощь.   -  person bluemoon    schedule 05.06.2021
comment
Обновлять. Проблема все еще существует. Я получаю смешанный контент: страница «https: // ...» была загружена по HTTPS, но запросил небезопасный ресурс «http: / ...». Этот запрос заблокирован; контент должен обслуживаться по HTTPS. ошибка из хрома. Я использую next.js и flask, и вчера вечером я мог обойти эту ошибку, потому что я использовал маршруты API next.js. Сегодня я удалил маршруты API, потому что маршруты API next.js общедоступны (поправьте меня, если я ошибаюсь), и похоже, что я вернулся к исходной точке.   -  person bluemoon    schedule 05.06.2021
comment
Зачем вообще использовать https, если весь трафик частный? Для частного домена вы не получите правильные сертификаты ssl, чтобы иметь действующий https.   -  person Marcin    schedule 06.06.2021
comment
Как прошло? По-прежнему неясно, почему ssl не работает для частных доменов, как вы ожидали?   -  person Marcin    schedule 08.06.2021
comment
Https пришлось использовать, потому что отображаемая веб-страница должна отправлять запросы api в https, как указано выше. Если вы не отправляете запрос в https, chrome выводит указанную выше ошибку: Mixed content: The page at ... was loaded over HTTPS but requested an insecure ... Я резюмирую то, что я сделал, в качестве ответа.   -  person bluemoon    schedule 11.06.2021


Ответы (2)


Я заставил свои два контейнера AWS Lightsail, Frontend Container с next.js и Backend Container с flask, общаться друг с другом, выполнив следующие действия:

  1. Запустите инстанс Lightsail с помощью Amazon Linux в регионе, в котором я хочу развернуть контейнер. Скопируйте /etc/resolv.conf из этого экземпляра Amazon Linux. Обновите Dockerfile, чтобы перезаписать /etc/resolv.conf файл в моем докере.
  2. Чтобы сделать запрос API с использованием http вместо https и обойти ошибку Mixed content: The page at ... was loaded over HTTPS but requested an insecure ..., я использовал next.js Маршрут API для ретрансляции запроса API. Так, например, страница на Frontend Container будет делать запросы API к / api в том же контейнере, а маршрут / api сделает http-запрос к Backend Container.
  3. Маршрут API был правильно закодирован с мерами безопасности, чтобы пользователи не могли использовать маршрут API для доступа к произвольной конечной точке в Backend Container.
person bluemoon    schedule 11.06.2021

Страницы https часто имеют смешанный контент, где ресурсы, такие как изображения, берутся из папок http, а не из папки сайта https, поэтому запрос на получение такого ресурса - это http из-за его конфигурации по местоположению, поэтому он будет вызываться http для получения и затем не будет шифроваться (см. конфигурацию сервера, чтобы узнать расположение папки https, для которой требуется доступ к ней по этому протоколу).

Из протоколов сообщение из другого сообщения подразумевает и может заключаться в том, что частное общение НЕ является веб-службой для общедоступных, поэтому для таких сообщений требуется использование безопасного протокола ssl: // (аналогично ssh: //) НЕ https: // secure public web протокол сервера обоих требует сертификата. (рискнуть предположить) может быть SSL, который используется частным образом на локальном уровне.

Следующие ссылки AWS рекомендуют использовать разные учетные записи для разработки и обслуживания.

https://aws.amazon.com/blogs/compute/a-guide-to-locally-testing-containers-with-amazon-ecs-local-endpoints-and-docker-compose/ https://aws.amazon.com/cli/

person Samuel Marchant    schedule 12.06.2021