Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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

License

NotificationsYou must be signed in to change notification settings

yandex-cloud-examples/yc-route-switcher

Repository files navigation

Содержание

Введение

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

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

В облачной сети Yandex Cloud не поддерживается работа протоколов VRRP/HSRP между сетевыми ВМ.

Модуль route-switcher позволяет при отказе сетевой ВМ переключить на резервную ВМ:

  • исходящий из сегмента трафика
  • входящий в сегмент трафик через балансировщик нагрузки (опционально)

Отказоустойчивость для исходящего из сегмента трафика

В примере на схеме VM-A и VM-B работают в режиме Active/Standby для исходящего трафика из сегмента.

Прохождение трафика через сетевые ВМ для исходящего направления

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

Прохождение трафика через VM-B при отказе VM-A для исходящего направления

Отказоустойчивость для входящего в сегмент трафика

В примере на схеме VM-A и VM-B работают в режиме Active/Standby для входящего в сегмент трафика. Балансировщик нагрузки в сегменте public, целевыми ресурсами которого являются VM-A и VM-B, направляет трафик только на VM-A и при ее отказе направляет трафик на резервную VM-B.

Прохождение трафика через сетевые ВМ для входящего направления

Public интерфейсу VM-A назначены две группы безопасности: одна с правилами для работы необходимых сервисов, другая с правилами для прохожденияпроверок доступности ресурсов в сетевом балансировщике.Public интерфейсу VM-B назначена одна группа безопасности с правилами для работы необходимых сервисов.

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

Прохождение трафика через VM-B при отказе VM-A для входящего направления

В Yandex Cloud возможно развернуть два вида балансировщиков нагрузки:

  • Сетевой балансировщикNetwork Load Balancer с поддержкой протоколов TCP, UDP
  • L7-балансировщикApplication Load Balancer с поддержкой протоколов HTTP/HTTPS, gRPC, TCP

Примечание

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

  2. При использовании сетевого балансировщика Network Load Balancer учитывайтеособенности сходимости маршрутизации в зоне доступности.

Возможности модуля

  • Переключение next hop адресов в таблицах маршрутизации при отказе сетевой ВМ на резервную ВМ
  • Возврат next hop адресов в таблицах маршрутизации на сетевую ВМ после ее восстановления (настраиваемая опция)
  • Переключение групп безопасности между интерфейсами двух сетевых ВМ при отказе ВМ и восстановлении ВМ (настраиваемая опция) для обеспечения отказоустойчивости входящего трафика через балансировщики нагрузки
  • Среднее время переключения next hop адресов в таблицах маршрутизации и групп безопасности на интерфейсах сетевых ВМ: 1 мин. Возможно уменьшение этого времени (см.подробности).
  • Работа с сетевыми ВМ, имеющими несколько сетевых интерфейсов в разных VPC
  • Поддержка нескольких таблиц маршрутизации в разных VPC
  • В качестве next hop в таблице маршрутизации можно указывать разные сетевые ВМ для разных префиксов
  • Поддержка нескольких сетевых ВМ (минимум 2) для переключения next hop адресов
  • Поддержка переключения групп безопасности для нескольких сетевых интерфейсов ВМ
  • Указание TCP порта для проверки доступности сетевых ВМ
  • Логирование работы модуля в Cloud Logging
  • Мониторинг работы модуля с помощью метрик в Yandex Monitoring

Компоненты модуля

Модуль route-switcher создает следующие ресурсы, необходимые для его работы:

  • Облачную функцию route-switcher
  • NLB
  • Бакет в Object Storage

Terraform модуль route-switcher

Описание элементов схемы:

Название элементаОписание
Каталог: mgmtКаталог для размещения компонент модуля route-switcher
VPC: mgmtСетевые интерфейсы ВМ, используемые для проверки их доступности, размещаются в подсетях этой сети. Обычно используется сегмент сети управления.
VM-A, VM-BСетевые ВМ, выполняющие функции межсетевого экранирования, сетевой безопасности и маршрутизации трафика, для которых требуется обеспечить отказоустойчивость
Функция route-switcherОблачная функция, которая выполняет проверку состояния сетевых ВМ и в случае недоступности сетевых ВМ переключает next hop адреса в таблицах маршрутизации на резервные ВМ. Также функция возвращает next hop адреса в таблицах маршрутизации на сетевую ВМ после ее восстановления (возврат - это настраиваемая опция).
NLBСетевой балансировщик для мониторинга доступности сетевых ВМ
Object StorageБакет в Object Storage для хранения файла конфигурации с информацией:
- таблицы маршрутизации с указанием предпочтительных next hop адресов для префиксов
- IP-адреса сетевых ВМ: для проверки доступности, адреса для каждого сетевого интерфейса ВМ (IP-адрес ВМ и соответствующий IP-адрес резервной ВМ)

Алгоритм работы функции route-switcher

Функция route-switcher вызывается по триггеру раз в минуту (значение по умолчанию), проверяет в каком состоянии находятся сетевые ВМ, и в случае недоступности сетевых ВМ переключает next hop адреса в таблицах маршрутизации. При восстановлении сетевой ВМ функция route-switcher возвращает ее next hop адреса в таблицах маршрутизации (если настроена такая опция).

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

Возможно уменьшить интервал между последовательными проверками состояния сетевых ВМ во время работы облачной функции с помощью задания параметраrouter_healthcheck_interval во входных параметрах модуля. По умолчанию это значение 60 с. Если меняется значение по умолчанию, то рекомендуется дополнительно провести тестирование сценариев отказоустойчивости. Не рекомендуется устанавливать значение интервала менее 10 с.

Алгоритм работы функции route-switcher

Входные параметры модуля

Перед вызовом модуля ему нужно передать набор входных параметров:

НазваниеОписаниеТипЗначение по умолчаниюОбязательный
start_moduleВключить или выключить работу модуля (создает или удаляет триггер, запускающий облачную функцию route-switcher раз в минуту). Используется значениеtrue для включения,false для выключения.boolfalseда
folder_idID каталога для размещения компонент модуля route-switcherstringnullда
route_table_folder_listСписок ID каталогов, в которых размещены таблицы маршрутизации из спискаroute_table_listlist(string)[]да
route_table_listСписок ID таблиц маршрутизации, для которых требуется переключение next hop адресовlist(string)[]да
router_healthcheck_portTCP порт для проверки доступности сетевых ВМ. Этот порт на сетевой ВМ становится недоступным для подключения.numbernullда
back_to_primaryВключить или отключить возврат next hop адресов в таблицах маршрутизации на сетевую ВМ после ее восстановления. Включить или отключить возврат исходных групп безопасности на интерфейсах сетевой ВМ после ее восстановления. Используется значениеtrue для включения,false для выключения.booltrueнет
routersСписок конфигураций сетевых ВМ. Смотритепараметры routers.list(object)[]да
router_healthcheck_intervalИнтервал в секундах между последовательными проверками состояния сетевых ВМ во время работы облачной функции route-switcher. Значение интервала может быть не менее 10 с. Если меняется значение по умолчанию, то рекомендуется дополнительно провести тестирование сценариев отказоустойчивости.number60нет
security_group_folder_listСписок ID каталогов, в которых размещены группы безопасности впараметре interfaceslist(string)[]да, для переключения групп безопасности

Параметрыrouters

НазваниеОписаниеТипЗначение по умолчаниюОбязательный
healthchecked_ipIP-адрес, используемый для проверки доступности сетевой ВМstringда
healthchecked_subnet_idподсеть дляhealthchecked_ipstringда
vm_idID сетевой ВМstringда, для переключения групп безопасности
primaryЯвляется ли сетевая ВМ основной или резервной. Используется значениеtrue для основной ВМ,false для резервной.primary = true может быть только у одной ВМ.boolfalseда, для переключения групп безопасности
interfacesСписок интерфейсов сетевой ВМ. Смотритепараметры interfaces.list(object)да

Параметрыinterfaces:

НазваниеОписаниеТипЗначение по умолчаниюОбязательный
own_ipIP-адрес интерфейса ВМstringда, если IP-адрес интерфейса используется в качестве next hop адреса в таблице маршрутизации
backup_peer_ipIP-адрес резервной ВМ для резервированияown_ipstringда, если IP-адрес интерфейса используется в качестве next hop адреса в таблице маршрутизации
indexНомер сетевого интерфейса ВМ, например1. Должен соответствовать значениюindex для сетевого интерфейса в выводекоманды CLIyc compute instance get.numberда, для переключения групп безопасности на интерфейсе
security_group_idsСписок ID групп безопасности, которые должны быть на интерфейсе ВМ в штатном режиме работыlist(string)да, для переключения групп безопасности на интерфейсе

Пример задания входных параметров модуля

Пример схемы с каталогами, таблицами маршрутизации и IP-адресами сетевых ВМ.

Пример схемы для входных параметров модуля

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

module "route_switcher" {source    = "./modules/route-switcher/"start_module          = falsefolder_id = "b1g0000000000000mgmt"route_table_folder_list = ["b1g00000000000000dmz"]route_table_list      = ["enp000000000000dmzrt"]router_healthcheck_port = 22back_to_primary = truerouters = [{healthchecked_ip = "192.168.1.10"healthchecked_subnet_id = "e9b000000000000mgmta"interfaces = [{own_ip = "10.160.1.10"backup_peer_ip = "10.160.2.10"}]},{healthchecked_ip = "192.168.2.10"healthchecked_subnet_id = "e9b000000000000mgmtb"interfaces = [{own_ip = "10.160.2.10"backup_peer_ip = "10.160.1.10"}]}]}

Пример задания входных параметров модуля с использованием ресурсных объектов Terraform

Если для развертывания сетевых ВМ, таблиц маршрутизации, подсетей и каталогов используется Terraform, то во входных параметрах модуля указываются ресурсные объекты Terraform.

module "route_switcher" {source    = "./modules/route-switcher/"start_module          = falsefolder_id = var.folder_idroute_table_folder_list = [yandex_resourcemanager_folder.dmz.id]route_table_list      = [yandex_vpc_route_table.dmz-rt.id]router_healthcheck_port = 22back_to_primary = truerouters = [{healthchecked_ip = yandex_compute_instance.router-a.network_interface.1.ip_addresshealthchecked_subnet_id = yandex_vpc_subnet.mgmt_subnet_a.idinterfaces = [{own_ip = yandex_compute_instance.router-a.network_interface.0.ip_addressbackup_peer_ip = yandex_compute_instance.router-b.network_interface.0.ip_address}]},{healthchecked_ip = yandex_compute_instance.router-b.network_interface.1.ip_addresshealthchecked_subnet_id = yandex_vpc_subnet.mgmt_subnet_b.idinterfaces = [{own_ip = yandex_compute_instance.router-b.network_interface.0.ip_addressbackup_peer_ip = yandex_compute_instance.router-a.network_interface.0.ip_address}]}]}

Пример задания входных параметров модуля для сценария переключения групп безопасности

Пример схемы с каталогами, таблицами маршрутизации, группами безопасности и IP-адресами сетевых ВМ.

Пример схемы для входных параметров модуля для сценария переключения групп безопасности

Пример задания входных параметров модуля для сценария переключения групп безопасности на public сетевых интерфейсах ВМ и переключения next hop адресов в таблице маршрутизации dmz-rt.

module "route_switcher" {source    = "./modules/route-switcher/"start_module          = falsefolder_id = "b1g00000000000000dmz"route_table_folder_list = ["b1g00000000000000dmz"]route_table_list      = ["enp000000000000dmzrt"]security_group_folder_list = ["b1g00000000000000pub"]router_healthcheck_port = 22back_to_primary = truerouters = [{healthchecked_ip = "192.168.1.10"healthchecked_subnet_id = "e9b000000000000mgmta"primary = truevm_id = "fv400000000000000vma"interfaces = [{own_ip = "192.168.1.10"backup_peer_ip = "192.168.2.10"},{index = 1security_group_ids = ["enp000000000000sgpub", "enp000000000000sgnlb"]}]},{healthchecked_ip = "192.168.2.10"healthchecked_subnet_id = "e9b000000000000mgmtb"vm_id = "epd00000000000000vmb"interfaces = [{own_ip = "192.168.2.10"backup_peer_ip = "192.168.1.10"},{index = 1security_group_ids = ["enp000000000000sgpub"]}]}]}

Выходные параметры модуля

НазваниеОписание
route-switcher_nlbИмя сетевого балансировщика в каталогеfolder_id для мониторинга доступности сетевых ВМ
route-switcher_bucketИмя бакета в Object Storage в каталогеfolder_id для хранения файла конфигурации с информацией:
- таблицы маршрутизации с указанием предпочтительных next hop адресов для префиксов
- IP-адреса сетевых ВМ: для проверки доступности, адреса для каждого сетевого интерфейса ВМ (IP-адрес ВМ и соответствующий IP-адрес резервной ВМ)
route-switcher_functionИмя облачной функции в каталогеfolder_id, обеспечивающей работу модуля route-switcher по отказоустойчивости исходящего трафика из сегментов

Подготовка к развертыванию

  1. Перед развертыванием в Yandex Cloud должны существовать следующие объекты:

    • Каталогfolder_id для размещения компонент модуля route-switcher
    • Таблицы маршрутизации, для которых требуется переключение next hop адресов
    • Каталоги, в которых размещены таблицы маршрутизации из спискаroute_table_list
    • Сетевые ВМ должны быть предварительно настроены, запущены и должны функционировать
  2. Проверки состояния сетевых ВМ осуществляются с IP-адресов из диапазонов198.18.235.0/24 и198.18.248.0/24. Настройки правил фильтрации трафика у сетевых ВМ должны разрешать прием трафика с адресов этого диапазона, иначе проверки сетевым балансировщиком не будут выполняться и целевые ресурсы не перейдут в статусHealthy. В результате модуль route-switcher не сможет работать. Вы можете привязать к целевым ресурсам группу безопасности со следующим правилом для входящего трафика:

    • Диапазон портов: портrouter_healthcheck_port, заданный во входных параметрах модуля route-switcher
    • Протокол:TCP
    • Источник:Проверки состояния балансировщика

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

  3. Модуль записываетлоги работы функции в Cloud Logging группу по умолчанию в каталогеfolder_id. Время хранения логов по умолчанию 3 дня. Можноизменить срок хранения записей в группе Cloud Logging.

Порядок развертывания

Важная информация

Развертывать решение необходимо со значениемfalse (значение по умолчанию) для входного параметраstart_module модуля route-switcher.

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

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

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

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

    terraform apply
  5. После развертывания ресурсов убедитесь, что проверка состояния сетевых ВМ выдает значениеHealthy. Для этого в консоли Yandex Cloud в каталогеfolder_id выберите сервисNetwork Load Balancer и перейдите на страницу сетевого балансировщикаroute-switcher-lb-.... Раскройте целевую группу и убедитесь, что состояния целевых ресурсовHealthy. Если состояние ихUnhealthy, то необходимо проверить, что сетевые ВМ запущены и функционируют, и проверить правила фильтрации трафика у сетевых ВМ (пункт 2.подготовки к развертыванию).

  6. После того, как вы убедились, что проверка состояния сетевых ВМ выдает значениеHealthy, измените значение входного параметраstart_module модуля route-switcher наtrue для включения работы модуля и выполните команды:

    terraform planterraform apply
  7. После выполненияterraform apply с параметромstart_module = true в каталогеfolder_id создается триггерroute-switcher-trigger-..., запускающий облачную функцию route-switcher раз в минуту. Триггер начинает работать в течение 5 минут после создания.

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

Проверка отказоустойчивости

Важная информация

Для проверки отказоустойчивости необходимо будет остановить сетевую ВМ, что приведет к временной недоступности сети в процессе переключения. В продуктивной среде необходимо согласовать технологическое окно для проведения проверки.

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

  2. Запустите в этой ВМ исходящий трафик из сегмента с помощьюping к ресурсу в интернете или в другом сегменте.

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

  4. Наблюдайте за пропаданием пакетов ping. После отказа сетевой ВМ может наблюдаться пропадание трафика, после чего трафик должен восстановиться.

  5. Проверьте, что в таблице маршрутизации в каталоге сегмента используется адрес резервной ВМ для next hop.

  6. В консоли Yandex Cloud запустите выключенную сетевую ВМ, эмулируя восстановление.

  7. Если в настройках модуля route-switcher был указан параметрback_to_primary = true, то после восстановления сетевой ВМ на нее произойдет переключение исходящего трафика. Может наблюдаться пропадание трафика, после чего трафик должен восстановиться. Проверьте, что в таблице маршрутизации в каталоге сегмента используется для next hop адрес сетевой ВМ из шага 3.

  8. В консоли Yandex Cloud для Linux ВМ, с которой выполнялсяping, отключите "Разрешить доступ к серийной консоли".

Остановка работы модуля

Если вы хотите временно остановить работу модуля route-switcher, то измените значение входного параметраstart_module модуля route-switcher наfalse для выключения работы модуля и выполните команды:

terraform planterraform apply

После выполнения этих команд удалится триггерroute-switcher-trigger-..., запускающий облачную функцию route-switcher раз в минуту, и работа модуля будет остановлена.

Если вам потребуется включить работу модуля обратно, то выполните пункты 5 и 6 из разделаПорядок развертывания.

Изменение входных параметров модуля

В процессе работы модуля можно изменить входные параметры модуля. Например, во входных параметрах вы можете добавить или удалить IP-адреса сетевых ВМ или таблицы маршрутизации.

Важная информация

Изменение входных параметров модуля необходимо выполнять при работающих сетевых ВМ. Убедитесь, что проверка состояния сетевых ВМ выдает значениеHealthy (смотрите пункт 5 из разделаПорядок развертывания).При добавлении таблиц маршрутизации модуль route-switcher сохранит текущие next hop адреса таблиц маршрутизации как предпочтительные в файле конфигурации в бакете Object Storage.

Для изменения входных параметров модуля выполните следующие действия:

  1. Задайте входные параметры модуля.

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

    terraform planterraform apply

Изменение маршрутов в таблицах маршрутизации

В процессе работы модуля можно изменить next hop адреса сетевых ВМ в таблицах маршрутизации, указанных во входных параметрах модуля. Для этого необходимо выполнить следующие действия:

  1. Остановить работу модуля

  2. Изменить next hop адреса в таблицах маршрутизации

  3. Включить работу модуля, выполнив пункты 5 и 6 из разделаПорядок развертывания.

Мониторинг работы модуля

Модуль поставляет метрики вYandex Monitoring:

Имя метрикиОписаниеВозможные значенияМетки
route_switcher.switchoverНеобходимость переключения next hop в таблицах маршрутизации0 - переключение не требуется
1 - необходимо переключение
route_switcher_name - имя функции route-switcher
folder_name - имя каталога с функцией route-switcher
route_switcher.router_stateСостояние доступности сетевой ВМ0 - недоступна
1 - доступна
router_ip - IP-адрес сетевой ВМ
folder_name - имя каталога с функцией route-switcher
route_switcher.table_changedИзменение next hop в таблице маршрутизации0 - отсутствуют изменения
1 - выполнены изменения
2 - возникла ошибка при выполнении изменений
route_switcher_name - имя функции route-switcher
route_table_name - имя таблицы маршрутизации
folder_name - имя каталога с функцией route-switcher
route_switcher.security_groups_changedИзменение групп безопасности у интерфейса сетевой ВМ0 - отсутствуют изменения
1 - выполнен запрос на изменение
2 - возникла ошибка при выполнении изменений
route_switcher_name - имя функции route-switcher
router_ip - IP-адрес сетевой ВМ
interface_index - номер интерфейса сетевой ВМ
folder_name - имя каталога с функцией route-switcher
  • Метрики имеют значениеservice=custom (Custom Metrics, пользовательские метрики)
  • Для визуализации этих метрик можносоздать дашборд
  • Примерстроки запроса для графика состояния доступности сетевых ВМ:"route_switcher.router_state"{folderId="<id каталога с функцией route-switcher>", service="custom", router_ip="*"}
  • С помощьюалертинга можно настроить уведомления об изменении метрик

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

Вы можете познакомиться с примерами использования модуля route-switcher:

  1. Решение по обеспечению отказоустойчивости NAT-инстанс

  2. Решение по развертыванию защищенной высокодоступной сетевой инфраструктуры с выделением DMZ на основе Check Point NGFW

  3. Решение по развертыванию защищенной высокодоступной сетевой инфраструктуры с выделением DMZ на основе UserGate NGFW

  4. Решение по развертыванию защищенной высокодоступной сетевой инфраструктуры с выделением DMZ на основе Смарт-Софт NGFW

About

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

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors3

  •  
  •  
  •  

[8]ページ先頭

©2009-2025 Movatter.jp