Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Compute Cloud
  • Yandex Container Solution
    • Все руководства
    • Настройка синхронизации часов с помощью NTP
    • Автомасштабирование группы ВМ для обработки сообщений из очереди
    • Обновление группы ВМ под нагрузкой
    • Развертывание Remote Desktop Gateway
    • Начало работы с Packer
    • Передача логов с ВМ в Yandex Cloud Logging
    • Сборка образа ВМ с набором инфраструктурных инструментов с помощью Packer
    • Миграция в Yandex Cloud с помощью Хайстекс Акура
    • Защита от сбоев с помощью Хайстекс Акура
    • Резервное копирование ВМ с помощью Хайстекс Акура
    • Развертывание отказоустойчивой архитектуры с прерываемыми ВМ
    • Настройка отказоустойчивой архитектуры в Yandex Cloud
    • Создание триггера для бюджетов, который вызывает функцию для остановки ВМ
    • Создание триггеров, которые вызывают функции для остановки ВМ и отправки уведомлений в Telegram
    • Создание веб-приложения на Python с использованием фреймворка Flask
    • Создание SAP-программы в Yandex Cloud
    • Развертывание сервера Minecraft в Yandex Cloud
    • Автоматизация сборки образов с помощью Jenkins и Packer
    • Создание тестовых виртуальных машин через GitLab CI
    • Высокопроизводительные вычисления (HPC) на прерываемых ВМ
    • Настройка SFTP-сервера на Centos 7
    • Развертывание параллельной файловой системы GlusterFS в высокодоступном режиме
    • Развертывание параллельной файловой системы GlusterFS в высокопроизводительном режиме
    • Резервное копирование в Object Storage с помощью Bacula
    • Построение пайплайна CI/CD в GitLab с использованием serverless-продуктов
    • Реализация защищенной высокодоступной сетевой инфраструктуры с выделением DMZ на основе Check Point NGFW
    • Сегментация облачной инфраструктуры с помощью решения Check Point Next-Generation Firewall
    • Настройка защищенного туннеля GRE поверх IPsec
    • Создание бастионного хоста
    • Реализация отказоустойчивых сценариев для сетевых виртуальных машин
    • Создание туннеля между двумя подсетями при помощи OpenVPN Access Server
    • Создание внешней таблицы на базе таблицы из бакета Object Storage с помощью конфигурационного файла
    • Настройка сетевой связности между подсетями BareMetal и Virtual Private Cloud
    • Работа со снапшотами в Managed Service for Kubernetes
    • Запуск языковой модели DeepSeek-R1 в кластере GPU
    • Запуск библиотеки vLLM с языковой моделью Gemma 3 на ВМ с GPU
    • Доставка USB-устройств на виртуальную машину или сервер BareMetal
  • Управление доступом
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • История изменений
  • Обучающие курсы

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

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

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

Статья создана
Yandex Cloud
Улучшена
mmerihsesh
Обновлена 4 апреля 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 удалит все ресурсы без возможности восстановления: сети, подсети, виртуальные машины, балансировщик и т.д.

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

Предыдущая
Создание бастионного хоста
Следующая
Создание туннеля между двумя подсетями при помощи OpenVPN Access Server
Проект Яндекса
© 2025 ООО «Яндекс.Облако»