Как настроить nginx перед узлом в Docker для Cloud Run? - PullRequest
1 голос
/ 04 июля 2019

Мне нужно настроить обратный прокси-сервер nginx перед приложением nodejs, которое необходимо развернуть в облачной среде Google.

Варианты использования - Нужно обслуживать ресурсы, сжатые через nginx (я не хочу использовать служебный узел для сжатия gzip) - блокировать небольшие DDOS-атаки

Я не нашел учебника по настройке nginx и узла в облачной среде.

Также мне нужно установить PM2 для узла.

Как сделать эту настройку в докере? также как я могу настроить nginx перед развертыванием?

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

Ответы [ 5 ]

4 голосов
/ 05 июля 2019

Мне нужно настроить обратный прокси-сервер nginx перед приложением nodejs, которое необходимо для развертывания в Google Cloud Run.

Cloud Run уже предоставляет обратный прокси-сервер - Cloud Run Proxy. Это сервис, который балансирует нагрузку, предоставляет настраиваемые домены, аутентификацию и т. Д. Для Cloud Run. Однако в дизайне Cloud Run нет ничего, что мешало бы вам использовать Nginx в качестве обратного прокси внутри вашего контейнера. В дизайне Cloud Run нет ничего, что могло бы помешать вам использовать Nginx в качестве отдельного интерфейса контейнера для другой службы Cloud Run. Обратите внимание, что в последнем случае вы будете платить вдвое больше, чем вам потребуется две службы Cloud Run, одна для URL-адреса службы Nginx и другая для приложения узла.

Варианты использования - необходимо обслуживать ресурсы, распакованные через nginx (я не хочу служебный узел для сжатия gzip) - для блокировки небольших DDOS-атак

Вы можете выполнить сжатие в приложении узла или в Nginx. Результат тот же. Влияние на производительность одинаково. Nginx не обеспечивает никаких накладных расходов. Nginx может быть более удобным в некоторых случаях.

Ваш комментарий для блокирования небольших DDOS-атак. Cloud Run автомасштабирует, что означает, что каждый экземпляр Cloud Run будет иметь ограниченное воздействие DOS. По мере увеличения трафика DDOS Cloud Run будет запускать больше экземпляров вашего контейнера. Без предварительного запроса Cloud Run прекратит масштабирование до 1000 экземпляров. Nginx не предоставит никаких преимуществ, которые я могу придумать для смягчения атаки DDOS.

Я не нашел учебника по настройке nginx и узла в облачной среде.

Мне неизвестен какой-либо конкретный документ, касающийся Nginx и Cloud Run. Однако вам это не нужно. Все документы, касающиеся Nginx и Docker, будут в порядке. Если вы хотите запустить Nginx в том же контейнере, что и приложение вашего узла, вам нужно написать собственный скрипт для запуска Nginx и Node.

Также мне нужно установить PM2 для узла.

Не возможно. PM2 имеет пользовательский интерфейс и графический интерфейс. Cloud Run предоставляет только $ PORT через HTTP из экземпляра Cloud Run.

Как сделать эту настройку в докере? также, как я могу настроить nginx перед развертывание

В Интернете существует множество учебных пособий по настройке Nginx и Docker.

Два примера ниже. В интернете сотни примеров.

Я ответил на каждый ваш вопрос. Теперь несколько советов:

  1. Использование Nginx с Cloud Run не имеет никакого смысла в приложении Node.js. Просто запустите приложение вашего узла и дайте Cloud Run Proxy выполнить свою работу.
  2. Сжатие сильно загружает процессор. Cloud Run предназначен для небольших, быстрых и компактных микросервисов в стиле HTTP. Вы будете платить за увеличенное время процессора. Если у вас есть контент, который нужно сжать, сначала сожмите его и подайте сжатый контент. Есть случаи, когда сжатие в Cloud Run полезно и / или правильно, но посмотрите на свой дизайн и по возможности оптимизируйте. Статическое содержимое должно обслуживаться, например, Cloud Storage.

Cloud Run может легко обрабатывать приложение Node.js с отличной производительностью и масштабируемостью при условии соблюдения его критериев проектирования и назначения.

Основные факторы, которые следует учитывать:

  • Низкая стоимость, вы платите только за запросы. Перекрывающиеся запросы имеют ту же стоимость, что и один запрос.
  • Stateless. Контейнеры закрываются, когда в них нет необходимости, что означает, что вы должны проектировать для перезапусков. Сохраните состояние в другом месте, например, в базе данных.
  • Обслуживает только трафик через порт $ PORT, который сегодня равен 8080.
  • Публичный трафик может быть HTTP или HTTP. Трафик от прокси-сервера Cloud Run к континенту - HTTP.
  • Пользовательские доменные имена. Cloud Run делает HTTPS для URL очень простым.
3 голосов
/ 05 июля 2019

Я думаю, вам следует рассмотреть возможность использования другого подхода.

Запуск нескольких процессов в одном контейнере не является наилучшей практикой.Более распространенная реализация прокси-сервера, как вы описываете, - это использование 2-х контейнеров (прокси-сервер часто называют дополнительным), но это невозможно с Cloud Run.

Google App Engine может быть более подходящим.

App Engine Flexible позволяет развертывать контейнеры, которые проксируются (за кулисами) Nginx.Вы можете использовать статический контент с Flexible и включать CDN.App Engine Standard также отвечает вашим потребностям.

https://cloud.google.com/appengine/docs/flexible/nodejs/serving-static-files https://cloud.google.com/appengine/docs/standard/nodejs/runtime

Как и Cloud Run, App Engine не работает на сервере, но обеспечивает большую гибкость и является более устоявшейся службой.App Engine также интегрируется с большим количеством (всех?) Сервисов GCP, тогда как Cloud Run ограничен подмножеством.

В качестве альтернативы вы можете рассмотреть Kubernetes (Engine).Это обеспечивает практически безграничную гибкость, но требует больше операций.Как вы, вероятно, знаете, есть реализация Cloud Run, которая работает на Kubernetes, Istio и Knative.

Cloud Run - это привлекательный сервис, но он подходит только в том случае, если вы можете удовлетворить его (в настоящее время) противоречивые требования.

0 голосов
/ 23 июля 2019

У меня для вас хорошие новости.Я написал сообщение в блоге о том, что вам нужно с примером кода.

В этом примере NGINX помещается на передний план (порт 8080 в Cloud Run), при этом выборочно передавая трафик другой службе, работающей в том же контейнере (на порту 8081).

0 голосов
/ 09 июля 2019

Если вы хотите, чтобы NGINX находился перед вашей службой Cloud Run, Конечные точки облака могут сделать вашу жизнь проще.Со страницы продукта:

Прокси-архитектура и распределенная архитектура на основе NGINX обеспечивают непревзойденную производительность и масштабируемость.

Ниже приведено руководство по использованию конечных точек облака.с Cloud Run .

0 голосов
/ 05 июля 2019

Google Cloud Compute Systems

Чтобы понять GCP Computing, сначала посмотрите на рисунок ниже:

enter image description here

В вашем случае я настоятельно рекомендую вам использовать App Engine Flex для развертывания приложения. Он поддерживает Docker-контейнер, nodejs, ... Чтобы понять, КАК ОТКЛЮЧИТЬ nodejs для GAE Flex, посетите эту страницу https://cloud.google.com/appengine/docs/flexible/nodejs/quickstart

Вы можете установить некоторые сторонние библиотеки, если хотите. Кроме того, GCP поддерживает глобальный / внутренний балансировщик нагрузки, вы можете применить его в своих службах GAE.

...