Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Network Load Balancer
  • Начало работы
    • Все руководства
    • Архитектура и защита базового интернет-сервиса
    • Реализация отказоустойчивых сценариев для сетевых виртуальных машин
    • Настройка отказоустойчивой архитектуры в Yandex Cloud
    • Обновление группы ВМ под нагрузкой
    • Интеграция Cloud DNS и корпоративного сервиса DNS
    • Подключение к Object Storage из Virtual Private Cloud
    • Подключение к Container Registry из Virtual Private Cloud
    • Реализация защищенной высокодоступной сетевой инфраструктуры с выделением DMZ на основе Check Point NGFW
    • Развертывание Microsoft Exchange
    • Развертывание группы доступности Always On с внутренним сетевым балансировщиком
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • История изменений
  • Вопросы и ответы
  • Обучающие курсы

В этой статье:

  • Подготовьте облако к работе
  • Необходимые платные ресурсы
  • Настройте профиль CLI
  • Подготовьте среду для развертывания ресурсов
  • Разверните ресурсы
  • Включите работу модуля route-switcher
  • Протестируйте работоспособность и отказоустойчивость решения
  • Тестирование работоспособности системы
  • Тестирование отказоустойчивости системы
  • Как удалить созданные ресурсы
  1. Практические руководства
  2. Реализация отказоустойчивых сценариев для сетевых виртуальных машин

Реализация отказоустойчивых сценариев для сетевых виртуальных машин

Статья создана
Yandex Cloud
Улучшена
mmerihsesh
Обновлена 15 мая 2025 г.
  • Подготовьте облако к работе
    • Необходимые платные ресурсы
  • Настройте профиль CLI
  • Подготовьте среду для развертывания ресурсов
  • Разверните ресурсы
  • Включите работу модуля route-switcher
  • Протестируйте работоспособность и отказоустойчивость решения
    • Тестирование работоспособности системы
    • Тестирование отказоустойчивости системы
  • Как удалить созданные ресурсы

В Yandex Cloud можно развернуть облачную инфраструктуру с использованием виртуальных машин (далее сетевых ВМ), выполняющих функции межсетевого экранирования, сетевой безопасности и маршрутизации трафика. С помощью статической маршрутизации трафик из подсетей направляется на сетевые ВМ.

Для обеспечения высокой доступности можно развернуть несколько сетевых ВМ в разных зонах доступности и настроить автоматическое переключение исходящего из подсетей трафика с одной сетевой ВМ на другую с помощью модуля route-switcher.

В этом практическом руководстве показан пример использования модуля route-switcher для обеспечения отказоустойчивости NAT-инстанса — сетевой ВМ с преднастроенными правилами маршрутизации и трансляции IP-адресов. NAT-инстансы используются для организации доступа в интернет виртуальных машин и других облачных ресурсов, размещенных в Yandex Cloud.

В примере на схеме NAT-инстанс NAT-A является основным для исходящего в интернет трафика, а NAT-B — резервным.

Описание элементов схемы
Название элемента Описание
NAT-A, NAT-B NAT-инстансы, обеспечивающие доступ облачных ресурсов в интернет с помощью трансляции внутренних IP-адресов ресурсов в публичные IP-адреса NAT-инстансов
VPC: demo Сеть Virtual Private Cloud
private-a Подсеть в зоне ru-central1-a для размещения ресурсов, которым требуется доступ в интернет
public-a, public-b Подсети в зонах ru-central1-a и ru-central1-b, в которых располагаются NAT-инстансы
public ip a, public ip b Публичные IP-адреса NAT-инстансов
NLB Внутренний сетевой балансировщик для работы модуля route-switcher, осуществляет проверку доступности NAT-инстансов с помощью проверок состояния на порт TCP 22

В случае отказа NAT-A модуль route-switcher переключит исходящий трафик на NAT-B, изменив в таблице маршрутизации для подсети значение Next hop на внутренний IP-адрес NAT-B. После чего доступ в интернет будет обеспечен через NAT-B.

После восстановления NAT-A модуль route-switcher перенаправит исходящий трафик через NAT-A, поменяв в таблице маршрутизации значение Next hop на внутренний IP-адрес ВМ NAT-A.

С помощью данного практического руководства вы создадите тестовую инфраструктуру, демонстрирующую работу модуля route-switcher. Решение включает следующие основные элементы:

  • nat-a — основной NAT-инстанс;
  • nat-b — резервный NAT-инстанс;
  • test-vm — ВМ внутреннего периметра инфраструктуры, для которой организуется доступ в интернет через NAT-инстанс;
  • route-switcher-lb-... — сетевой балансировщик для работы модуля route-switcher и проверки доступности NAT-инстансов;
  • route-switcher-... — облачная функция, обеспечивающая переключение исходящего трафика в случае отказа основного NAT-инстанса.

Чтобы развернуть тестовую инфраструктуру и проверить работу модуля route-switcher:

  1. Подготовьте облако к работе.
  2. Подготовьте окружение.
  3. Разверните ресурсы.
  4. Включите работу модуля route-switcher.
  5. Протестируйте работоспособность и отказоустойчивость решения.

Если созданные ресурсы вам больше не нужны, удалите их.

Подготовьте облако к работеПодготовьте облако к работе

Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:

  1. Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь.
  2. На странице Yandex Cloud Billing убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.

Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака.

Подробнее об облаках и каталогах.

Необходимые платные ресурсыНеобходимые платные ресурсы

В стоимость поддержки инфраструктуры входит:

  • плата за постоянно работающие ВМ (см. тарифы Yandex Compute Cloud);
  • плата за использование Network Load Balancer (см. тарифы Yandex Network Load Balancer);
  • плата за использование публичных IP-адресов и исходящий трафик (см. тарифы Yandex Virtual Private Cloud);
  • плата за использование функции (см. тарифы Yandex Cloud Functions);

Настройте профиль CLIНастройте профиль CLI

  1. Если у вас еще нет интерфейса командной строки Yandex Cloud, установите его и авторизуйтесь от имени пользователя.

  2. Создайте сервисный аккаунт:

    Консоль управления
    CLI
    API
    1. В консоли управления выберите каталог, в котором хотите создать сервисный аккаунт.
    2. В списке сервисов выберите Identity and Access Management.
    3. Нажмите кнопку Создать сервисный аккаунт.
    4. Введите имя сервисного аккаунта, например, sa-terraform.
    5. Нажмите кнопку Создать.

    По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.

    Выполните команду для создания сервисного аккаунта, указав имя sa-terraform:

    yc iam service-account create --name sa-terraform
    

    Где name — имя сервисного аккаунта.

    Результат:

    id: ajehr0to1g8b********
    folder_id: b1gv87ssvu49********
    created_at: "2023-06-20T09:03:11.665153755Z"
    name: sa-terraform
    

    Чтобы создать сервисный аккаунт, воспользуйтесь вызовом gRPC API ServiceAccountService/Create или методом create для ресурса ServiceAccount REST API.

  3. Назначьте сервисному аккаунту роль администратора на каталог:

    Консоль управления
    CLI
    API
    1. На стартовой странице консоли управления выберите каталог.
    2. Перейдите на вкладку Права доступа.
    3. Найдите аккаунт sa-terraform в списке и нажмите значок .
    4. Нажмите кнопку Изменить роли.
    5. В открывшемся диалоге нажмите кнопку Добавить роль и выберите роль admin.

    Выполните команду:

    yc resource-manager folder add-access-binding <идентификатор_каталога> \
       --role admin \
       --subject serviceAccount:<идентификатор_сервисного_аккаунта>
    

    Чтобы назначить сервисному аккаунту роль на каталог, воспользуйтесь методом REST API setAccessBindings для ресурса ServiceAccount или вызовом gRPC API ServiceAccountService/SetAccessBindings.

  4. Настройте профиль CLI для выполнения операций от имени сервисного аккаунта:

    CLI
    1. Создайте авторизованный ключ для сервисного аккаунта и запишите его в файл:

      yc iam key create \
      --service-account-id <идентификатор_сервисного_аккаунта> \
      --folder-id <id_каталога_с_сервисным_аккаунтом> \
      --output key.json
      

      Где:

      • service-account-id — идентификатор сервисного аккаунта.
      • folder-id — идентификатор каталога, в котором создан сервисный аккаунт.
      • output — имя файла с авторизованным ключом.

      Результат:

      id: aje8nn871qo4********
      service_account_id: ajehr0to1g8b********
      created_at: "2023-06-20T09:16:43.479156798Z"
      key_algorithm: RSA_2048
      
    2. Создайте профиль CLI для выполнения операций от имени сервисного аккаунта:

      yc config profile create sa-terraform
      

      Результат:

      Profile 'sa-terraform' created and activated
      
    3. Задайте конфигурацию профиля:

      yc config set service-account-key key.json
      

      Где:

      service-account-key — файл с авторизованным ключом сервисного аккаунта.

    4. Добавьте аутентификационные данные в переменные окружения:

      export YC_TOKEN=$(yc iam create-token)
      

Подготовьте среду для развертывания ресурсовПодготовьте среду для развертывания ресурсов

  1. Установите Terraform.

  2. Установите Git с помощью команды:

    sudo apt install git
    
  3. Клонируйте репозиторий yandex-cloud-examples/yc-route-switcher из GitHub и перейдите в папку сценария:

    git clone https://github.com/yandex-cloud-examples/yc-route-switcher.git
    cd yc-route-switcher/examples
    
  4. Откройте файл terraform.tfvars, например, с помощью редактора nano:

    nano terraform.tfvars
    
  5. Отредактируйте:

    1. Строку, содержащую идентификатор каталога:

      folder_id = "<идентификатор_каталога>"
      
    2. Строку, содержащую список разрешенных публичных IP-адресов для доступа к ВМ test-vm:

      trusted_ip_for_mgmt = ["<внешний_IP_рабочей_станции>/32"]
      

      Где:
      <внешний_IP_рабочей_станции> — публичный IP-адрес вашей рабочей станции.

      Чтобы узнать внешний IP рабочей станции, выполните:

      curl 2ip.ru
      

      Результат:

      192.240.24.87
      

Разверните ресурсыРазверните ресурсы

  1. Выполните инициализацию Terraform:

    terraform init
    
  2. Проверьте конфигурацию Terraform-файлов:

    terraform validate
    
  3. Проверьте список создаваемых облачных ресурсов:

    terraform plan
    
  4. Создайте ресурсы:

    terraform apply 
    
  5. Дождитесь окончания развертывания ресурсов и сохраните итоговую выдачу команды:

    Outputs:
    nat-a_public_ip_address = "***.***.129.139"
    nat-b_public_ip_address = "***.***.105.234"
    path_for_private_ssh_key = "./pt_key.pem"
    test_vm_password = <sensitive>
    vm_username = "admin"
    

Включите работу модуля route-switcherВключите работу модуля route-switcher

  1. Убедитесь, что NAT-инстансы перешли в рабочее состояние и доступны внутри сети:

    Консоль управления
    1. В консоли управления выберите нужный в каталог.
    2. Выберите сервис Network Load Balancer и перейдите на страницу сетевого балансировщика route-switcher-lb-....
    3. Раскройте целевую группу и убедитесь, что состояния целевых ресурсов имеет статус Healthy.
  2. Откройте файл route-switcher.tf, например, с помощью редактора nano:

    nano route-switcher.tf
    
  3. Измените значение параметра start_module модуля route-switcher на true.

  4. Запустите модуль, выполнив команду:

    terraform apply 
    

    В течение 5 минут после развертывания ресурсов модуль route-switcher начнет работу по обеспечению отказоустойчивости исходящего трафика в интернет через NAT-инстанс.

Протестируйте работоспособность и отказоустойчивость решенияПротестируйте работоспособность и отказоустойчивость решения

Тестирование работоспособности системыТестирование работоспособности системы

  1. Подключитесь к серийной консоли ВМ test-vm:

    Консоль управления
    1. В консоли управления выберите нужный в каталог.
    2. Выберите сервис Compute Cloud.
    3. В списке ВМ выберите test-vm.
    4. Перейдите на вкладку Серийная консоль.
    5. Дождитесь полной загрузки операционной системы.
  2. Введите логин admin и пароль.
    Чтобы узнать пароль, на рабочей станции в папке с terraform-сценарием выполните команду:

    terraform output test_vm_password
    
  3. Убедитесь, что доступ в интернет ВМ test-vm получает через публичный IP-адрес NAT-инстанса nat-a. Для этого в серийной консоли выполните команду:

    curl ifconfig.co
    

    Сравните IP-адрес со значением nat-a_public_ip_address из итоговой выдачи.

  4. Запустите исходящий трафик с помощью команды ping на тестовой ВМ к ресурсу в интернете:

    ping ya.ru
    

    Убедитесь, что пакеты возвращаются:

    PING ya.ru (77.88.55.242) 56(84) bytes of data.
    64 bytes from ya.ru (77.88.55.242): icmp_seq=1 ttl=56 time=4.67 ms
    64 bytes from ya.ru (77.88.55.242): icmp_seq=2 ttl=56 time=3.83 ms
    64 bytes from ya.ru (77.88.55.242): icmp_seq=3 ttl=56 time=3.80 ms
    64 bytes from ya.ru (77.88.55.242): icmp_seq=4 ttl=56 time=3.78 ms
    
  5. Убедитесь, что значение Next hop в таблице маршрутизации для сети demo соответствует внутреннему IP-адресу ВМ nat-a.

Тестирование отказоустойчивости системыТестирование отказоустойчивости системы

  1. Отключите основной NAT-инстанс, эмулируя отказ системы:

    Консоль управления
    CLI
    API
    1. В консоли управления выберите нужный в каталог.
    2. Выберите сервис Compute Cloud.
    3. Выберите ВМ nat-a в списке, нажмите значок и выберите Остановить.
    4. В открывшемся окне нажмите кнопку Остановить.
    1. Посмотрите описание команды CLI для остановки ВМ:

      yc compute instance stop --help
      
    2. Остановите ВМ:

      yc compute instance stop nat-a
      

    Воспользуйтесь методом REST API stop для ресурса Instance или вызовом gRPC API InstanceService/Stop.

  2. Наблюдайте за пропаданием пакетов, отправляемых ping.
    После отключения основного NAT-инстанса может наблюдаться пропадание трафика в среднем в течение 1 минуты, после чего трафик должен восстановиться.

  3. Убедитесь, что доступ в интернет теперь осуществляется через публичный IP-адрес NAT-инстанса nat-b. Для этого в серийной консоли остановите ping и выполните команду:

    curl ifconfig.co
    

    Сравните IP-адрес со значением nat-b_public_ip_address из итоговой выдачи.

  4. Убедитесь, что route-switcher изменил значение Next hop в таблице маршрутизации для сети demo, и теперь оно соответствует внутреннему IP-адресу ВМ nat-b.

  5. Запустите исходящий трафик с помощью команды ping на тестовой ВМ.

  6. Запустите основной NAT-инстанс, эмулируя восстановление системы:

    Консоль управления
    CLI
    API
    1. В консоли управления выберите нужный в каталог.
    2. Выберите сервис Compute Cloud.
    3. Выберите ВМ nat-a в списке, нажмите значок и выберите Остановить.
    4. В открывшемся окне нажмите кнопку Запустить.
    1. Посмотрите описание команды CLI для запуска ВМ:

      yc compute instance start --help
      
    2. Запустите ВМ:

      yc compute instance start nat-a
      

    Воспользуйтесь методом REST API start для ресурса Instance или вызовом gRPC API InstanceService/Start.

  7. Наблюдайте за выдачей утилиты ping. В процессе восстановления NAT-A может не наблюдаться потери отправляемых пакетов.

  8. Убедитесь, что доступ в интернет опять осуществляется через публичный IP-адрес NAT-инстанса nat-a. Для этого в серийной консоли остановите ping и выполните команду:

    curl ifconfig.co
    

    Сравните IP-адрес со значением nat-a_public_ip_address из итоговой выдачи.

  9. Убедитесь, что route-switcher изменил значение Next hop в таблице маршрутизации для сети demo, и оно опять соответствует внутреннему IP-адресу ВМ nat-a.

Как удалить созданные ресурсыКак удалить созданные ресурсы

Чтобы перестать платить за созданные ресурсы выполните команду:

terraform destroy

Важно

Terraform удалит все ресурсы без возможности восстановления: сети, подсети, виртуальные машины, балансировщик и т.д.

Была ли статья полезна?

Предыдущая
Архитектура и защита базового интернет-сервиса
Следующая
Настройка отказоустойчивой архитектуры в Yandex Cloud
Проект Яндекса
© 2025 ООО «Яндекс.Облако»