1. Введение
Балансировка нагрузки Google Cloud HTTP(S) развертывается на границе сети Google в точках присутствия Google (POP) по всему миру. Пользовательский трафик, направляемый на балансировщик нагрузки HTTP(S), поступает на POP, ближайший к пользователю, а затем балансируется через глобальную сеть Google на ближайший бэкэнд, имеющий достаточную доступную емкость.
Cloud Armor — это распределенная система обнаружения отказов в обслуживании и брандмауэра веб-приложений (WAF) Google. Cloud Armor тесно связан с балансировщиком нагрузки Google Cloud HTTP и позволяет проверять входящий трафик на предмет нежелательных запросов. Функция ограничения скорости этой службы позволяет вам ограничивать трафик на серверные ресурсы в зависимости от объема запроса и предотвращает потребление ресурсов нежелательным трафиком в вашей сети виртуального частного облака (VPC).
В ходе этой лабораторной работы вы настроите балансировщик нагрузки HTTP с глобальными серверными модулями, как показано на схеме ниже. Затем вы проведете стресс-тестирование балансировщика нагрузки и добавите политику ограничения скорости Cloud Armor, чтобы ограничить трафик, попадающий на ваши серверные ресурсы.
Что вы узнаете
- Как настроить балансировщик нагрузки HTTP с соответствующими проверками работоспособности.
- Как создать политику ограничения скорости Cloud Armor.
- Как проверить, что политика ограничения скорости блокирует трафик при запуске стресс-теста с виртуальной машины.
Что вам понадобится
- Базовые настройки сети и знание HTTP
- Базовые знания командной строки Unix/Linux.
2. Настройка и требования
Самостоятельная настройка среды
- Войдите в Google Cloud Console и создайте новый проект или повторно используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .
- Имя проекта — это отображаемое имя для участников этого проекта. Это строка символов, не используемая API Google, и вы можете обновить ее в любое время.
- Идентификатор проекта должен быть уникальным для всех проектов Google Cloud и неизменяемым (нельзя изменить после его установки). Cloud Console автоматически генерирует уникальную строку; обычно тебя не волнует, что это такое. В большинстве лабораторий кода вам потребуется указать идентификатор проекта (обычно он обозначается как
PROJECT_ID
), поэтому, если он вам не нравится, создайте другой случайный идентификатор или попробуйте свой собственный и посмотрите, доступен ли он. Затем он «замораживается» после создания проекта. - Существует третье значение — номер проекта , который используют некоторые API. Подробнее обо всех трех этих значениях читайте в документации .
- Далее вам необходимо включить выставление счетов в Cloud Console, чтобы использовать облачные ресурсы/API. Прохождение этой лаборатории кода не должно стоить много, если вообще стоит. Чтобы отключить ресурсы и не платить за выставление счетов за пределами этого руководства, следуйте инструкциям по «очистке», которые можно найти в конце лаборатории кода. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .
Запустить Cloud Shell
Хотя Google Cloud можно управлять удаленно с вашего ноутбука, в этой лаборатории вы будете использовать Google Cloud Shell , среду командной строки, работающую в облаке.
В консоли GCP щелкните значок Cloud Shell на верхней правой панели инструментов:
Подготовка и подключение к среде займет всего несколько минут. Когда все будет готово, вы должны увидеть что-то вроде этого:
Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Всю работу в этой лабораторной работе можно выполнять с помощью простого браузера.
Прежде чем начать
В Cloud Shell убедитесь, что идентификатор вашего проекта настроен.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] PROJECT_ID=[YOUR-PROJECT-NAME] echo $PROJECT_ID
Включить API
Включите все необходимые сервисы
gcloud services enable compute.googleapis.com gcloud services enable logging.googleapis.com gcloud services enable monitoring.googleapis.com
3. Настройте правила брандмауэра, чтобы разрешить HTTP-трафик на серверные части.
Настройте правила брандмауэра, чтобы разрешить HTTP-трафик на серверные части от проверок работоспособности Google Cloud и балансировщика нагрузки.
Мы будем использовать сеть VPC по умолчанию , созданную в вашем проекте. Создайте правило брандмауэра, чтобы разрешить HTTP-трафик на серверные части. Проверки работоспособности определяют, какие экземпляры балансировщика нагрузки могут получать новые подключения. При балансировке нагрузки HTTP проверки работоспособности экземпляров с балансировкой нагрузки поступают с адресов в диапазонах 130.211.0.0/22 и 35.191.0.0/16. Правила брандмауэра вашего VPC должны разрешать эти подключения. Кроме того, балансировщики нагрузки взаимодействуют с серверной частью по тому же диапазону IP-адресов.
- В облачной консоли перейдите в меню навигации ( ) > Сеть VPC > Брандмауэр .
- Обратите внимание на существующие правила брандмауэра ICMP , Internal , RDP и SSH. Каждый проект Google Cloud начинается с сети по умолчанию и этих правил брандмауэра.
- Нажмите «Создать правило брандмауэра» .
- Установите следующие значения, оставьте все остальные значения по умолчанию:
Свойство | Значение (введите значение или выберите указанный вариант) |
Имя | проверка работоспособности по умолчанию |
Сеть | по умолчанию |
Цели | Указанные целевые теги |
Целевые теги | http-сервер |
Исходный фильтр | IP-диапазоны |
Диапазоны исходных IP-адресов | 130.211.0.0/22, 35.191.0.0/16 |
Протоколы и порты | Указаны протоколы и порты, а затем проверьте TCP |
- Нажмите Создать .
Альтернативно, если вы используете командную строку gcloud. Ниже приведена команда -
gcloud compute firewall-rules create default-allow-health-check --direction=INGRESS --priority=1000 --network=default --action=ALLOW --rules=tcp --source-ranges=130.211.0.0/22,35.191.0.0/16 --target-tags=http-server
4. Настройте шаблоны экземпляров и создайте управляемые группы экземпляров.
Группа управляемых экземпляров использует шаблон экземпляра для создания группы идентичных экземпляров. Используйте их для создания серверных частей HTTP Load Balancer.
Настройка шаблонов экземпляров
Шаблон экземпляра — это ресурс API, который вы используете для создания экземпляров виртуальных машин и управляемых групп экземпляров. Шаблоны экземпляров определяют тип машины, образ загрузочного диска, подсеть, метки и другие свойства экземпляра. Создайте один шаблон экземпляра для us-east1 и один для europe-west1 .
- В облачной консоли перейдите в меню навигации ( ) > Compute Engine > Шаблоны экземпляров , а затем нажмите Создать шаблон экземпляра .
- В поле Имя введите us-east1-template .
- Для серии выберите N1 .
- Нажмите Сеть, Диски, Безопасность, Управление, Единоличное пользование .
- Заходим в раздел Управление -
- В разделе «Метаданные» нажмите « Добавить элемент» и укажите следующее:
Ключ | Ценить |
URL-адрес сценария запуска | gs://cloud-training/gcpnet/httplb/startup.sh |
- Нажмите «Сеть» .
- Установите следующие значения и оставьте все остальные значения по умолчанию:
Свойство | Значение (введите значение или выберите указанный вариант) |
Сеть (в разделе «Сетевые интерфейсы») | по умолчанию |
Подсеть (в разделе «Сетевые интерфейсы») | по умолчанию (США-восток1) |
Сетевые теги | http-сервер |
- Нажмите Создать .
- Подождите, пока будет создан шаблон экземпляра.
Теперь создайте еще один шаблон экземпляра для subnet-b , скопировав us-east1-template :
- Нажмите на us-east1-template , а затем нажмите кнопку «Копировать» сверху.
- В поле Имя введите europe-west1-template .
- Нажмите Сеть, Диски, Безопасность, Управление, Единоличное пользование .
- Нажмите «Сеть» .
- В разделе «Сетевые интерфейсы» отредактируйте интерфейс по умолчанию. В поле «Подсеть» выберите «по умолчанию» (europe-west1) .
- Нажмите Создать .
Создайте группы управляемых экземпляров
Создайте группу управляемых экземпляров в us-east1 и одну в Europe-west1 .
- Продолжая работать в Compute Engine , нажмите «Группы экземпляров» в меню слева.
- Нажмите Создать группу экземпляров . Выберите Новая группа управляемых экземпляров (без сохранения состояния).
- Установите следующие значения, оставьте все остальные значения по умолчанию:
Свойство | Значение (введите значение или выберите указанный вариант) |
Имя | США-восток1-миг |
Расположение | Несколько зон |
Область | США-Восток1 |
Шаблон экземпляра | США-восток1-шаблон |
Автомасштабирование > Политика автомасштабирования > Щелкните значок карандаша > Тип показателя. | Загрузка процессора |
Целевая загрузка ЦП | 80, нажмите Готово. |
Период охлаждения | 45 |
Минимальное количество экземпляров | 1 |
Максимальное количество экземпляров | 5 |
- Нажмите Создать .
Теперь повторите ту же процедуру, чтобы создать вторую группу экземпляров для europe-west1-mig в europe-west1 :
- Нажмите «Создать группу экземпляров» .
- Установите следующие значения, оставьте все остальные значения по умолчанию:
Свойство | Значение (введите значение или выберите указанный вариант) |
Имя | Европа-Запад1-миг |
Расположение | Несколько зон |
Область | Европа-Запад1 |
Шаблон экземпляра | Европа-Запад1-шаблон |
Автомасштабирование > Политика автомасштабирования > Щелкните значок карандаша > Тип показателя. | Загрузка процессора |
Целевая загрузка ЦП | 80, нажмите Готово. |
Период охлаждения | 45 |
Минимальное количество экземпляров | 1 |
Максимальное количество экземпляров | 5 |
- Нажмите Создать .
5. Настройте балансировщик нагрузки HTTP.
Настройте балансировщик нагрузки HTTP для балансировки трафика между двумя бэкэндами ( us-east1-mig в us-east1 и europe-west1-mig в europe-west1), как показано на сетевой схеме:
Запустите настройку
- В облачной консоли щелкните меню навигации ( ) > щелкните Сетевые службы > Балансировка нагрузки , а затем щелкните Создать балансировщик нагрузки .
- В разделе «Балансировка нагрузки HTTP(S)» нажмите « Начать настройку» .
- Выберите «Из Интернета на мои виртуальные машины» , «Классический балансировщик нагрузки HTTP(S)» и нажмите « Продолжить» .
- Установите имя http-lb.
Настройка серверной части
Серверные службы направляют входящий трафик на один или несколько подключенных серверов. Каждый серверный компонент состоит из группы экземпляров и дополнительных метаданных мощности обслуживания.
- Нажмите «Конфигурация серверной части» .
- В разделе «Верхние службы и серверные сегменты» нажмите «Создать серверную службу» .
- Установите следующие значения, оставьте все остальные значения по умолчанию:
Свойство | Значение (выберите указанный вариант) |
Имя | http-бэкэнд |
Группа экземпляров | США-восток1-миг |
Номера портов | 80 |
Режим балансировки | Ставка |
Максимальное количество запросов в секунду | 50 (за экземпляр) |
Емкость | 100 |
- Нажмите Готово .
- Нажмите Добавить серверную часть .
- Установите следующие значения, оставьте все остальные значения по умолчанию:
Свойство | Значение (выберите указанный вариант) |
Группа экземпляров | Европа-Запад1-миг |
Номера портов | 80 |
Режим балансировки | Использование |
Максимальное использование серверной части | 80 |
Емкость | 100 |
- Нажмите Готово .
- Для параметра «Проверка работоспособности» выберите «Создать проверку работоспособности» .
- Установите следующие значения, оставьте все остальные значения по умолчанию:
Свойство | Значение (выберите указанный вариант) |
Имя | http-проверка работоспособности |
Протокол | TCP |
Порт | 80 |
- Нажмите Сохранить .
- Установите флажок Включить ведение журнала .
- Установите частоту дискретизации на 1:
- Нажмите «Создать» , чтобы создать серверную службу.
Настройка интерфейса
Правила хоста и пути определяют, как будет направляться ваш трафик. Например, вы можете направить видеотрафик на один сервер, а статический трафик — на другой сервер. Однако в этой лабораторной работе вы не настраиваете правила хоста и пути.
- Нажмите «Конфигурация внешнего интерфейса» .
- Укажите следующее, оставив все остальные значения по умолчанию:
Свойство | Значение (введите значение или выберите указанный вариант) |
Протокол | HTTP |
IP-версия | IPv4 |
IP-адрес | Эфемерный |
Порт | 80 |
- Нажмите Готово .
- Нажмите «Добавить внешний IP-адрес и порт» .
- Укажите следующее, оставив все остальные значения по умолчанию:
Свойство | Значение (введите значение или выберите указанный вариант) |
Протокол | HTTP |
IP-версия | IPv6 |
IP-адрес | Эфемерный |
Порт | 80 |
- Нажмите Готово .
Просмотрите и создайте балансировщик нагрузки HTTP.
- Нажмите «Просмотреть и завершить» .
- Просмотрите серверные службы и внешний интерфейс .
- Нажмите «Создать» .
- Подождите, пока будет создан балансировщик нагрузки.
- Нажмите на имя балансировщика нагрузки ( http-lb ).
- Запишите адреса IPv4 и IPv6 балансировщика нагрузки для следующей задачи. Они будут называться [LB_IP_v4] и [LB_IP_v6] соответственно.
6. Проверьте балансировщик нагрузки HTTP.
Теперь, когда вы создали балансировщик нагрузки HTTP для своих серверных частей, убедитесь, что трафик перенаправляется на внутреннюю службу.
Доступ к балансировщику нагрузки HTTP
Чтобы проверить доступ IPv4 к балансировщику нагрузки HTTP, откройте новую вкладку в браузере и перейдите по адресу http://[LB_IP_v4] . Обязательно замените [LB_IP_v4] на IPv4-адрес балансировщика нагрузки.
Если у вас есть локальный адрес IPv6, попробуйте использовать адрес IPv6 балансировщика нагрузки HTTP, перейдя по адресу http://[LB_IP_v6]. Обязательно замените [LB_IP_v6] на IPv6-адрес балансировщика нагрузки.
Стресс-тестирование балансировщика нагрузки HTTP
Создайте новую виртуальную машину для имитации нагрузки на балансировщик нагрузки HTTP с помощью Siege. Затем определите, сбалансирован ли трафик между обоими серверами при высокой нагрузке.
- В консоли перейдите в меню навигации ( ) > Compute Engine > Экземпляры виртуальных машин .
- Нажмите Создать экземпляр .
- Установите следующие значения, оставьте все остальные значения по умолчанию:
Свойство | Значение (введите значение или выберите указанный вариант) |
Имя | осада-VM |
Область | США-Запад1 |
Зона | США-west1-c |
Ряд | N1 |
- Нажмите Создать .
- Подождите, пока будет создан экземпляр siege-vm .
- Для siege-vm нажмите SSH , чтобы запустить терминал и подключиться.
- Запустите следующую команду, чтобы установить Siege:
sudo apt-get -y install siege
- Чтобы сохранить адрес IPv4 балансировщика нагрузки HTTP в переменной среды, выполните следующую команду, заменив [LB_IP_v4] адресом IPv4:
export LB_IP=[LB_IP_v4]
- Чтобы смоделировать нагрузку, выполните следующую команду:
siege -c 250 http://$LB_IP
Вывод должен выглядеть следующим образом ( не копировать; это пример вывода ):
New configuration template added to /home/student/.siege Run siege -C to view the current settings in that file ** SIEGE 4.0.4 ** Preparing 250 concurrent users for battle. The server is now under siege...
- В облачной консоли щелкните меню навигации ( ), нажмите «Сетевые службы» > «Балансировка нагрузки» .
- Нажмите http-lb .
- Нажмите на вкладку Мониторинг . Отслеживайте трафик между Северной Америкой и двумя серверами в течение 2–3 минут.
Сначала трафик должен быть направлен только на us-east1-mig , но по мере увеличения числа запросов в секунду трафик также направляется на europe-west1-mig .
Это демонстрирует, что по умолчанию трафик перенаправляется на ближайший бэкенд, но если нагрузка очень высока, трафик можно распределить по бэкендам.
- Вернитесь к SSH- терминалу siege-vm .
- Нажмите CTRL+C , чтобы остановить осаду.
7. Создайте политику ограничения скорости облачной брони.
В этом разделе вы будете использовать Cloud Armor, чтобы запретить siege-vm доступ к балансировщику нагрузки HTTP, установив политику ограничения скорости.
- В Cloud Shell (инструкции по использованию Cloud Shell см. в разделе «Запуск Cloud Shell » раздела « Настройка и требования ») создайте политику безопасности через gcloud:
gcloud compute security-policies create rate-limit-siege \ --description "policy for rate limiting"
- Затем добавьте правило ограничения скорости:
gcloud beta compute security-policies rules create 100 \ --security-policy=rate-limit-siege \ --expression="true" \ --action=rate-based-ban \ --rate-limit-threshold-count=50 \ --rate-limit-threshold-interval-sec=120 \ --ban-duration-sec=300 \ --conform-action=allow \ --exceed-action=deny-404 \ --enforce-on-key=IP
- Прикрепите политику безопасности к http-бэкенду серверной службы:
gcloud compute backend-services update http-backend \ --security-policy rate-limit-siege –-global
- В консоли перейдите в меню навигации > Сетевая безопасность > Cloud Armor .
- Нажмите «Ограничение скорости». Ваша политика должна выглядеть следующим образом:
Проверьте политику безопасности
- Вернитесь к SSH-терминалу siege-vm.
- Запустите завиток по IP-адресу LB, чтобы убедиться, что вы все еще можете к нему подключиться, и должен получить ответ 200.
curl http://$LB_IP
- В SSH-терминале siege-vm для имитации загрузки выполните следующую команду:
siege -c 250 http://$LB_IP
Вывод должен выглядеть следующим образом (не копировать; это пример вывода):
** SIEGE 4.0.4 ** Preparing 250 concurrent users for battle. The server is now under siege...
- Изучите журналы политики безопасности, чтобы определить, заблокирован ли этот трафик.
- В консоли перейдите в меню навигации > Сетевая безопасность > Cloud Armor .
- Нажмите «Ограничение скорости-осада» .
- Нажмите Журналы .
- Нажмите «Просмотреть журналы политики» .
- На странице «Журнал» обязательно очистите весь текст в предварительном просмотре запроса.
- Выберите ресурс Cloud HTTP Load Balancer > http-lb-forwarding-rule > http-lb, затем нажмите «Добавить» . Альтернативно, ниже приведен запрос MQL (язык запросов мониторинга), который вы можете скопировать и вставить в редактор запросов:
resource.type="http_load_balancer" resource.labels.forwarding_rule_name="http-lb-forwarding-rule" resource.labels.url_map_name="http-lb"
- Теперь нажмите «Выполнить запрос» .
- Разверните запись журнала в результатах запроса.
- Разверните httpRequest . Запрос должен быть с IP-адреса siege-vm . Если нет, разверните другую запись журнала.
- Разверните jsonPayload.
- Разверните принудительныйSecurityPolicy.
Обратите внимание, что для параметра configureAction установлено значение RATE_BASED_BAN с именемrate -limit-siege .
- Для дополнительной проверки перейдите в меню навигации ( ), нажмите «Сетевые службы» > «Балансировка нагрузки» . Нажмите http-lb . Нажмите на вкладку Мониторинг .
Вы можете увидеть осадный трафик на графиках. Вы также заметите, что трафик с ограниченной скоростью не достигает серверной части и блокируется политикой Cloud Armor.
Поздравляем! Вы завершили эту лабораторную работу по ограничению скорости с помощью Cloud Armor.
© Google LLC, 2020. Все права защищены. Google и логотип Google являются товарными знаками Google LLC. Все остальные названия компаний и продуктов могут быть товарными знаками соответствующих компаний, с которыми они связаны.
8. Уборка лаборатории
- Перейдите в раздел «Сетевая безопасность» >> Cloud Armor >> %POLICY NAME% и выберите «Удалить».
- Перейдите в Сеть >> Сетевые службы >> Балансировка нагрузки. Выберите созданный вами балансировщик нагрузки и нажмите «Удалить».
Выберите серверную службу и проверку работоспособности в качестве дополнительных ресурсов для удаления.
- Перейдите в меню навигации ( ) > Compute Engine > Группы экземпляров. Выберите обе группы управляемых экземпляров и нажмите «Удалить».
Подтвердите удаление, набрав «удалить» в текстовом поле.
Подождите, пока группы управляемых экземпляров будут удалены. При этом также удаляются экземпляры в группе. Удалить шаблоны можно только после удаления группы экземпляров.
- Перейдите к шаблонам экземпляров на левой боковой панели**.** Выберите оба шаблона экземпляров и нажмите «Удалить».
- Перейдите к экземплярам виртуальных машин на левой панели**.** Выберите многоточие рядом с экземпляром siege-vm и нажмите «Удалить».
- Перейдите в меню навигации ( ) > Сеть VPC > Брандмауэр . Выберите проверку работоспособности по умолчанию и нажмите «Удалить».
9. Поздравляем!
Вы успешно реализовали ограничение скорости с помощью Cloud Armor. Вы настроили балансировщик нагрузки HTTP с бэкэндами в us-east1 и europe-west1. Затем вы провели стресс-тестирование балансировщика нагрузки с помощью виртуальной машины и заблокировали IP-адрес с помощью ограничения скорости с помощью Cloud Armor. Вы смогли изучить журналы политики безопасности, чтобы определить, почему трафик был заблокирован.
Что мы рассмотрели
- Как настроить шаблоны экземпляров и создать управляемые группы экземпляров.
- Как настроить балансировщик нагрузки HTTP.
- Как создать политику ограничения скорости Cloud Armor.
- Как проверить, что Политика ограничения ставок работает должным образом.
Следующие шаги
- Попробуйте настроить политику ограничения скорости на основе исходного диапазона IP-адресов. Пример команды ниже –
gcloud alpha compute security-policies rules create 105 \ --security-policy sec-policy \ --src-ip-ranges "1.2.3.0/24" \ --action throttle \ --rate-limit-threshold-count 100 \ --rate-limit-threshold-interval-sec 60 \ --conform-action allow \ --exceed-action deny-429 \ --enforce-on-key IP
- Попробуйте настроить политику ограничения скорости на основе кода региона. Пример команды ниже –
gcloud alpha compute security-policies rules create 101 \ --security-policy sec-policy \ --expression "origin.region_code == 'US'" \ --action rate-based-ban \ --rate-limit-threshold-count 10 \ --rate-limit-threshold-interval-sec 60 \ --ban-duration-sec 300 \ --ban-threshold-count 1000 \ --ban-threshold-interval-sec 600 \ --conform-action allow \ --exceed-action deny-403 \ --enforce-on-key IP