Развертывание веб-приложения на серверах Yandex BareMetal с L7-балансировщиком и защитой Yandex Smart Web Security
В этом руководстве вы развернете веб-приложение на серверах Yandex BareMetal. Для обеспечения равномерного распределения нагрузки на хосты с приложением вы настроите L7-балансировщик Yandex Application Load Balancer. Создаваемое веб-приложение будет защищено от ботов, DDoS- и веб-атак в помощью профиля безопасности Yandex Smart Web Security. Приватное соединение между облачной сетью Yandex Virtual Private Cloud и приватной сетью Yandex BareMetal обеспечивается с помощью Routing Instance Yandex Cloud Interconnect.
Схема решения:
Где:
- 
Инфраструктура на стороне BareMetal, которая включает в себя:
- приватную подсеть 
subnet-m4в пуле серверовkz1-m4; - виртуальный сегмент сети (VRF) 
my-vrf; - два сервера BareMetal в пуле серверов 
kz1-m4с развернутым веб-приложением —alb-back-0иalb-back-1. 
 - приватную подсеть 
 - 
Routing InstanceCloud Interconnect, который обеспечивает сетевую связность между сетями Virtual Private Cloud и BareMetal. - 
Инфраструктура на стороне Virtual Private Cloud, которая включает в себя:
- облачную сеть 
sample-network; - подсети 
vpc-subnet-aиvpc-subnet-bв зонах доступностиkz1-aиkz1-b; - L7-балансировщик Application Load Balancer 
demo-alb-bms; - профиль безопасности Smart Web Security 
sws-demo-profile; - виртуальную машину 
vm-validator, используемую для проверки сетевой связности между сетями Virtual Private Cloud и BareMetal. 
 - облачную сеть 
 
Чтобы развернуть веб-приложение на серверах Yandex BareMetal с L7-балансировщиком и защитой Yandex Smart Web Security:
- Подготовьте облако к работе.
 - Подготовьте окружение VPC.
 - Создайте Routing Instance.
 - Подготовьте окружение BareMetal.
 - Настройте L7-балансировщик.
 - Настройте защиту от ботов, DDoS- и веб-атак.
 
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
 , затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
 убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVEилиTRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако. 
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки инфраструктуры для развертывания веб-приложения на серверах BareMetal с L7-балансировщиком и защитой Smart Web Security входят:
- плата за использование публичного IP-адреса виртуальной машины (см. тарифы Yandex Virtual Private Cloud);
 - плата за вычислительные ресурсы и диски ВМ (см. тарифы Yandex Compute Cloud);
 - плата за аренду серверов BareMetal (см. тарифы Yandex BareMetal);
 - плата за использование вычислительных ресурсов L7-балансировщика (см. тарифы Yandex Application Load Balancer);
 - плата за запросы, обработанные правилами профиля безопасности (см. тарифы Yandex Smart Web Security);
 - при использовании лог-группы для записи логов балансировщика плата за запись и хранение данных (см. тарифы Yandex Cloud Logging).
 
Трафик между приватными адресами Yandex BareMetal и Yandex Virtual Private Cloud, передаваемый в обоих направлениях через Yandex Cloud Interconnect, не тарифицируется.
Подготовьте окружение VPC
Настройте инфраструктуру на стороне Virtual Private Cloud. На этом этапе вы создадите облачную сеть, подсети, необходимые группы безопасности и виртуальную машину.
Создайте облачную сеть
- В консоли управления
 выберите каталог, в котором вы будете создавать инфраструктуру. - В списке сервисов выберите Virtual Private Cloud.
 - Справа сверху нажмите Создать сеть.
 - В поле Имя укажите 
sample-network. - В поле Дополнительно отключите опцию Создать подсети.
 - Нажмите кнопку Создать сеть.
 
Создайте подсети
- 
В консоли управления
 выберите каталог, в котором вы создаете облачную инфраструктуру. - 
В списке сервисов выберите Virtual Private Cloud.
 - 
На панели слева выберите
 Подсети. - 
Справа сверху нажмите Создать подсеть.
 - 
В поле Имя укажите
vpc-subnet-a. - 
В поле Зона доступности выберите зону доступности
kz1-a. - 
В поле Сеть выберите облачную сеть
sample-network. - 
В поле CIDR укажите
192.168.6.0/24.Важно
Для успешной настройки сетевой связности между подсетями BareMetal и подсетями VPC/on-prem, их диапазоны адресов, заданные CIDR, не должны совпадать или пересекаться.
 - 
Нажмите Создать подсеть.
 - 
Аналогичным способом создайте в сети
sample-networkподсетьvpc-subnet-bв зоне доступностиkz1-bс CIDR192.168.11.0/24. 
Создайте группы безопасности
- 
В консоли управления
 выберите каталог, в котором вы создаете облачную инфраструктуру. - 
В списке сервисов выберите Virtual Private Cloud.
 - 
На панели слева выберите
 Группы безопасности и нажмите кнопку Создать группу безопасности. - 
В поле Имя задайте имя
vpc-ingress-sg. - 
В поле Сеть выберите созданную ранее сеть
sample-network. - 
В блоке Правила создайте следующие правила для управления трафиком:
Направление 
трафикаОписание Диапазон портов Протокол Источник / 
НазначениеCIDR блоки / 
Группа безопасностиВходящий http80TCPCIDR0.0.0.0/0Входящий https443TCPCIDR0.0.0.0/0Входящий ssh22TCPCIDR0.0.0.0/0Исходящий anyВесьЛюбойCIDR0.0.0.0/0 - 
Нажмите Создать.
 - 
Аналогичным способом создайте в сети
sample-networkгруппу безопасностиalb-sgсо следующими правилами:Направление 
трафикаОписание Диапазон портов Протокол Источник / 
НазначениеCIDR блоки / 
Группа безопасностиВходящий http80TCPCIDR0.0.0.0/0Входящий healthchecks30080TCPПроверки состояния балансировщика— Исходящий anyВесьЛюбойCIDR0.0.0.0/0 
Создайте виртуальную машину
- 
В консоли управления
 выберите каталог, в котором вы создаете инфраструктуру. - 
В списке сервисов выберите Compute Cloud.
 - 
На панели слева выберите
 Виртуальные машины и нажмите кнопку Создать виртуальную машину. - 
В блоке Образ загрузочного диска выберите образ Ubuntu 24.04.
 - 
В блоке Расположение выберите зону доступности
kz1-a. - 
В блоке Сетевые настройки:
- В поле Подсеть выберите созданную ранее подсеть 
vpc-subnet-a. - В поле Публичный IP-адрес выберите 
Автоматически. - В поле Группы безопасности выберите созданную ранее группу безопасности 
vpc-ingress-sg. 
 - В поле Подсеть выберите созданную ранее подсеть 
 - 
В блоке Доступ выберите вариант SSH-ключ и укажите данные для доступа на ВМ:
- В поле Логин введите имя пользователя: 
yc-user. - 
В поле SSH-ключ выберите SSH-ключ, сохраненный в вашем профиле пользователя организации.
Если в вашем профиле нет сохраненных SSH-ключей или вы хотите добавить новый ключ:
- 
Нажмите кнопку Добавить ключ.
 - 
Задайте имя SSH-ключа.
 - 
Выберите вариант:
- 
Ввести вручную— вставьте содержимое открытого SSH-ключа. Пару SSH-ключей необходимо создать самостоятельно. - 
Загрузить из файла— загрузите открытую часть SSH-ключа. Пару SSH-ключей необходимо создать самостоятельно. - 
Сгенерировать ключ— автоматическое создание пары SSH-ключей.При добавлении сгенерированного SSH-ключа будет создан и загружен архив с парой ключей. В ОС на базе Linux или macOS распакуйте архив в папку
/home/<имя_пользователя>/.ssh. В ОС Windows распакуйте архив в папкуC:\Users\<имя_пользователя>/.ssh. Дополнительно вводить открытый ключ в консоли управления не требуется. 
 - 
 - 
Нажмите кнопку Добавить.
 
SSH-ключ будет добавлен в ваш профиль пользователя организации. Если в организации отключена возможность добавления пользователями SSH-ключей в свои профили, добавленный открытый SSH-ключ будет сохранен только в профиле пользователя внутри создаваемого ресурса.
 - 
 
 - В поле Логин введите имя пользователя: 
 - 
В блоке Общая информация задайте имя ВМ:
vm-validator. - 
Нажмите кнопку Создать ВМ.
 
Создайте Routing Instance
Для организации сетевой связности между подсетями BareMetal и подсетями Virtual Private Cloud необходимо создать ресурс Routing Instance. Routing Instance можно создать через обращение
Если в вашем каталоге уже есть настроенная сетевая связность с использованием Cloud Interconnect (VPC-to-On-Prem), то вы можете как использовать уже существующий Routing Instance, так и запросить создание нового, дополнительного Routing Instance для организации обособленной сетевой связности.
Проверьте наличие Routing Instance в вашем каталоге
- 
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду
yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров--folder-nameили--folder-id. - 
Проверьте наличие Routing Instance в каталоге по умолчанию:
CLIВыполните команду:
yc cloudrouter routing-instance listЕсли в вашем каталоге уже есть Routing Instance, команда выведет приблизительно такой результат:
+----------------------+-------------------------------------------+--------+-----------------------+ | ID | NAME | STATUS | PRIVATE CONNECTION ID | +----------------------+-------------------------------------------+--------+-----------------------+ | cf35oot8f0eu******** | ajeol2afu1js********-enpcfncr6uld******** | ACTIVE | cf395uf8dg7h******** | +----------------------+-------------------------------------------+--------+-----------------------+ - 
Если у вас уже есть
Routing Instance, вы можете пропустить следующий шаг и переходить к подготовке окружения BareMetal.Если у вас нет
Routing Instanceили вы хотите построить дополнительную, обособленную сетевую связность, запросите создание новогоRouting Instance. 
Запросите создание Routing Instance
ОбратитесьRouting Instance в вашем каталоге.
Оформите ваше обращение следующим образом:
Тема: [CIC для BareMetal] Создать Routing Instance.
Текст обращения:
Прошу Создать Routing Instance в указанном облачном каталоге со следующими параметрами:
folder_id: <идентификатор_каталога>
vpc:
  vpc_net_id: <идентификатор_сети>
    vpc_subnets: 
      kz1-a: [CIDR_a1, CIDR_a2, ..., CIDR_an]
      kz1-b: [CIDR_b1, CIDR_b2, ..., CIDR_bn]
      kz1-d: [CIDR_d1, CIDR_d2, ..., CIDR_dn]
        
    Где:
- 
folder_id— идентификатор каталога. - 
vpc_net_id— идентификатор облачной сети. - 
vpc_subnets— список анонсируемых адресных префиксов для каждой из зон доступности. Например, для созданной ранее подсети VPC вы укажетеkz1-b: [192.168.11.0/24].Допускается анонсирование адресных префиксов с агрегированием.
 
Примечание
Создание Routing Instance службой технической поддержки может занять до 24 часов. В результате вы сможете получить идентификатор созданного Routing Instance, выполнив команду Yandex Cloud CLI yc cloudrouter routing-instance list.
Подготовьте окружение BareMetal
Настройте инфраструктуру на стороне BareMetal. На этом этапе вы создадите виртуальный сегмент сети (VRF), приватную подсеть и настроите приватное соединение с облачной сетью, а также арендуете два сервера BareMetal.
Создайте виртуальный сегмент сети и приватную подсеть
Создайте VRF и приватную подсеть в пуле серверов kz1-m4:
- В консоли управления
 выберите каталог, в котором вы создаете инфраструктуру. - В списке сервисов выберите BareMetal.
 - Создайте виртуальный сегмент сети:
- На панели слева выберите 
 VRF и нажмите кнопку Создать VRF. - В поле Имя задайте имя VRF: 
my-vrf. - Нажмите кнопку Создать VRF.
 
 - На панели слева выберите 
 - Создайте приватную подсеть:
- На панели слева выберите 
 Приватные подсети и нажмите кнопку Создать подсеть. - В поле Пул выберите пул серверов 
kz1-m4. - В поле Имя задайте имя подсети: 
subnet-m4. - Включите опцию IP-адресация и маршрутизация.
 - В поле Виртуальный сетевой сегмент (VRF) выберите созданный ранее сегмент 
my-vrf. - В поле CIDR укажите 
172.28.4.0/24. - В поле Шлюз по умолчанию оставьте значение по умолчанию 
172.28.4.1. - Включите опцию Назначение IP-адресов по DHCP и в появившемся поле Диапазон IP-адресов оставьте значения по умолчанию: 
172.28.4.1—172.28.4.254. - Нажмите кнопку Создать подсеть.
 
 - На панели слева выберите 
 
Настройте приватное соединение с облачной сетью
Создайте приватное соединение Cloud Interconnect в сервисе BareMetal:
- 
В консоли управления
 выберите каталог, в котором вы хотите создать приватное соединение. - 
В списке сервисов выберите BareMetal.
 - 
На панели слева выберите
 VRF и выберите нужный виртуальный сегмент сети. - 
В блоке Приватное соединение с облачными сетями нажмите кнопку Настроить соединение и в открывшемся окне:
- 
В поле Способ настройки выберите вариант
Указать идентификатори в поле Идентификатор соединения вставьте идентификатор приватного соединенияRouting Instance.Вы также можете выбрать вариант
Выбрать из каталога. В этом случае в появившемся списке выберите нужныйRouting Instance.В результате в форме отобразятся CIDR подсетей Virtual Private Cloud, которые будут анонсироваться в Cloud Interconnect.
Важно
Для успешной настройки сетевой связности между подсетями BareMetal и подсетями VPC/on-prem, их диапазоны адресов, заданные CIDR, не должны совпадать или пересекаться.
 - 
Чтобы создать приватное соединение с указанными CIDR подсетей, нажмите кнопку Сохранить.
 
 - 
 
В результате на странице с информацией о VRF в блоке Приватное соединение с облачными сетями отобразится идентификатор созданного соединения и его статус.
Примечание
Создание приватного соединения может занять до двух рабочих дней — в это время соединение будет находиться в статусе Creating. После создания статус соединения изменится на Ready.
Приватное соединение c облачными сетями может находиться в одном из следующих статусов:
CREATING— соединение создается.READY— соединение сконфигурировано и готово к работе.ERROR— возникла проблема с приватным соединением, для устранения необходимо обратиться в поддержку.DELETING— соединение удаляется.UPDATING— настройки приватного соединения обновляются.
Арендуйте серверы BareMetal
- 
В консоли управления
 выберите каталог, в котором вы создаете инфраструктуру. - 
В списке сервисов выберите BareMetal и нажмите кнопку Заказать сервер.
 - 
В блоке Конфигурация нажмите фильтр
Пули выберите пул серверовkz1-m4. - 
В блоке Конфигурация выберите подходящую конфигурацию сервера.
 - 
(Опционально) В блоке Диск настройте разметку дисков:
- 
Нажмите кнопку Настроить разделы диска.
 - 
Укажите параметры разделов. Чтобы создать новый раздел, нажмите кнопку
 Добавить раздел.Чтобы самостоятельно собрать RAID-массивы и настроить разделы дисков, нажмите кнопку Разобрать RAID.
 - 
Нажмите кнопку Сохранить.
 
 - 
 - 
В блоке Образ выберите образ
Debian 11. - 
В поле Период аренды выберите период, на который вы заказываете аренду —
1 день.По окончании указанного периода аренда сервера будет автоматически продлена на такой же период. Прервать аренду в течение указанного периода аренды нельзя, но можно отказаться от дальнейшего продления аренды сервера.
 - 
В блоке Приватная сеть в поле Приватная подсеть выберите созданную ранее подсеть
subnet-m4. - 
В блоке Публичная сеть в поле Публичный адрес выберите
Из эфемерной подсети. - 
В блоке Доступ:
- 
В поле Пароль воспользуйтесь одним из вариантов создания пароля для root-пользователя:
- 
Чтобы сгенерировать пароль для root-пользователя, выберите опцию
Новый парольи нажмите кнопку Сгенерировать.Важно
Этот вариант предусматривает ответственность пользователя за безопасность пароля. Сохраните сгенерированный пароль в надежном месте: он не сохраняется в Yandex Cloud, и после заказа сервера вы не сможете посмотреть его.
 - 
Чтобы использовать пароль root-пользователя, сохраненный в секрете Yandex Lockbox, выберите опцию
Секрет Lockbox:В полях Имя, Версия и Ключ выберите соответственно секрет, его версию и ключ, в которых сохранен ваш пароль.
Если у вас еще нет секрета Yandex Lockbox, нажмите кнопку Создать, чтобы создать его.
Этот вариант позволяет вам как задать собственный пароль (тип секрета
Пользовательский), так и использовать пароль, сгенерированный автоматически (тип секретаГенерируемый). 
 - 
 - 
В поле Открытый SSH-ключ выберите SSH-ключ, сохраненный в вашем профиле пользователя организации.
Если в вашем профиле нет сохраненных SSH-ключей или вы хотите добавить новый ключ:
- 
Нажмите кнопку Добавить ключ.
 - 
Задайте имя SSH-ключа.
 - 
Выберите вариант:
- 
Ввести вручную— вставьте содержимое открытого SSH-ключа. Пару SSH-ключей необходимо создать самостоятельно. - 
Загрузить из файла— загрузите открытую часть SSH-ключа. Пару SSH-ключей необходимо создать самостоятельно. - 
Сгенерировать ключ— автоматическое создание пары SSH-ключей.При добавлении сгенерированного SSH-ключа будет создан и загружен архив с парой ключей. В ОС на базе Linux или macOS распакуйте архив в папку
/home/<имя_пользователя>/.ssh. В ОС Windows распакуйте архив в папкуC:\Users\<имя_пользователя>/.ssh. Дополнительно вводить открытый ключ в консоли управления не требуется. 
 - 
 - 
Нажмите кнопку Добавить.
 
SSH-ключ будет добавлен в ваш профиль пользователя организации. Если в организации отключена возможность добавления пользователями SSH-ключей в свои профили, добавленный открытый SSH-ключ будет сохранен только в профиле пользователя внутри создаваемого ресурса.
 - 
 
 - 
 - 
В блоке Информация о сервере в поле Имя задайте имя сервера:
alb-back-0. - 
Нажмите кнопку Заказать сервер.
 - 
Аналогичным способом арендуйте в пуле серверов
kz1-m4еще один серверalb-back-1. 
Примечание
Подготовка сервера и установка на него операционной системы может занять до 45 минут — в это время сервер будет находиться в статусе Provisioning. После завершения установки ОС сервер перейдет в статус Ready.
Разверните веб-приложение
На этом этапе вы развернете веб-приложение на серверах BareMetal. Веб-приложением на серверах будут использованы следующие ресурсы:
/opt/mygoapp— рабочая директория веб-сервера./opt/mygoapp/server— исполняемый файл веб-сервера./etc/systemd/system/mygoapp.service— файл конфигурации сервиса для управления веб-сервером через systemd .
Чтобы развернуть веб-приложение на сервере:
- 
Подключитесь по SSH к серверу BareMetal
alb-back-0:ssh root@<публичный_IP-адрес_сервера>Публичный IP-адрес сервера можно узнать в консоли управления
 на странице Обзор с информацией о сервере BareMetal. Нужный адрес указан в блоке Публичная сеть в поле Публичный адрес.Все последующие действия этого шага выполняются в терминале сервера.
 - 
Подготовьте рабочую директорию:
mkdir -p /opt/mygoapp && cd /opt/mygoapp - 
Загрузите исполняемый файл веб-сервера:
wget https://storage.yandexcloud.net/yc-public-share/server - 
Установите для скачанного файла разрешение на исполнение:
chmod +x server - 
Создайте в
systemdновый сервис:- 
Откройте файл конфигурации создаваемого сервиса:
nano /etc/systemd/system/mygoapp.service - 
Вставьте в открытый файл следующее содержимое:
[Unit] Description=Simple Web Server on Go After=network.target [Service] Type=simple WorkingDirectory=/opt/mygoapp ExecStart=/opt/mygoapp/server Restart=always RestartSec=5 [Install] WantedBy=multi-user.target - 
Закройте файл, сохранив изменения.
 
 - 
 - 
Инициализируйте созданный сервис:
systemctl daemon-reload - 
Запустите сервис:
systemctl start mygoapp.service - 
Проверьте работу веб-приложения. Для этого на вашем локальном компьютере вставьте публичный IP-адрес сервера
alb-back-0в адресную строку браузера.В результате в окне браузера откроется страница с именем хоста и информацией о продолжительности работы веб-сервера с момента его запуска.
Исходный код создаваемого веб-приложения
package main import ( "context" "fmt" "net/http" "os" "os/signal" "syscall" "time" "github.com/gorilla/handlers" ) var ( hostname string htmlContent []byte ) const ( serverTimeout = 5 * time.Second cacheDuration = 86400 * 30 // 30 дней в секундах htmlTemplate = ` <!DOCTYPE html> <html lang="en"> <head> <!-- Минифицированный CSS --> <style>*{margin:0;padding:0;box-sizing:border-box;font-family:'Segoe UI',system-ui,sans-serif}body{min-height:100vh;display:flex;justify-content:center;align-items:center;background:linear-gradient(135deg,#1a1a1a,#2d2d2d);color:#fff;padding:20px}.container{background:rgba(255,255,255,0.1);backdrop-filter:blur(10px);border-radius:20px;padding:40px;box-shadow:0 8px 32px rgba(0,0,0,0.3);text-align:center;max-width:600px;width:100%%;transition:transform .3s ease}.server-name{font-size:1.8rem;margin-bottom:30px;color:#0f0;font-weight:600;text-shadow:0 0 10px rgba(0,255,136,0.3)}.datetime{font-size:2.5rem;letter-spacing:2px;margin-bottom:20px}.date{font-size:1.5rem;opacity:.8}@media (max-width:768px){.container{padding:25px;border-radius:15px}.server-name{font-size:1.4rem}.datetime{font-size:2rem}.date{font-size:1.2rem}}@media (max-width:480px){.datetime{font-size:1.6rem}}</style> <meta name="viewport" content="width=device-width,initial-scale=1"> <title>Server Info & Time</title> </head> <body> <div class="container"> <div class="server-name">Server Hostname: %s</div> <div class="datetime" id="datetime"></div> <div class="date" id="date"></div> </div> <script> // Минифицированный JavaScript const e=()=>{const e=new Date;document.getElementById("datetime").textContent=e.toLocaleTimeString("en-US",{timeZone:"Europe/Moscow",hour12:!1,hour:"2-digit",minute:"2-digit",second:"2-digit"}),document.getElementById("date").textContent=e.toLocaleDateString("en-US",{timeZone:"Europe/Moscow",weekday:"long",year:"numeric",month:"long",day:"numeric"})};e(),setInterval(e,1e3); </script> </body> </html>` ) func init() { // Инициализация хоста при старте var err error if hostname, err = os.Hostname(); err != nil { hostname = "Unavailable" } // Предварительная генерация HTML htmlContent = []byte(fmt.Sprintf(htmlTemplate, hostname)) } func main() { // Настройка обработчиков mux := http.NewServeMux() mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "text/html; charset=utf-8") w.Header().Set("Cache-Control", fmt.Sprintf("public, max-age=%d", cacheDuration)) w.Write(htmlContent) }) // Middleware chain := handlers.CompressHandler( handlers.CombinedLoggingHandler(os.Stdout, mux), ) // Конфигурация сервера server := &http.Server{ Addr: ":80", Handler: chain, ReadTimeout: serverTimeout, WriteTimeout: serverTimeout, IdleTimeout: serverTimeout * 2, } // Graceful shutdown ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM) defer stop() go func() { <-ctx.Done() shutdownCtx, cancel := context.WithTimeout( context.Background(), 5*time.Second) defer cancel() server.Shutdown(shutdownCtx) }() fmt.Println("Server started") if err := server.ListenAndServe(); err != http.ErrServerClosed { fmt.Printf("Server error: %v\n", err) } } - 
Аналогичным способом разверните веб-приложение на сервере
alb-back-1. 
Проверьте сетевую связность
Убедитесь, что созданное ранее приватное соединение с облачной сетью готово к работе (статус Ready), затем проверьте наличие сетевой связности между виртуальной машиной vm-validator в сети Virtual Private Cloud и серверами в приватной подсети BareMetal:
- 
Подключитесь по SSH к виртуальной машине
vm-validator:ssh yc-user@<публичный_IP-адрес_ВМ>Публичный IP-адрес ВМ можно узнать в консоли управления
 , в поле Публичный IPv4-адрес блока Сеть на странице с информацией о ВМ.Все последующие действия этого шага выполняются в терминале виртуальной машины.
 - 
Выполните проверку сетевого доступа к серверу
alb-back-0, указав его приватный IP-адрес:ping <приватный_IP-адрес_сервера> -s 1024 -c 3Приватный IP-адрес сервера можно узнать в консоли управления
 на странице Обзор с информацией о сервере BareMetal. Нужный адрес указан в блоке Приватная сеть в поле Приватный IP-адрес.Результат:
PING 172.28.4.11 (172.28.4.11) 1024(1052) bytes of data. 1032 bytes from 172.28.4.11: icmp_seq=1 ttl=58 time=3.77 ms 1032 bytes from 172.28.4.11: icmp_seq=2 ttl=58 time=3.83 ms 1032 bytes from 172.28.4.11: icmp_seq=3 ttl=58 time=3.80 ms --- 172.28.4.11 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2004ms rtt min/avg/max/mdev = 3.767/3.800/3.830/0.025 ms - 
Аналогичным способом убедитесь в наличии сетевого доступа к серверу
alb-back-1, указав в командеpingего приватный IP-адрес. 
Сохраните полученные приватные IP-адреса серверов BareMetal — они понадобятся при настройке L7-балансировщика.
Настройте L7-балансировщик
Создав сегменты инфраструктуры на стороне Virtual Private Cloud и на стороне BareMetal, а также убедившись в наличии сетевой связности между этими сегментами, настройте балансировку трафика от пользователей к веб-приложению при помощи L7-балансировщика.
Создайте целевую группу L7-балансировщика
- 
В консоли управления
 выберите каталог, в котором вы создаете инфраструктуру. - 
В списке сервисов выберите Application Load Balancer.
 - 
На панели слева выберите
 Целевые группы и нажмите кнопку Создать целевую группу. - 
В поле Имя укажите имя целевой группы
bms-target-group. - 
В блоке Целевые ресурсы:
- В поле IP-адрес введите сохраненный ранее приватный IP-адрес сервера 
alb-back-0. - В строке с введенным IP-адресом включите опцию Не из VPC и нажмите кнопку Добавить целевой ресурс.
 - Повторите два предыдущих действия, чтобы добавить в целевую группу приватный IP-адрес сервера 
alb-back-1. 
 - В поле IP-адрес введите сохраненный ранее приватный IP-адрес сервера 
 - 
Нажмите кнопку Создать.
 
Создайте группу бэкендов
- 
В консоли управления
 выберите каталог, в котором вы создаете инфраструктуру. - 
В списке сервисов выберите Application Load Balancer.
 - 
На панели слева выберите
 Группы бэкендов и нажмите кнопку Создать группу бэкендов. - 
В поле Имя укажите имя группы бэкендов
bms-backend-group. - 
В поле Тип выберите
HTTP. - 
В блоке Бэкенды нажмите кнопку Добавить и в появившейся форме Новый бэкенд:
- 
В поле Имя задайте имя бэкенда
bms-backend. - 
В поле Целевые группы выберите созданную ранее целевую группу
bms-target-group. - 
В секции HTTP проверка состояния:
- В поле Таймаут, с задайте значение 
3. - В поле Интервал задайте значение 
10. - В поле Путь укажите корневой путь 
/. - В поле HTTP-коды выберите код ответа 
200. 
 - В поле Таймаут, с задайте значение 
 
Значения остальных параметров оставьте без изменений.
 - 
 - 
Нажмите кнопку Создать.
 
Создайте HTTP-роутер
- 
В консоли управления
 выберите каталог, в котором вы создаете инфраструктуру. - 
В списке сервисов выберите Application Load Balancer.
 - 
На панели слева выберите
 HTTP-роутеры и нажмите кнопку Создать HTTP-роутер. - 
В поле Имя укажите имя HTTP-роутера
http-80. - 
В блоке Виртуальные хосты нажмите кнопку Добавить виртуальный хост и в открывшейся форме Новый виртуальный хост:
- В поле Имя укажите имя виртуального хоста 
http-vhи нажмите кнопку Добавить маршрут. - В открывшейся форме Новый маршрут в поле Имя задайте имя маршрута 
main-route-80. - В поле Методы HTTP выберите 
GET. - В поле Группа бэкендов выберите созданную на предыдущем шаге группу бэкендов 
bms-backend-group. - Значения остальных параметров оставьте без изменений и внизу страницы нажмите кнопку Создать.
 
 - В поле Имя укажите имя виртуального хоста 
 
Создайте L7-балансировщик
- 
В консоли управления
 выберите каталог, в котором вы создаете инфраструктуру. - 
В списке сервисов выберите Application Load Balancer.
 - 
Нажмите кнопку Создать L7-балансировщик и выберите Вручную.
 - 
В поле Имя укажите имя балансировщика
demo-alb-bms. - 
В поле Сеть выберите сеть
sample-network. - 
В поле Группы безопасности выберите
Из спискаи в появившемся списке выберите группу безопасностиalb-sg. - 
В блоке Размещение оставьте только зоны доступности
kz1-aиkz1-bс подсетямиvpc-subnet-aиvpc-subnet-bсоответственно. - 
Если вы не хотите сохранять логи работы балансировщика в лог-группу, отключите опцию Запись логов.
 - 
В секции Обработчики нажмите кнопку Добавить обработчик и в открывшейся форме:
- В поле Имя укажите имя обработчика 
alb-bms-listener. - В поле HTTP-роутер выберите созданный ранее HTTP-роутер 
http-80. 
 - В поле Имя укажите имя обработчика 
 - 
Значения остальных параметров оставьте без изменений и внизу страницы нажмите кнопку Создать.
 - 
Дождитесь, когда статус балансировщика изменится на
Active, и в поле IP-адреса скопируйте его публичный IP-адрес. - 
На вашем локальном компьютере вставьте IP-адрес балансировщика в адресную строку браузера. Если все настроено корректно, в окне браузера откроется развернутое на серверах BareMetal веб-приложение.
 
Настройте защиту от ботов, DDoS- и веб-атак
Убедившись в корректной работе L7-балансировщика, настройте для вашего веб-приложения защиту от ботов, DDoS- и веб-атак с помощью профиля безопасности Smart Web Security.
Создайте профиль ARL
- 
В консоли управления
 выберите каталог, в котором вы создаете инфраструктуру. - 
В списке сервисов выберите Smart Web Security.
 - 
На панели слева выберите
 Профили ARL и нажмите кнопку Создать профиль ARL. - 
В поле Имя задайте имя профиля ARL
arl-profile-demo. - 
Нажмите кнопку
 Добавить правило и в открывшемся окне:- В поле Имя задайте имя правила 
permit-50-rps-in. - В поле Приоритет укажите 
10. - В поле Лимит запросов задайте лимит в 
50запросов за1 секунду. - Значения остальных параметров оставьте без изменений и нажмите кнопку Сохранить правило.
 
 - В поле Имя задайте имя правила 
 - 
Нажмите кнопку Создать.
 
Создайте профиль WAF
- В консоли управления
 выберите каталог, в котором вы создаете инфраструктуру. - В списке сервисов выберите Smart Web Security.
 - На панели слева выберите Профили WAF и нажмите кнопку Создать профиль WAF.
 - В поле Имя задайте имя профиля WAF 
waf-profile-demo. - По умолчанию в профиле WAF включен набор базовых правил OWASP Core Rule Set
 . Нажмите на строку с набором правил, чтобы посмотреть правила, которые в него входят. - Нажмите кнопку Создать.
 
Создайте профиль безопасности
- 
В консоли управления
 выберите каталог, в котором вы создаете инфраструктуру. - 
В списке сервисов выберите Smart Web Security.
 - 
На панели слева выберите
 Профили безопасности. - 
Нажмите кнопку Создать профиль и выберите вариант
С чистого листа. - 
В поле Имя задайте имя профиля безопасности
sws-demo-profile. - 
В поле Профиль ARL выберите созданный ранее профиль
arl-profile-demo. - 
Создайте новое правило
Web Application Firewall:- 
Нажмите кнопку
 Добавить правило. - 
В поле Имя задайте имя правила
waf-rule. - 
В поле Приоритет укажите значение
200. - 
В блоке Тип правила выберите
Web Application Firewallи в появившемся списке выберите созданное ранее правилоwaf-profile-demo.К создаваемому правилу будет применен набор правил из профиля WAF. Подозрительные запросы будут направляться в Yandex SmartCaptcha.
 - 
Нажмите кнопку Добавить.
 
Добавленное правило появится в списке правил в блоке Правила безопасности.
 - 
 - 
Создайте новое правило
Smart Protection:- 
Повторно нажмите кнопку
 Добавить правило. - 
В поле Имя задайте имя правила
smart-rule. - 
В поле Приоритет укажите значение
300. - 
В блоке Тип правила выберите
Smart Protection.Создаваемое правило будет направлять трафик на автоматический анализ с помощью алгоритмов машинного обучения и поведенческого анализа. Подозрительные запросы будут направляться в Yandex SmartCaptcha для дополнительной верификации.
 - 
Нажмите кнопку Добавить.
 
Добавленное правило появится в списке правил в блоке Правила безопасности.
 - 
 - 
Нажмите кнопку Создать профиль.
 
Включите защиту на хостах
- 
В консоли управления
 выберите каталог, в котором вы создаете инфраструктуру. - 
В списке сервисов выберите Smart Web Security.
 - 
На панели слева выберите
 Профили безопасности и выберите созданный ранее профильsws-demo-profile. - 
На панели сверху нажмите кнопку
 Подключить к хосту и в открывшемся окне:- Выберите балансировщик 
demo-alb-bms. - Выберите HTTP-роутер 
http-80. - Выберите виртуальный хост 
http-vh. - Нажмите кнопку Подключить.
 
Информация о подключенном виртуальном хосте появится на вкладке Подключенные хосты на странице с обзором профиля безопасности Smart Web Security.
 - Выберите балансировщик 
 
Вы настроили веб-приложение, развернув его на двух серверах BareMetal, организовав балансировку пользовательского трафика с помощью L7-балансировщика Application Load Balancer и обеспечив защиту с помощью профиля безопасности Smart Web Security.
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы:
- 
Удалите виртуальную машину.
 - 
Удалите L7-балансировщик, затем последовательно удалите HTTP-роутер, группу бэкендов и целевую группу балансировщика.
 - 
Удалите профиль безопасности Smart Web Security, затем удалите профиль WAF и профиль ARL.
 - 
Удалить серверы BareMetal нельзя. Вместо этого откажитесь от продления их аренды.
 - 
Если вы оставляли включенной опцию записи логов L7-балансировщика, удалите лог-группу.
 - 
При необходимости последовательно удалите группы безопасности, подсети и облачную сеть.
 - 
При необходимости удалите приватное соединение:
Консоль управления- В консоли управления
 выберите каталог, в котором вы создали инфраструктуру. - В списке сервисов выберите BareMetal.
 - На панели слева выберите 
 VRF и выберите виртуальный сегмент сетиmy-vrf. - В блоке Приватное соединение с облачными сетями нажмите 
 и выберите Отключить соединение. - В открывшемся окне подтвердите удаление.
 
В результате статус соединения сменится на
Deleting. После того как все связи будут удалены, соединение пропадет из списка. - В консоли управления