Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Истории успеха
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Доступны в регионе
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • ИИ для бизнеса
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Партнёрская программа
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Истории успеха
  • Документация
  • Блог
Проект Яндекса
© 2025 ТОО «Облачные Сервисы Казахстан»
Архитектурные решения
  • Рекомендации по отказоустойчивости в Yandex Cloud
  • Развертывание веб-приложения в отказоустойчивой конфигурации в Yandex Cloud
  • Тестирование отказоустойчивости в Yandex Cloud

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

  • Системная архитектура
  • Сеть
  • PostgreSQL
  • Kubernetes
  • L7-балансировщик
  • Возможности расширения и модификации
  • Тестовое приложение
  • Планируемый расход ресурсов Yandex Cloud
  • Подготовьте облако к работе
  • Необходимые платные ресурсы
  • Создайте инфраструктуру
  • Проверьте работу веб-приложения
  • Как удалить созданные ресурсы

Развертывание веб-приложения в отказоустойчивой конфигурации в Yandex Cloud

Статья создана
Yandex Cloud
Улучшена
kvendingoldo
Обновлена 11 июля 2025 г.
  • Системная архитектура
    • Сеть
    • PostgreSQL
    • Kubernetes
    • L7-балансировщик
  • Возможности расширения и модификации
  • Тестовое приложение
  • Планируемый расход ресурсов Yandex Cloud
  • Подготовьте облако к работе
    • Необходимые платные ресурсы
  • Создайте инфраструктуру
  • Проверьте работу веб-приложения
  • Как удалить созданные ресурсы

В данном руководстве приведен пример решения задачи по развертыванию веб-приложения в отказоустойчивой конфигурации в инфраструктуре Yandex Cloud. В основе инфраструктуры, обеспечивающей работу веб-приложения, лежит группа масштабируемых управляемых сервисов экосистемы Yandex Cloud: Yandex Managed Service for Kubernetes, Yandex Managed Service for PostgreSQL и Yandex Application Load Balancer.

Кроме указанных основных сервисов, для запуска и проверки веб-приложения используются вспомогательные сервисы: Yandex Container Registry, Yandex Certificate Manager, Yandex Cloud DNS, Yandex Compute Cloud, Yandex Identity and Access Management, Yandex Key Management Service и Yandex Virtual Private Cloud.

Системная архитектураСистемная архитектура

Инфраструктура решения спроектирована с учетом рекомендаций по построению отказоустойчивой инфраструктуры и рекомендаций по планированию топологии кластеров PostgreSQL.

СетьСеть

В инфраструктуре решения создается одна облачная сеть Virtual Private Cloud net-todo-app.

ПодсетиПодсети

В сети net-todo-app создается шесть подсетей:

  • Подсети net-todo-app-k8s1, net-todo-app-k8s2 и net-todo-app-k8s3 для узлов кластера Kubernetes — по одной подсети в каждой зоне доступности.
  • Подсети net-todo-app-db1, net-todo-app-db2 и net-todo-app-db3 для узлов кластера PostgreSQL — по одной подсети в каждой зоне доступности.

Группы безопасностиГруппы безопасности

Сетевой доступ к ресурсам инфраструктуры разграничен с помощью следующих групп безопасности:

  • db-todo-app разрешает входящий трафик к узлам кластера PostgreSQL только с узлов кластера Kubernetes на TCP-порт 6432.

  • k8s-cluster-todo-app разрешает:

    • Входящий трафик к кластеру Kubernetes на TCP-порты 443 и 6443 с узлов кластера.

    • Группа безопасности также разрешает входящий трафик к кластеру на TCP-порты 443 и 6443 из интернета. Это подходит для тестовой среды.

      Важно

      В производственной среде ограничьте доступ к кластеру Kubernetes внутренними или отдельными публичными IP-адресами.

  • k8s-nodes-todo-app разрешает:

    • Входящий трафик от других узлов кластера, а также от CIDR кластера и CIDR сервисов.

    • Входящий трафик от кластера Kubernetes на TCP-порты 10250 и 10256 для работы kubectl exec/kubectl logs и для проверок состояния kubeproxy.

    • Входящий трафик от ресурсных единиц Application Load Balancer на TCP-порт 10501 для проверок доступности узлов кластера.

    • Входящий трафик от любых адресов в интернете на порты в диапазоне 30000-32767 для публикации сервисов, запущенных в кластере.

      Важно

      Если доступ к сервисам Kubernetes в обход L7-балансировщика не предполагается, ограничьте доступ к этому диапазону, сохранив его только для ресурсных единиц Application Load Balancer.

    • Входящий трафик от системы проверок состояний Yandex Network Load Balancer. Если использование инструментов Network Load Balancer не предполагается, удалите это правило из группы безопасности.

    • Входящий трафик от кластера Kubernetes на TCP-порт 4443 для работы сборщика метрик.

  • k8s-alb-todo-app разрешает:

    • Входящий трафик из интернета на TCP-порты 80 и 443, обеспечивающий доступ пользователей к веб-приложению.
    • Входящий трафик на весь диапазон TCP-портов для проверки состояния балансировщика.

Кроме этого, все группы безопасности разрешают входящий ICMP-трафик.

Адреса ресурсовАдреса ресурсов

В создаваемой инфраструктуре используются два публичных IP-адреса:

  • IP-адрес L7-балансировщика primary-address-todo-app.
  • IP-адрес кластера Kubernetes (не учитывается в общей квоте публичных IP-адресов).

Узлы кластеров Kubernetes и PostgreSQL используют внутренние адреса.

PostgreSQLPostgreSQL

База данных веб-приложения размещается в управляемом кластере Managed Service for PostgreSQL main-todo-app.

Кластер создан в максимально отказоустойчивой конфигурации с рабочими узлами в трех зонах доступности в соответствии с рекомендациями по планированию топологии кластеров PostgreSQL.

Узлы кластера PostgreSQL не имеют публичных IP-адресов, доступ к базе данных возможен по внутренним IP-адресам и только с узлов кластера Kubernetes или через пользовательский интерфейс Yandex WebSQL.

В кластере созданы база данных todo и пользователь todo, которые используются веб-приложением.

KubernetesKubernetes

Для запуска компонентов приложения используется управляемый кластер Managed Service for Kubernetes main-todo-app.

В соответствии с рекомендациями по построению отказоустойчивой инфраструктуры кластер создан в конфигурации:

  • Высокодоступный кластер Managed Service for Kubernetes c мастерами в трех зонах доступности.
  • В кластере включен сервис NodeLocal DNS Cache для кэширования запросов DNS.

В кластере Kubernetes развернут вспомогательный сервис Application Load Balancer Ingress-контроллер для управления конфигурацией L7-балансировщика с помощью объектов Ingress.

Чтобы управлять вспомогательными сервисами Kubernetes с помощью манифестов Terraform, для кластера включен публичный доступ к API. Доступ к API ограничен с помощью групп безопасности.

Узлам кластера Kubernetes необходим доступ в интернет, в том числе для скачивания Docker-образов из реестра Yandex Container Registry. Доступ в интернет для узлов кластера реализован с помощью NAT-шлюза net-todo-app-egress-nat и привязки к подсетям кластера Kubernetes таблицы маршрутизации net-todo-app-default-route-table. Доступ в интернет не ограничивается.

L7-балансировщикL7-балансировщик

За балансировку нагрузки на веб-приложение в создаваемой инфраструктуре отвечает управляемый сервис Application Load Balancer. L7-балансировщик Application Load Balancer создается сервисом Managed Service for Kubernetes динамически с помощью объектов Ingress. Ingress-контроллер Application Load Balancer отслеживает изменения объектов Ingress и выполняет соответствующие модификации настроек балансировщика, в том числе его создание и удаление. Ingress входит в Helm-чарт установки приложения.

Application Load Balancer интегрирован с сервисом Yandex Certificate Manager, который выполняет автоматическое получение сертификатов Let's Encrypt.

Возможности расширения и модификацииВозможности расширения и модификации

Все компоненты инфраструктуры могут масштабироваться как горизонтально, так и вертикально:

  • Для кластера Managed Service for Kubernetes доступно автоматическое масштабирование за счет добавления новых узлов.
  • Кластер Managed Service for PostgreSQL поддерживает автоматическое расширение хранилища в зависимости от заполнения, при этом добавление дополнительных узлов кластера выполняется вручную.
  • Application Load Balancer поддерживает автоматическое и ручное масштабирование в зависимости от нагрузки.
  • Инфраструктуру можно быстро расширить за счет использования других управляемых сервисов, таких как Yandex Managed Service for Valkey™, Yandex Managed Service for Apache Kafka®, Yandex Object Storage и др.

В дополнение к уже имеющимся в решении возможностям вы можете подключить к нему дополнительные компоненты:

  • К L7-балансировщику вы можете подключить профиль безопасности Yandex Smart Web Security, который обеспечивает защиту от ботов, DDoS- и веб-атак, а также выполняет функции WAF и ARL.
  • Если вам потребуется ограничить доступ в интернет или использовать для доступа фиксированный IP-адрес, вы можете легко модифицировать инфраструктуру и организовать подключение к интернету с помощью NAT-instance или другого сетевого продукта Yandex Cloud Marketplace.

Тестовое приложениеТестовое приложение

Тестовое веб-приложение todo («Заметки»), развертываемое в этом руководстве, адаптировано для запуска в облачной инфраструктуре. В качестве среды выполнения приложения используется управляемый кластер Kubernetes. Приложение состоит из двух компонентов: фронтенд и бэкенд.

Оба компонента собраны и упакованы в образ контейнера на базе образа distroless gcr.io/distroless/base-debian12, который обеспечивает максимальную компактность и безопасность.

Бэкенд написан на языке Go, для его работы необходима СУБД PostgreSQL. В соответствии с рекомендациями по построению отказоустойчивой инфраструктуры в приложении реализована проверка доступности (Health Check), которая отслеживает доступность подключаемых ресурсов, в частности кластера PostgreSQL.

Фронтенд написан на React. Для публикации фронтенда используется веб-сервер Angie, который в целях компактности и безопасности собирается статически из исходного кода.

Docker-образы и Helm-чарт для установки размещены в реестре Container Registry.

Планируемый расход ресурсов Yandex CloudПланируемый расход ресурсов Yandex Cloud

Квота Количество
Application Load Balancer
L7-балансировщики 1
HTTP-роутеры 2
Группы бэкендов 2
Целевые группы 2
Certificate Manager
TLS-сертификаты 1
Cloud DNS
Зоны DNS 1
Ресурсные записи 4
Compute Cloud
Группы виртуальных машин 3
Виртуальные машины 3
Диски 3
Общее количество vCPU виртуальных машин 12
Общий объем RAM виртуальных машин 24 ГБ
Общий объем нереплицируемых SSD-дисков 279 ГБ
Identity and Access Management
Сервисные аккаунты 3
Авторизованные ключи 1
Key Management Service
Симметричные ключи 1
Managed Service for PostgreSQL
Кластеры PostgreSQL 1
Общее количество vCPU хостов баз данных 6
Общий объем RAM хостов баз данных 24 ГБ
Общий объем хранилищ хостов баз данных 99 ГБ
Managed Service for Kubernetes
Кластеры Kubernetes 1
Группы узлов 3
Узлы 3
Общее количество vCPU узлов кластера 12
Общий объем RAM узлов кластера 24 ГБ
Общий объем дисков узлов кластера 279 ГБ
Общее количество vCPU всех мастеров кластера 6
Общий объем RAM всех мастеров кластера 24 ГБ
Virtual Private Cloud
Облачные сети 1
Подсети 8
Публичные IP-адреса 1
Статические публичные IP-адреса 1
Группы безопасности 4
Шлюзы 1
NAT-шлюзы 1
Таблицы маршрутизации 1
Статические маршруты 1

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

Для создания инфраструктуры используется Terraform-провайдер Yandex Cloud. Исходный код руководства доступен на GitHub.

Чтобы развернуть веб-приложение в отказоустойчивой среде Yandex Cloud:

  1. Подготовьте облако к работе.
  2. Создайте инфраструктуру.
  3. Проверьте работу веб-приложения.

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

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

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

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

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

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

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

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

  • плата за вычислительные ресурсы и диски ВМ, на базе которых развертывается кластер Kubernetes (см. тарифы Compute Cloud);
  • плата за использование вычислительных ресурсов L7-балансировщика (см. тарифы Yandex Application Load Balancer);
  • плата за использование мастера управляющего кластера Managed Service for Kubernetes и исходящий трафик (см. тарифы Yandex Managed Service for Kubernetes);
  • плата за использование публичных IP-адресов и NAT-шлюза (см. тарифы Yandex Virtual Private Cloud);
  • плата за постоянно запущенный кластер Managed Service for PostgreSQL (см. тарифы Managed Service for PostgreSQL);
  • плата за использование публичной DNS-зоны и публичные DNS-запросы (см. тарифы Yandex Cloud DNS);
  • плата за запись и хранение логов в лог-группе (см. тарифы Yandex Cloud Logging).

Создайте инфраструктуруСоздайте инфраструктуру

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

Terraform распространяется под лицензией Business Source License, а провайдер Yandex Cloud для Terraform — под лицензией MPL-2.0.

Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform или в зеркале.

Для создания инфраструктуры с помощью Terraform:

  1. Установите Terraform, получите данные для аутентификации и укажите источник для установки провайдера Yandex Cloud (раздел Настройте провайдер, шаг 1).

  2. Подготовьте файлы с описанием инфраструктуры:

    1. Клонируйте репозиторий с конфигурационными файлами.

      git clone https://github.com/yandex-cloud-examples/yc-mk8s-ha-todo-application.git
      
    2. Перейдите в директорию с репозиторием:

      cd yc-mk8s-ha-todo-application
      
    3. В файле terraform.tfvars задайте пользовательские параметры:

      • folder_id — идентификатор каталога.
      • target_host — имя вашего домена. Домен должен быть делегирован сервису Yandex Cloud DNS.
  3. Создайте ресурсы:

    1. В терминале перейдите в папку, где вы отредактировали конфигурационный файл.

    2. Проверьте корректность конфигурационного файла с помощью команды:

      terraform validate
      

      Если конфигурация является корректной, появится сообщение:

      Success! The configuration is valid.
      
    3. Выполните команду:

      terraform plan
      

      В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.

    4. Примените изменения конфигурации:

      terraform apply
      
    5. Подтвердите изменения: введите в терминале слово yes и нажмите Enter.

В результате в заданном каталоге будет развернута необходимая инфраструктура. Процесс развертывания может занять до 40 минут.

Примечание

После успешного создания инфраструктуры подождите 5-7 минут, прежде чем тестировать веб-приложение. Это время требуется Ingress-контроллеру, чтобы создать и запустить L7-балансировщик.

Проверьте работу веб-приложенияПроверьте работу веб-приложения

В адресной строке браузера введите имя вашего домена, которое вы указали в файле terraform.tfvars.

В результате откроется веб-приложение Todo app, развернутое в отказоустойчивой инфраструктуре Yandex Cloud.

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

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

  1. В командной строке перейдите в папку, где расположен конфигурационный файл Terraform.

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

    terraform destroy
    
  3. Введите слово yes и нажмите Enter.

Дождитесь завершения процесса удаления ресурсов. Проконтролировать удаление всех ресурсов вы можете в консоли управления.

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

Предыдущая
Рекомендации по отказоустойчивости в Yandex Cloud
Следующая
Тестирование отказоустойчивости в Yandex Cloud
Проект Яндекса
© 2025 ТОО «Облачные Сервисы Казахстан»