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

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

  • Подготовьте облако к работе
  • Необходимые платные ресурсы
  • Необходимые квоты
  • Настройте профиль CLI
  • Подготовьте окружение
  • Установите необходимые утилиты
  • Разверните ресурсы
  • Протестируйте работоспособность решения
  • Рекомендации по развертыванию решения в продуктивной среде
  • Удалите созданные ресурсы
  1. Практические руководства
  2. Подключение к Container Registry из Virtual Private Cloud

Подключение к Container Registry из Virtual Private Cloud

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

Для работы с Container Registry облачным ресурсам требуется доступ в интернет. С помощью руководства вы развернете в Yandex Cloud облачную инфраструктуру для организации доступа к Container Registry для ресурсов, которые размещены в облачной сети Virtual Private Cloud и не имеют публичных IP-адресов или выхода в интернет через NAT-шлюз.

Container Registry для хранения Docker-образов в реестре использует Object Storage. В этом решении также организован доступ к Object Storage для ресурсов в Virtual Private Cloud.

Схема решения представлена ниже.

После развертывания решения в Yandex Cloud будут созданы следующие ресурсы:

Название Описание
cr-vpc * Облачная сеть с ресурсами, для которых организуется доступ к Container Registry.
cr-nlb Внутренний сетевой балансировщик обеспечивает прием трафика к Container Registry. Балансировщик принимает TCP трафик с портом назначения 443 и распределяет его по ресурсам (ВМ) в целевой группе.
nat-group Целевая группа балансировщиков с виртуальными машинами, на которых включена функция NAT.
s3-nlb Внутренний сетевой балансировщик обеспечивает прием трафика к Object Storage. Балансировщик принимает TCP трафик с портом назначения 443 и распределяет его по ресурсам (ВМ) в целевой группе.
nat-a1-vm, nat-b1-vm Виртуальные машины с NAT в зонах ru-central1-a и ru-central1-b для передачи трафика к Container Registry и Object Storage с трансляцией IP-адресов источников и получателей трафика, а также для передачи обратного трафика.
pub-ip-a1, pub-ip-b1 Публичные IP-адреса ВМ, в которые облачная сеть VPC транслирует их внутренние IP-адреса.
DNS зоны и A-записи Внутренние DNS зоны storage.yandexcloud.net. и cr.yandex. в сети cr-vpc с ресурсными A записями, сопоставляющими доменные имена с IP-адресами внутренних сетевых балансировщиков.
test-registry Реестр в Container Registry.
container-registry-<id_реестра> Имя бакета в Object Storage для хранения Docker-образов, где <id_реестра> – идентификатор реестра. Сервис Container Registry автоматически создает в Object Storage бакет для реестра.
cr-subnet-a, cr-subnet-b Облачные подсети для размещения ВМ с NAT в зонах ru-central1-a и ru-central1-b.
test-cr-vm Тестовая ВМ для проверки доступа к Container Registry.
test-cr-subnet-a Облачная подсеть для размещения тестовой ВМ.

* При развертывании можно также указать существующую облачную сеть

Для облачной сети с размещаемыми ресурсами в сервисе Cloud DNS создаются внутренние DNS-зоны:

  • cr.yandex. и ресурсная запись типа A, сопоставляющая доменное имя cr.yandex сервиса Container Registry с IP-адресом внутреннего сетевого балансировщика cr-nlb.
  • storage.yandexcloud.net. и ресурсная запись типа A, сопоставляющая доменное имя storage.yandexcloud.net сервиса Object Storage с IP-адресом внутреннего сетевого балансировщика s3-nlb.

Благодаря этим записям трафик от облачных ресурсов к Container Registry и Object Storage будет направляться на внутренние балансировщики, которые будут распределять нагрузку по виртуальным машинам с NAT.

Для развертывания ВМ с NAT используется образ из Marketplace, который транслирует IP-адреса источника и назначения, чтобы обеспечить маршрутизацию трафика до публичных IP-адресов Container Registry и Object Storage.

Разместив ВМ с NAT в нескольких зонах доступности, можно получить отказоустойчивость доступа к Container Registry. Увеличивая количество ВМ с NAT, можно масштабировать решение при возрастании нагрузки. При расчете количества ВМ с NAT следует учитывать локальность при обработке трафика внутренним балансировщиком.

Доступ к реестру открыт только для облачных ресурсов, использующих данное решение. Политика доступа для реестра разрешает действия с реестром только с публичных IP-адресов ВМ с NAT. Доступ к реестру с других IP-адресов запрещен. При необходимости это ограничение можно отключить с помощью параметра в Terraform.

Более подробное описание приведено в репозитории проекта.

Чтобы развернуть облачную инфраструктуру для организации доступа к Container Registry для ресурсов, которые размещены в облачной сети VPC:

  1. Подготовьте облако к работе.
  2. Настройте профиль CLI.
  3. Подготовьте окружение.
  4. Разверните ресурсы.
  5. Протестируйте работоспособность решения.
  6. Рекомендации по развертыванию решения в продуктивной среде

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

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

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

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

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

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

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

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

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

Необходимые квотыНеобходимые квоты

Убедитесь, что в облаке достаточно квот и они не заняты ресурсами для других задач.

Количество занимаемых ресурсов, создаваемых в сценарии
Ресурс Количество
Виртуальные машины 3
vCPU виртуальных машин 6
RAM виртуальных машин 6 ГБ
Диски 3
Объем HDD дисков 30 ГБ
Объем SSD дисков 20 ГБ
Сетевой балансировщик 2
Целевая группа для балансировщика 1
Сети 1*
Подсети 3
Статические публичные IP-адреса 2
Группы безопасности 1
Зона DNS 2
Реестр 1
Сервисный аккаунт 1

* Если в terraform.tfvars не указать идентификатор существующей сети.

Настройте профиль 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. В открывшемся диалоге нажмите кнопку Добавить роль и выберите роль 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
      yc config set cloud-id <идентификатор_облака>
      yc config set folder-id <идентификатор_каталога>
      

      Где:

      • service-account-key — файл с авторизованным ключом сервисного аккаунта.
      • cloud-id — идентификатор облака.
      • folder-id — идентификатор каталога.
    4. Добавьте аутентификационные данные в переменные окружения:

      export YC_TOKEN=$(yc iam create-token)
      

Подготовьте окружениеПодготовьте окружение

Установите необходимые утилитыУстановите необходимые утилиты

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

    sudo apt install git
    
  2. Установите Terraform.

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

  1. Клонируйте репозиторий из GitHub и перейдите в папку сценария yc-cr-private-endpoint:

    git clone https://github.com/yandex-cloud-examples/yc-cr-private-endpoint.git
    cd yc-cr-private-endpoint
    
  2. Откройте файл terraform.tfvars и отредактируйте:

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

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

      trusted_cloud_nets = ["10.0.0.0/8", "192.168.0.0/16"]
      
    Описание переменных в terraform.tfvars
    Название
    параметра
    Нужно
    изменение
    Описание Тип Пример
    folder_id да ID каталога для размещения компонентов решения. string b1gentmqf1ve9uc54nfh
    vpc_id - ID облачной сети, для которой организуется доступ к Container Registry. Если не указано, то сеть будет создана. string enp48c1ndilt42veuw4x
    yc_availability_zones - Список зон доступности для развертывания ВМ с NAT. list(string) ["ru-central1-a", "ru-central1-b"]
    subnet_prefix_list - Список префиксов облачных подсетей для размещения ВМ с NAT (по одной подсети в каждой зоне доступности из списка yc_availability_zones, перечисленных в том же порядке). list(string) ["10.10.1.0/24", "10.10.2.0/24"]
    nat_instances_count - Количество разворачиваемых ВМ с NAT. Рекомендуется указывать четное число для равномерного распределения ВМ по зонам доступности. number 2
    registry_private_access - Ограничить доступ к реестру только с публичных IP-адресов ВМ с NAT. Используется значение true для ограничения, false для отмены ограничения. bool true
    trusted_cloud_nets да Список агрегированных префиксов облачных подсетей, для которых разрешен доступ к Container Registry. Используется во входящем правиле групп безопасности для ВМ с NAT. list(string) ["10.0.0.0/8", "192.168.0.0/16"]
    vm_username - Имя пользователя для ВМ с NAT и тестовой ВМ. string admin
    cr_ip - Публичный IP-адрес сервиса Container Registry. string 84.201.171.239
    cr_fqdn - Доменное имя сервиса Container Registry. string cr.yandex
    s3_ip - Публичный IP-адрес сервиса Object Storage. string 213.180.193.243
    s3_fqdn - Доменное имя сервиса Object Storage. string storage.yandexcloud.net
  3. Разверните ресурсы в облаке с помощью Terraform:

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

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

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

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

      terraform apply
      
  4. После завершения процесса terraform apply в командной строке будет выведена информация для подключения к тестовой ВМ и тестирования работы с Container Registry. В дальнейшем его можно будет посмотреть с помощью команды terraform output:

    Посмотреть информацию о развернутых ресурсах
    Название Описание Пример значения
    cr_nlb_ip_address IP-адрес внутреннего балансировщика для Container Registry. 10.10.1.100
    cr_registry_id Идентификатор реестра в Container Registry. crp1r4h00mj*********
    path_for_private_ssh_key Файл с приватным ключом для подключения по протоколу SSH к ВМ с NAT и тестовой ВМ. ./pt_key.pem
    s3_nlb_ip_address IP-адрес внутреннего балансировщика для Object Storage. 10.10.1.200
    test_vm_password Пароль пользователя admin для тестовой ВМ. v3RСqUrQN?x)
    vm_username Имя пользователя для ВМ с NAT и тестовой ВМ. admin

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

  1. В консоли управления перейдите в каталог, в котором ранее были созданы ресурсы.

  2. Выберите сервис Compute Cloud.

  3. В списке виртуальных машин выберите ВМ test-cr-vm.

  4. В меню слева выберите Серийная консоль.

  5. Нажмите кнопку Подключиться.

  6. Введите логин admin и пароль из вывода команды terraform output test_vm_password (укажите значение без кавычек).

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

    dig cr.yandex storage.yandexcloud.net
    
  8. Убедитесь, что в ответе от DNS-сервера доменному имени сервиса Object Storage и Container Registry соответствуют IP-адреса внутренних балансировщиков. Результат вывода ресурсных записей типа A:

    ;; ANSWER SECTION:
    cr.yandex.               300    IN      A       10.10.1.100
    
    ;; ANSWER SECTION:
    storage.yandexcloud.net. 300    IN      A       10.10.1.200
    
  9. Посмотрите список доступных для загрузки Docker-образов:

    docker image list
    

    Результат:

    REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
    golang        1.20.5    342*********   8 months ago   777MB
    hello-world   latest    9c7*********   9 months ago   13.3kB
    
  10. Присвойте Docker-образу URL вида cr.yandex/<идентификатор_реестра>/<имя_Docker-образа>:<тег>. Идентификатор реестра будет получен из переменной среды на тестовой ВМ:

    docker tag hello-world cr.yandex/$REGISTRY_ID/hello-world:demo
    
    docker image list
    

    Результат:

    REPOSITORY                                   TAG       IMAGE ID       CREATED        SIZE
    golang                                       1.20.5    342*********   8 months ago   777MB
    cr.yandex/crp1r4h00mj*********/hello-world   demo      9c7*********   9 months ago   13.3kB
    hello-world                                  latest    9c7*********   9 months ago   13.3kB
    

    Примечание

    Загрузить в Container Registry можно только Docker-образы с URL вида cr.yandex/<идентификатор_реестра>/<имя_Docker-образа>:<тег>.

  11. Загрузите необходимый Docker-образ в реестр:

    docker push cr.yandex/$REGISTRY_ID/hello-world:demo
    

    Результат:

    The push refers to repository [cr.yandex/crp1r4h00mj*********/hello-world]
    01bb4*******: Pushed 
    demo: digest: sha256:7e9b6e7ba284****************** size: 525
    
  12. В консоли управления перейдите в каталог, в котором ранее были созданы ресурсы.

  13. Выберите сервис Container Registry.

  14. Выберите реестр test-registry.

  15. Убедитесь, что в реестре появился репозиторий hello-world с Docker-образом.

Рекомендации по развертыванию решения в продуктивной средеРекомендации по развертыванию решения в продуктивной среде

  • При развертывании ВМ с NAT в нескольких зонах доступности указывайте четное число ВМ для их равномерного распределения по зонам доступности;

  • Выбирая количество ВМ с NAT, учитывайте локальность при обработке трафика внутренним балансировщиком;

  • После ввода решения в эксплуатацию уменьшайте количество ВМ с NAT или изменяйте список зон доступности в параметре yc_availability_zones только в заранее запланированный период времени. В процессе применения изменений возможны прерывания в обработке трафика;

  • Если при возрастании нагрузки к Container Registry внутри ВМ с NAT наблюдается большое значение метрики CPU steal time, то для ВМ с NAT рекомендуется включить программно-ускоренную сеть;

  • Если вы используете собственный DNS-сервер, в его настройках создайте ресурсные записи типа A следующего вида:

    Имя Тип Значение
    cr.yandex. A <IP-адрес внутреннего балансировщика для Container Registry из вывода команды terraform output cr_nlb_ip_address>
    storage.yandexcloud.net. A <IP-адрес внутреннего балансировщика для Object Storage из вывода команды terraform output s3_nlb_ip_address>
  • Сохраните приватный SSH-ключ pt_key.pem, используемый для подключения к ВМ с NAT, в надежное место либо пересоздайте его отдельно от Terraform;

  • После развертывания решения доступ по SSH к ВМ с NAT будет закрыт. Чтобы разрешить доступ к ВМ с NAT по протоколу SSH, добавьте входящее правило для SSH-трафика (TCP/22) в группе безопасности cr-nat-sg, чтобы разрешить доступ только с определенных IP-адресов рабочих мест администраторов;

  • После проверки работоспособности удалите тестовую ВМ и ее подсеть.

Удалите созданные ресурсыУдалите созданные ресурсы

  • Вручную

    1. В консоли управления перейдите в каталог, в котором ранее были созданы ресурсы.
    2. Выберите сервис Container Registry.
    3. Выберите реестр test-registry.
    4. Выберите репозиторий hello-world.
    5. Для каждого Docker-образа в репозитории нажмите значок .
    6. В открывшемся меню нажмите кнопку Удалить.
    7. В открывшемся окне нажмите кнопку Удалить.
  • С помощью Terraform

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

      Важно

      Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.

    2. Удалите ресурсы:

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

        terraform destroy
        
      2. Подтвердите удаление ресурсов и дождитесь завершения операции.

      Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.

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

Предыдущая
Подключение к Object Storage из Virtual Private Cloud
Следующая
Реализация защищенной высокодоступной сетевой инфраструктуры с выделением DMZ на основе Check Point NGFW
Проект Яндекса
© 2025 ООО «Яндекс.Облако»