{"id":18794098,"url":"https://github.com/yandex-cloud-examples/yc-route-switcher","last_synced_at":"2026-03-11T20:03:01.708Z","repository":{"id":250112262,"uuid":"769047636","full_name":"yandex-cloud-examples/yc-route-switcher","owner":"yandex-cloud-examples","description":"Обеспечение отказоустойчивости для сетевых виртуальных машин, выполняющих функции межсетевого экранирования, сетевой безопасности и маршрутизации трафика.","archived":false,"fork":false,"pushed_at":"2025-02-16T09:25:04.000Z","size":1188,"stargazers_count":6,"open_issues_count":1,"forks_count":3,"subscribers_count":10,"default_branch":"main","last_synced_at":"2025-04-13T15:12:22.946Z","etag":null,"topics":["nat","network-appliance","ngfw","terraform","yandex-cloud","yandexcloud"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yandex-cloud-examples.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-03-08T08:32:10.000Z","updated_at":"2025-02-12T07:08:45.000Z","dependencies_parsed_at":"2025-02-16T10:22:05.194Z","dependency_job_id":"7102da3b-50ba-49b3-8eac-b2bd413f7eba","html_url":"https://github.com/yandex-cloud-examples/yc-route-switcher","commit_stats":null,"previous_names":["yandex-cloud-examples/yc-route-switcher"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/yandex-cloud-examples/yc-route-switcher","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yandex-cloud-examples%2Fyc-route-switcher","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yandex-cloud-examples%2Fyc-route-switcher/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yandex-cloud-examples%2Fyc-route-switcher/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yandex-cloud-examples%2Fyc-route-switcher/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yandex-cloud-examples","download_url":"https://codeload.github.com/yandex-cloud-examples/yc-route-switcher/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yandex-cloud-examples%2Fyc-route-switcher/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30398185,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-11T18:46:22.935Z","status":"ssl_error","status_checked_at":"2026-03-11T18:46:17.045Z","response_time":84,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["nat","network-appliance","ngfw","terraform","yandex-cloud","yandexcloud"],"created_at":"2024-11-07T21:28:07.405Z","updated_at":"2026-03-11T20:03:01.698Z","avatar_url":"https://github.com/yandex-cloud-examples.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Модуль route-switcher для обеспечения отказоустойчивости виртуальных машин, выполняющих функции межсетевого экранирования, сетевой безопасности и маршрутизации трафика \r\n\r\n## Содержание\r\n\r\n- [Введение](#введение)\r\n- [Возможности модуля](#возможности-модуля)\r\n- [Компоненты модуля](#компоненты-модуля)\r\n- [Входные параметры модуля](#входные-параметры-модуля)\r\n- [Пример задания входных параметров модуля](#пример-задания-входных-параметров-модуля)\r\n- [Выходные параметры модуля](#выходные-параметры-модуля)\r\n- [Подготовка к развертыванию](#подготовка-к-развертыванию)\r\n- [Порядок развертывания](#порядок-развертывания)\r\n- [Проверка отказоустойчивости](#проверка-отказоустойчивости)\r\n- [Остановка работы модуля](#остановка-работы-модуля)\r\n- [Изменение входных параметров модуля](#изменение-входных-параметров-модуля)\r\n- [Изменение маршрутов в таблицах маршрутизации](#изменение-маршрутов-в-таблицах-маршрутизации)\r\n- [Мониторинг работы модуля](#мониторинг-работы-модуля)\r\n- [Примеры использования модуля](#примеры-использования-модуля)\r\n\r\n\r\n## Введение\r\n\r\nВ Yandex Cloud можно развернуть облачную инфраструктуру для защиты и сегментации инфраструктуры на зоны безопасности с использованием виртуальных машин (далее сетевых ВМ), выполняющих функции межсетевого экранирования, сетевой безопасности и маршрутизации трафика.\r\nКаждый сегмент сети (далее сегмент) содержит ресурсы одного назначения, обособленные от других ресурсов. В облаке каждому сегменту может соответствовать свой каталог и своя облачная сеть VPC. В таком сценарии связь между сегментами обычно происходит через сетевые ВМ с несколькими сетевыми интерфейсами, размещенными в каждом VPC.\r\n\r\nДля обеспечения высокой доступности развернутых приложений в такой инфраструктуре используется несколько сетевых ВМ, размещенных в разных зонах доступности.\r\nС помощью [статической маршрутизации](https://cloud.yandex.ru/docs/vpc/concepts/static-routes) можно направлять трафик из подсетей через сетевые ВМ.\r\n\r\nВ облачной сети Yandex Cloud не поддерживается работа протоколов VRRP/HSRP между сетевыми ВМ.\r\n\r\nМодуль route-switcher позволяет при отказе сетевой ВМ переключить на резервную ВМ:\r\n- исходящий из сегмента трафика\r\n- входящий в сегмент трафик через балансировщик нагрузки (опционально)\r\n\r\n\r\n### Отказоустойчивость для исходящего из сегмента трафика\r\n\r\nВ примере на схеме VM-A и VM-B работают в режиме Active/Standby для исходящего трафика из сегмента.\r\n\r\n\u003cimg src=\"./images/traffic_flows.png\" alt=\"Прохождение трафика через сетевые ВМ для исходящего направления\" width=\"500\"/\u003e\r\n\r\nВ случае отказа VM-A модуль route-switcher переключит исходящий трафик на VM-B и сетевая связанность с интернетом и между сегментами будет выполняться через VM-B.\r\n\r\n\u003cimg src=\"./images/traffic_flows_failure.png\" alt=\"Прохождение трафика через VM-B при отказе VM-A для исходящего направления\" width=\"500\"/\u003e\r\n\r\n\r\n### Отказоустойчивость для входящего в сегмент трафика\r\n\r\nВ примере на схеме VM-A и VM-B работают в режиме Active/Standby для входящего в сегмент трафика. Балансировщик нагрузки в сегменте public, целевыми ресурсами которого являются VM-A и VM-B, направляет трафик только на VM-A и при ее отказе направляет трафик на резервную VM-B. \r\n\r\n\u003cimg src=\"./images/traffic_flows_with_sg.png\" alt=\"Прохождение трафика через сетевые ВМ для входящего направления\" width=\"500\"/\u003e\r\n\r\nPublic интерфейсу VM-A назначены две группы безопасности: одна с правилами для работы необходимых сервисов, другая с правилами для прохождения [проверок доступности ресурсов](https://yandex.cloud/ru/docs/network-load-balancer/concepts/health-check) в сетевом балансировщике.\r\nPublic интерфейсу VM-B назначена одна группа безопасности с правилами для работы необходимых сервисов.\r\n\r\nВ случае отказа VM-A модуль route-switcher переключает группы безопасности между интерфейсами сетевых ВМ, обеспечивая успешное прохождение проверок состояний для VM-B и переключение входящего трафика на VM-B через балансировщик нагрузки. \r\n\r\n\u003cimg src=\"./images/traffic_flows_failure_with_sg.png\" alt=\"Прохождение трафика через VM-B при отказе VM-A для входящего направления\" width=\"500\"/\u003e \r\n\r\nВ Yandex Cloud возможно развернуть два вида балансировщиков нагрузки:\r\n- Сетевой балансировщик [Network Load Balancer](https://yandex.cloud/ru/docs/network-load-balancer/concepts/) с поддержкой протоколов TCP, UDP\r\n- L7-балансировщик [Application Load Balancer](https://yandex.cloud/ru/docs/application-load-balancer/concepts/) с поддержкой протоколов HTTP/HTTPS, gRPC, TCP\r\n\r\n\r\n\u003e **Примечание**\r\n\u003e \r\n\u003e 1. Если в сценарии использования сетевых ВМ не требуется обеспечить отказоустойчивость для входящего в сегмент трафика, переключение групп безопасности для сетевых ВМ не настраивается в параметрах модуля route-switcher.\r\n\u003e \r\n\u003e 2. При использовании сетевого балансировщика Network Load Balancer учитывайте [особенности сходимости маршрутизации в зоне доступности](https://yandex.cloud/ru/docs/network-load-balancer/concepts/specifics#nlb-zone-converge). \r\n\r\n\r\n## Возможности модуля\r\n- Переключение next hop адресов в таблицах маршрутизации при отказе сетевой ВМ на резервную ВМ  \r\n- Возврат next hop адресов в таблицах маршрутизации на сетевую ВМ после ее восстановления (настраиваемая опция)\r\n- Переключение групп безопасности между интерфейсами двух сетевых ВМ при отказе ВМ и восстановлении ВМ (настраиваемая опция) для обеспечения отказоустойчивости входящего трафика через балансировщики нагрузки\r\n- Среднее время переключения next hop адресов в таблицах маршрутизации и групп безопасности на интерфейсах сетевых ВМ: 1 мин. Возможно уменьшение этого времени (см. [подробности](#алгоритм-работы-функции-route-switcher)).\r\n- Работа с сетевыми ВМ, имеющими несколько сетевых интерфейсов в разных VPC\r\n- Поддержка нескольких таблиц маршрутизации в разных VPC\r\n- В качестве next hop в таблице маршрутизации можно указывать разные сетевые ВМ для разных префиксов\r\n- Поддержка нескольких сетевых ВМ (минимум 2) для переключения next hop адресов\r\n- Поддержка переключения групп безопасности для нескольких сетевых интерфейсов ВМ\r\n- Указание TCP порта для проверки доступности сетевых ВМ\r\n- Логирование работы модуля в Cloud Logging\r\n- Мониторинг работы модуля с помощью метрик в Yandex Monitoring\r\n\r\n\r\n## Компоненты модуля\r\n\r\nМодуль route-switcher создает следующие ресурсы, необходимые для его работы:\r\n- Облачную функцию route-switcher\r\n- NLB \r\n- Бакет в Object Storage \r\n\r\n\u003cimg src=\"./images/route-switcher.png\" alt=\"Terraform модуль route-switcher\" width=\"600\"/\u003e\r\n\r\nОписание элементов схемы:\r\n\r\n| Название элемента | Описание |\r\n| ----------- | ----------- |\r\n| Каталог: mgmt | Каталог для размещения компонент модуля route-switcher |\r\n| VPC: mgmt | Сетевые интерфейсы ВМ, используемые для проверки их доступности, размещаются в подсетях этой сети. Обычно используется сегмент сети управления. |\r\n| VM-A, VM-B | Сетевые ВМ, выполняющие функции межсетевого экранирования, сетевой безопасности и маршрутизации трафика, для которых требуется обеспечить отказоустойчивость |\r\n| Функция route-switcher | Облачная функция, которая выполняет проверку состояния сетевых ВМ и в случае недоступности сетевых ВМ переключает next hop адреса в таблицах маршрутизации на резервные ВМ. Также функция возвращает next hop адреса в таблицах маршрутизации на сетевую ВМ после ее восстановления (возврат - это настраиваемая опция). | \r\n| NLB | Сетевой балансировщик для мониторинга доступности сетевых ВМ |\r\n| Object Storage | Бакет в Object Storage для хранения файла конфигурации с информацией:\u003cbr\u003e- таблицы маршрутизации с указанием предпочтительных next hop адресов для префиксов\u003cbr\u003e- IP-адреса сетевых ВМ: для проверки доступности, адреса для каждого сетевого интерфейса ВМ (IP-адрес ВМ и соответствующий IP-адрес резервной ВМ) |\r\n\r\n\r\n### Алгоритм работы функции route-switcher\r\n\r\nФункция route-switcher вызывается по триггеру раз в минуту (значение по умолчанию), проверяет в каком состоянии находятся сетевые ВМ, и в случае недоступности сетевых ВМ переключает next hop адреса в таблицах маршрутизации. При восстановлении сетевой ВМ функция route-switcher возвращает ее next hop адреса в таблицах маршрутизации (если настроена такая опция).\r\n\r\nЕсли заданы параметры для переключения групп безопасности на интерфейсах сетевых ВМ, то в случае недоступности сетевой ВМ происходит переключение групп безопасности между интефрейсами сетевых ВМ. При восстановлении сетевой ВМ функция route-switcher возвращает исходные группы безопасности на интерфейсах сетевых ВМ (если настроена такая опция).\r\n\r\nВозможно уменьшить интервал между последовательными проверками состояния сетевых ВМ во время работы облачной функции с помощью задания параметра `router_healthcheck_interval` во входных параметрах модуля. По умолчанию это значение 60 с. Если меняется значение по умолчанию, то рекомендуется дополнительно провести тестирование сценариев отказоустойчивости. Не рекомендуется устанавливать значение интервала менее 10 с.\r\n\r\n![Алгоритм работы функции route-switcher](./images/route-switcher-alg.png)\r\n\r\n\r\n\r\n## Входные параметры модуля\r\n\r\nПеред вызовом модуля ему нужно передать набор входных параметров:\r\n\r\n| Название | Описание | Тип | Значение по умолчанию | Обязательный |\r\n| ----------- | ----------- | ----------- | ----------- | ----------- |\r\n| `start_module` | Включить или выключить работу модуля (создает или удаляет триггер, запускающий облачную функцию route-switcher раз в минуту). Используется значение `true` для включения, `false` для выключения. | `bool` | `false` | да |\r\n| `folder_id` | ID каталога для размещения компонент модуля route-switcher | `string` | `null` | да |\r\n| `route_table_folder_list` | Список ID каталогов, в которых размещены таблицы маршрутизации из списка `route_table_list` | `list(string)` | `[]` | да |\r\n| `route_table_list` | Список ID таблиц маршрутизации, для которых требуется переключение next hop адресов | `list(string)` | `[]` | да |\r\n| `router_healthcheck_port` | TCP порт для проверки доступности сетевых ВМ. Этот порт на сетевой ВМ становится недоступным для подключения. |  `number` | `null` | да |\r\n| `back_to_primary` | Включить или отключить возврат next hop адресов в таблицах маршрутизации на сетевую ВМ после ее восстановления. Включить или отключить возврат исходных групп безопасности на интерфейсах сетевой ВМ после ее восстановления. Используется значение `true` для включения, `false` для выключения. | `bool` | `true` | нет |\r\n| `routers` | Список конфигураций сетевых ВМ. Смотрите [параметры routers](#параметр-routers). | `list(object)` | `[]` | да |\r\n| `router_healthcheck_interval` | Интервал в секундах между последовательными проверками состояния сетевых ВМ во время работы облачной функции route-switcher. Значение интервала может быть не менее 10 с. Если меняется значение по умолчанию, то рекомендуется дополнительно провести тестирование сценариев отказоустойчивости.  | `number` | `60` | нет |\r\n| `security_group_folder_list` | Список ID каталогов, в которых размещены группы безопасности в [параметре interfaces](#параметр-interfaces) | `list(string)` | `[]` | да, для переключения групп безопасности |\r\n\r\n### Параметры `routers`\r\n\r\n| Название | Описание | Тип | Значение по умолчанию | Обязательный |\r\n| ----------- | ----------- | ----------- | ----------- | ----------- |\r\n| `healthchecked_ip` | IP-адрес, используемый для проверки доступности сетевой ВМ | `string` | | да |\r\n| `healthchecked_subnet_id` | подсеть для `healthchecked_ip` | `string` |  | да |\r\n| `vm_id` | ID сетевой ВМ | `string` | | да, для переключения групп безопасности |\r\n| `primary` | Является ли сетевая ВМ основной или резервной. Используется значение `true` для основной ВМ, `false` для резервной. `primary = true` может быть только у одной ВМ. | `bool` | `false` | да, для переключения групп безопасности |\r\n| `interfaces` | Список интерфейсов сетевой ВМ. Смотрите [параметры interfaces](#параметр-interfaces). | `list(object)` | | да |\r\n\r\n### Параметры `interfaces`:\r\n\r\n| Название | Описание | Тип | Значение по умолчанию | Обязательный |\r\n| ----------- | ----------- | ----------- | ----------- | ----------- |\r\n| `own_ip` | IP-адрес интерфейса ВМ | `string` | | да, если IP-адрес интерфейса используется в качестве next hop адреса в таблице маршрутизации |\r\n| `backup_peer_ip` | IP-адрес резервной ВМ для резервирования `own_ip` | `string` | | да, если IP-адрес интерфейса используется в качестве next hop адреса в таблице маршрутизации |\r\n| `index` | Номер сетевого интерфейса ВМ, например `1`. Должен соответствовать значению `index` для сетевого интерфейса в выводе [команды](https://yandex.cloud/ru/docs/compute/cli-ref/instance/get) CLI `yc compute instance get`. | `number` | | да, для переключения групп безопасности на интерфейсе |\r\n| `security_group_ids` | Список ID групп безопасности, которые должны быть на интерфейсе ВМ в штатном режиме работы | `list(string)` | | да, для переключения групп безопасности на интерфейсе |\r\n\r\n\r\n## Пример задания входных параметров модуля\r\n\r\nПример схемы с каталогами, таблицами маршрутизации и IP-адресами сетевых ВМ.\r\n\r\n\u003cimg src=\"./images/example.png\" alt=\"Пример схемы для входных параметров модуля\" width=\"600\"/\u003e\r\n\r\n\r\n### Пример задания входных параметров модуля с использованием строковых значений\r\n\r\n```yaml\r\nmodule \"route_switcher\" {\r\n  source    = \"./modules/route-switcher/\"\r\n  start_module          = false\r\n  folder_id = \"b1g0000000000000mgmt\" \r\n  route_table_folder_list = [\"b1g00000000000000dmz\"]\r\n  route_table_list      = [\"enp000000000000dmzrt\"] \r\n  router_healthcheck_port = 22\r\n  back_to_primary = true\r\n  routers = [\r\n    {\r\n      healthchecked_ip = \"192.168.1.10\"\r\n      healthchecked_subnet_id = \"e9b000000000000mgmta\"\r\n      interfaces = [\r\n        {\r\n          own_ip = \"10.160.1.10\"\r\n          backup_peer_ip = \"10.160.2.10\"\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      healthchecked_ip = \"192.168.2.10\"\r\n      healthchecked_subnet_id = \"e9b000000000000mgmtb\"\r\n      interfaces = [\r\n        {\r\n          own_ip = \"10.160.2.10\"\r\n          backup_peer_ip = \"10.160.1.10\"\r\n        }\r\n      ]\r\n    }\r\n  ]\r\n}\r\n```\r\n\r\n### Пример задания входных параметров модуля с использованием ресурсных объектов Terraform\r\n\r\nЕсли для развертывания сетевых ВМ, таблиц маршрутизации, подсетей и каталогов используется Terraform, то во входных параметрах модуля указываются ресурсные объекты Terraform.\r\n\r\n```yaml\r\nmodule \"route_switcher\" {\r\n  source    = \"./modules/route-switcher/\"\r\n  start_module          = false\r\n  folder_id = var.folder_id\r\n  route_table_folder_list = [yandex_resourcemanager_folder.dmz.id]\r\n  route_table_list      = [yandex_vpc_route_table.dmz-rt.id]\r\n  router_healthcheck_port = 22\r\n  back_to_primary = true\r\n  routers = [\r\n    {\r\n      healthchecked_ip = yandex_compute_instance.router-a.network_interface.1.ip_address\r\n      healthchecked_subnet_id = yandex_vpc_subnet.mgmt_subnet_a.id\r\n      interfaces = [\r\n        {\r\n          own_ip = yandex_compute_instance.router-a.network_interface.0.ip_address\r\n          backup_peer_ip = yandex_compute_instance.router-b.network_interface.0.ip_address\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      healthchecked_ip = yandex_compute_instance.router-b.network_interface.1.ip_address\r\n      healthchecked_subnet_id = yandex_vpc_subnet.mgmt_subnet_b.id\r\n      interfaces = [\r\n        {\r\n          own_ip = yandex_compute_instance.router-b.network_interface.0.ip_address\r\n          backup_peer_ip = yandex_compute_instance.router-a.network_interface.0.ip_address\r\n        }\r\n      ]\r\n    }\r\n  ]\r\n}\r\n```\r\n\r\n### Пример задания входных параметров модуля для сценария переключения групп безопасности\r\n\r\nПример схемы с каталогами, таблицами маршрутизации, группами безопасности и IP-адресами сетевых ВМ.\r\n\r\n\u003cimg src=\"./images/example-with-sg.png\" alt=\"Пример схемы для входных параметров модуля для сценария переключения групп безопасности\" width=\"700\"/\u003e\r\n\r\nПример задания входных параметров модуля для сценария переключения групп безопасности на public сетевых интерфейсах ВМ и переключения next hop адресов в таблице маршрутизации dmz-rt.\r\n\r\n```yaml\r\nmodule \"route_switcher\" {\r\n  source    = \"./modules/route-switcher/\"\r\n  start_module          = false\r\n  folder_id = \"b1g00000000000000dmz\" \r\n  route_table_folder_list = [\"b1g00000000000000dmz\"]\r\n  route_table_list      = [\"enp000000000000dmzrt\"]\r\n  security_group_folder_list = [\"b1g00000000000000pub\"] \r\n  router_healthcheck_port = 22\r\n  back_to_primary = true\r\n  routers = [\r\n    {\r\n      healthchecked_ip = \"192.168.1.10\"\r\n      healthchecked_subnet_id = \"e9b000000000000mgmta\"\r\n      primary = true\r\n      vm_id = \"fv400000000000000vma\"\r\n      interfaces = [\r\n        {\r\n          own_ip = \"192.168.1.10\"\r\n          backup_peer_ip = \"192.168.2.10\"\r\n        },\r\n        {\r\n          index = 1\r\n          security_group_ids = [\"enp000000000000sgpub\", \"enp000000000000sgnlb\"]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      healthchecked_ip = \"192.168.2.10\"\r\n      healthchecked_subnet_id = \"e9b000000000000mgmtb\"\r\n      vm_id = \"epd00000000000000vmb\"\r\n      interfaces = [\r\n        {\r\n          own_ip = \"192.168.2.10\"\r\n          backup_peer_ip = \"192.168.1.10\"\r\n        },\r\n        {\r\n          index = 1\r\n          security_group_ids = [\"enp000000000000sgpub\"]\r\n        }\r\n      ]\r\n    }\r\n  ]\r\n}\r\n```\r\n\r\n## Выходные параметры модуля\r\n\r\n| Название | Описание |\r\n| ----------- | ----------- |\r\n| `route-switcher_nlb` | Имя сетевого балансировщика в каталоге `folder_id` для мониторинга доступности сетевых ВМ |\r\n| `route-switcher_bucket` | Имя бакета в Object Storage в каталоге `folder_id` для хранения файла конфигурации с информацией:\u003cbr\u003e- таблицы маршрутизации с указанием предпочтительных next hop адресов для префиксов\u003cbr\u003e- IP-адреса сетевых ВМ: для проверки доступности, адреса для каждого сетевого интерфейса ВМ (IP-адрес ВМ и соответствующий IP-адрес резервной ВМ) |\r\n| `route-switcher_function` | Имя облачной функции в каталоге `folder_id`, обеспечивающей работу модуля route-switcher по отказоустойчивости исходящего трафика из сегментов |\r\n\r\n\r\n## Подготовка к развертыванию\r\n\r\n1. Перед развертыванием в Yandex Cloud должны существовать следующие объекты:\r\n    - Каталог `folder_id` для размещения компонент модуля route-switcher\r\n    - Таблицы маршрутизации, для которых требуется переключение next hop адресов\r\n    - Каталоги, в которых размещены таблицы маршрутизации из списка `route_table_list`\r\n    - Сетевые ВМ должны быть предварительно настроены, запущены и должны функционировать \r\n\r\n2. [Проверки состояния](https://cloud.yandex.ru/docs/network-load-balancer/concepts/health-check) сетевых ВМ осуществляются с IP-адресов из диапазонов `198.18.235.0/24` и `198.18.248.0/24`. Настройки правил фильтрации трафика у сетевых ВМ должны разрешать прием трафика с адресов этого диапазона, иначе проверки сетевым балансировщиком не будут выполняться и целевые ресурсы не перейдут в статус `Healthy`. В результате модуль route-switcher не сможет работать. Вы можете привязать к целевым ресурсам группу безопасности со следующим правилом для входящего трафика:\r\n    - Диапазон портов: порт `router_healthcheck_port`, заданный во входных параметрах модуля route-switcher\r\n    - Протокол: `TCP`\r\n    - Источник: `Проверки состояния балансировщика`\r\n\r\n    Такой же диапазон адресов и TCP порт должны быть настроены в разрешающем правиле для входящего трафика политики доступа в самих сетевых ВМ (например, в политике доступа межсетевых экранов).\r\n\r\n3. Модуль записывает [логи работы функции](https://cloud.yandex.ru/docs/functions/operations/function/function-logs) в Cloud Logging группу по умолчанию в каталоге `folder_id`. Время хранения логов по умолчанию 3 дня. Можно [изменить срок хранения](https://cloud.yandex.ru/docs/logging/operations/retention-period) записей в группе Cloud Logging.\r\n\r\n\r\n## Порядок развертывания\r\n\r\n\u003e **Важная информация**\r\n\u003e \r\n\u003e Развертывать решение необходимо со значением `false` (значение по умолчанию) для входного параметра `start_module` модуля route-switcher.\r\n\r\n1. Выполните инициализацию Terraform:\r\n    ```bash\r\n    terraform init\r\n    ```\r\n\r\n2. Проверьте конфигурацию Terraform файлов:\r\n    ```bash\r\n    terraform validate\r\n    ```\r\n\r\n3. Проверьте список создаваемых облачных ресурсов:\r\n    ```bash\r\n    terraform plan\r\n    ```\r\n\r\n4. Создайте ресурсы:\r\n    ```bash\r\n    terraform apply\r\n    ```\r\n\r\n5. После развертывания ресурсов убедитесь, что проверка состояния сетевых ВМ выдает значение `Healthy`. Для этого в консоли Yandex Cloud в каталоге `folder_id` выберите сервис `Network Load Balancer` и перейдите на страницу сетевого балансировщика `route-switcher-lb-...`. Раскройте целевую группу и убедитесь, что состояния целевых ресурсов `Healthy`. Если состояние их `Unhealthy`, то необходимо проверить, что сетевые ВМ запущены и функционируют, и проверить правила фильтрации трафика у сетевых ВМ (пункт 2. [подготовки к развертыванию](#подготовка-к-развертыванию)).\r\n\r\n6. После того, как вы убедились, что проверка состояния сетевых ВМ выдает значение `Healthy`, измените значение входного параметра `start_module` модуля route-switcher на `true` для включения работы модуля и выполните команды:\r\n    ```bash\r\n    terraform plan\r\n    terraform apply\r\n    ```\r\n7. После выполнения `terraform apply` с параметром `start_module = true` в каталоге `folder_id` создается триггер `route-switcher-trigger-...`, запускающий облачную функцию route-switcher раз в минуту. Триггер начинает работать в течение 5 минут после создания.\r\n\r\nПосле выполнения всех шагов по развертыванию в сегментах будет осуществляться переключение исходящего трафика при отказе сетевой ВМ на резервную ВМ.\r\n\r\n## Проверка отказоустойчивости\r\n\r\n\u003e **Важная информация**\r\n\u003e \r\n\u003e Для проверки отказоустойчивости необходимо будет остановить сетевую ВМ, что приведет к временной недоступности сети в процессе переключения. В продуктивной среде необходимо согласовать технологическое окно для проведения проверки.\r\n\r\n1. Выберите или создайте Linux ВМ в сегменте, для которого модуль route-switcher обеспечивает отказоустойчивость исходящего трафика. В консоли Yandex Cloud измените параметры этой ВМ, добавив \"Разрешить доступ к серийной консоли\". Подключитесь к серийной консоли ВМ и аутентифицируйтесь.\r\n\r\n2. Запустите в этой ВМ исходящий трафик из сегмента с помощью `ping` к ресурсу в интернете или в другом сегменте.\r\n    \r\n3. В консоли Yandex Cloud выберите сетевую ВМ, через которую проходит исходящий трафик из сегмента, и остановите ее, эмулируя отказ.\r\n\r\n4. Наблюдайте за пропаданием пакетов ping. После отказа сетевой ВМ может наблюдаться пропадание трафика, после чего трафик должен восстановиться.\r\n\r\n5. Проверьте, что в таблице маршрутизации в каталоге сегмента используется адрес резервной ВМ для next hop.\r\n\r\n6. В консоли Yandex Cloud запустите выключенную сетевую ВМ, эмулируя восстановление. \r\n\r\n7. Если в настройках модуля route-switcher был указан параметр `back_to_primary = true`, то после восстановления сетевой ВМ на нее произойдет переключение исходящего трафика. Может наблюдаться пропадание трафика, после чего трафик должен восстановиться. Проверьте, что в таблице маршрутизации в каталоге сегмента используется для next hop адрес сетевой ВМ из шага 3.\r\n\r\n8. В консоли Yandex Cloud для Linux ВМ, с которой выполнялся `ping`, отключите \"Разрешить доступ к серийной консоли\".\r\n\r\n\r\n## Остановка работы модуля\r\n\r\nЕсли вы хотите временно остановить работу модуля route-switcher, то измените значение входного параметра `start_module` модуля route-switcher на `false` для выключения работы модуля и выполните команды:\r\n```bash\r\nterraform plan\r\nterraform apply\r\n```\r\n\r\nПосле выполнения этих команд удалится триггер `route-switcher-trigger-...`, запускающий облачную функцию route-switcher раз в минуту, и работа модуля будет остановлена. \r\n\r\nЕсли вам потребуется включить работу модуля обратно, то выполните пункты 5 и 6 из раздела [Порядок развертывания](#порядок-развертывания).\r\n\r\n## Изменение входных параметров модуля\r\n\r\nВ процессе работы модуля можно изменить входные параметры модуля. Например, во входных параметрах вы можете добавить или удалить IP-адреса сетевых ВМ или таблицы маршрутизации.\r\n\r\n\u003e **Важная информация**\r\n\u003e \r\n\u003e Изменение входных параметров модуля необходимо выполнять при работающих сетевых ВМ. Убедитесь, что проверка состояния сетевых ВМ выдает значение `Healthy` (смотрите пункт 5 из раздела [Порядок развертывания](#порядок-развертывания)). \r\n\u003e При добавлении таблиц маршрутизации модуль route-switcher сохранит текущие next hop адреса таблиц маршрутизации как предпочтительные в файле конфигурации в бакете Object Storage.\r\n\r\nДля изменения входных параметров модуля выполните следующие действия:\r\n\r\n1. Задайте входные параметры модуля.\r\n\r\n2. Выполните команды:\r\n    ```bash\r\n    terraform plan\r\n    terraform apply\r\n    ```\r\n\r\n## Изменение маршрутов в таблицах маршрутизации\r\n\r\nВ процессе работы модуля можно изменить next hop адреса сетевых ВМ в таблицах маршрутизации, указанных во входных параметрах модуля. Для этого необходимо выполнить следующие действия:\r\n\r\n1. [Остановить работу модуля](#остановка-работы-модуля)\r\n\r\n2. Изменить next hop адреса в таблицах маршрутизации\r\n\r\n3. Включить работу модуля, выполнив пункты 5 и 6 из раздела [Порядок развертывания](#порядок-развертывания).\r\n\r\n## Мониторинг работы модуля\r\n\r\nМодуль поставляет метрики в [Yandex Monitoring](https://yandex.cloud/ru/docs/monitoring/):\r\n\r\n| **Имя метрики** | **Описание** | **Возможные значения** | **Метки** |\r\n| --- | --- | --- | --- |\r\n| `route_switcher.switchover` | Необходимость переключения next hop в таблицах маршрутизации | `0` - переключение не требуется\u003cbr\u003e`1` - необходимо переключение | `route_switcher_name` - имя функции route-switcher\u003cbr\u003e`folder_name` - имя каталога с функцией route-switcher |\r\n| `route_switcher.router_state` | Состояние доступности сетевой ВМ | `0` - недоступна\u003cbr\u003e`1` - доступна | `router_ip` - IP-адрес сетевой ВМ\u003cbr\u003e`folder_name` - имя каталога с функцией route-switcher |\r\n| `route_switcher.table_changed` | Изменение next hop в таблице маршрутизации | `0` - отсутствуют изменения\u003cbr\u003e`1` - выполнены изменения\u003cbr\u003e`2` - возникла ошибка при выполнении изменений | `route_switcher_name` - имя функции route-switcher\u003cbr\u003e`route_table_name` - имя таблицы маршрутизации\u003cbr\u003e`folder_name` - имя каталога с функцией route-switcher |\r\n| `route_switcher.security_groups_changed` | Изменение групп безопасности у интерфейса сетевой ВМ | `0` - отсутствуют изменения\u003cbr\u003e`1` - выполнен запрос на изменение\u003cbr\u003e`2` - возникла ошибка при выполнении изменений | `route_switcher_name` - имя функции route-switcher\u003cbr\u003e`router_ip` - IP-адрес сетевой ВМ\u003cbr\u003e`interface_index` - номер интерфейса сетевой ВМ\u003cbr\u003e`folder_name` - имя каталога с функцией route-switcher |\r\n\r\n- Метрики имеют значение `service=custom` (Custom Metrics, пользовательские метрики)  \r\n- Для визуализации этих метрик можно [создать дашборд](https://yandex.cloud/ru/docs/monitoring/operations/dashboard/create)\r\n- Пример [строки запроса](https://yandex.cloud/ru/docs/monitoring/concepts/visualization/query-string) для графика состояния доступности сетевых ВМ:\r\n`\"route_switcher.router_state\"{folderId=\"\u003cid каталога с функцией route-switcher\u003e\", service=\"custom\", router_ip=\"*\"} `\r\n- С помощью [алертинга](https://yandex.cloud/ru/docs/monitoring/concepts/alerting) можно настроить уведомления об изменении метрик\r\n\r\n\r\n## Примеры использования модуля\r\n\r\nВы можете познакомиться с примерами использования модуля route-switcher:\r\n\r\n1. [Решение по обеспечению отказоустойчивости NAT-инстанс](examples/README.md)\r\n\r\n1. [Решение по развертыванию защищенной высокодоступной сетевой инфраструктуры с выделением DMZ на основе Check Point NGFW](https://github.com/yandex-cloud-examples/yc-dmz-with-high-available-ngfw/)\r\n\r\n1. [Решение по развертыванию защищенной высокодоступной сетевой инфраструктуры с выделением DMZ на основе UserGate NGFW](https://github.com/yandex-cloud-examples/yc-dmz-with-high-available-usergate-ngfw)\r\n\r\n1. [Решение по развертыванию защищенной высокодоступной сетевой инфраструктуры с выделением DMZ на основе Смарт-Софт NGFW](https://github.com/yandex-cloud-examples/yc-dmz-with-high-available-ting-ngfw)\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyandex-cloud-examples%2Fyc-route-switcher","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyandex-cloud-examples%2Fyc-route-switcher","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyandex-cloud-examples%2Fyc-route-switcher/lists"}