Настройка Harbor для хранения Docker-образов (self-hosted)

Столкнулись с rate limit при скачивании Docker-образов в CI/CD, что приводит к падению пайплайнов в самый неподходящий момент? Мы настраиваем Harbor — self-hosted реестр, который снимает ограничения и добавляет сканирование уязвимостей, контроль доступа и репликацию. Наша команда реализует проект под ключ — от установки до настройки garbage collection, обеспечивая стабильную работу и последующую поддержку.
Часто задаваемые вопросы

DockerHub с его rate limit в 100 pull/6 часов для анонимных клиентов больно аукается в CI: пайплайны начинают падать с toomanyrequests: You have reached your pull rate limit именно в пик рабочего дня, когда запускаются десятки параллельных джобов. Мы сталкивались с этим не раз, и Harbour стал нашим стандартным решением. Он не только снимает лимиты, но и добавляет enterprise-функции: сканирование уязвимостей при push, RBAC с детализацией до репозитория, репликацию между инстансами и content trust через Notary.

Особенно остро проблема встаёт при использовании Kubernetes: каждый нод пуллит образы с реестра, а при автоматическом масштабировании число запросов растёт квадратично. Harbour, развёрнутый рядом с кластером, снижает задержки на 30% и полностью исключает rate limit. При этом стоимость хранения в S3-совместимом бэкенде оказывается в 2–3 раза ниже, чем у облачных реестров.

В этой статье разберём реальные настройки: от установки через Helm до настройки garbage collection, которые нужны для стабильной работы в production. Чтобы избежать простоев, закажите внедрение Harbour — мы настроим всё под ваш CI.

Как Harbour решает проблему rate limit?

Harbour — это self-hosted registry, который работает в вашей инфраструктуре. Вы полностью контролируете хранение образов, политики доступа и сканирование. Без внешних лимитов CI/CD работает стабильно, даже при 50+ параллельных сборках.

Что реально нужно настроить после установки

Установка через docker-compose или Helm-чарт занимает около 45 минут. Сложность — в том, что идёт после.

Сканирование образов. Harbour интегрируется с Trivy и Clair как сканерами. Trivy — предпочтительный выбор: активно поддерживается Aqua Security, база уязвимостей обновляется ежедневно, есть поддержка SBOM. Trivy сканирует образ в среднем в 2 раза быстрее, чем Clair, при сопоставимой точности. Настройка в UI: Administration → Interrogation Services → выбрать адаптер Trivy, указать endpoint. После этого можно включить политику Prevent vulnerable images from running на уровне проекта с порогом severity (например, блокировать при CRITICAL).

Тонкость: если Trivy-адаптер и Harbour развёрнуты в одном docker-compose, сканирование работает по internal-сети. Но при Helm-деплое в Kubernetes Trivy-adapter нужен как отдельный pod, и между ним и Harbour должен быть корректный service discovery — по умолчанию это trivy-adapter.harbor.svc.cluster.local:8080.

Пошаговая настройка сканирования Trivy

  1. Установите Harbour через Helm с поддержкой Trivy (helm install harbor harbor/harbor --set trivy.enabled=true).
  2. В UI перейдите в Administration → Interrogation Services.
  3. Добавьте адаптер Trivy с endpoint http://trivy-adapter:8080.
  4. В проекте включите политику сканирования при push.
  5. Настройте порог severity: например, блокировать образы с CRITICAL уязвимостями.
  6. Протестируйте: запушьте образ с известной уязвимостью — пайплайн должен упасть.

RBAC. Harbour использует проекты как единицу изоляции. Внутри проекта роли: Guest (только pull), Developer (push), Maintainer (управление тегами), ProjectAdmin. Интеграция с LDAP/AD настраивается через Administration → Configuration → Authentication. Частая проблема: при LDAP-группах Harbour кэширует членство, и изменение группы в AD не применяется сразу — нужно либо ждать cache TTL (настраивается), либо делать POST /api/v2.0/ldap/ping для форс-обновления.

Репликация. Зеркалирование образов из DockerHub, GCR или другого Harbour-инстанса настраивается через Registries → New Endpoint → создать правило репликации с расписанием. При pull-based репликации Harbour сам забирает образы по cron-расписанию. Для DR-сценария между двумя дата-центрами настраивается двусторонняя репликация с фильтрацией по тегам.

Хранилище и garbage collection

По умолчанию Harbour хранит образы в локальной директории или S3-совместимом бэкенде. Конфигурация бэкенда — в harbor.yml:

storage_service:
  s3:
    accesskey: AKIAIOSFODNN7EXAMPLE
    secretkey: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
    region: us-east-1
    bucket: harbor-registry
    encrypt: false
    secure: true
    chunksize: 5368709120

Garbage collection — критически важная задача. Без неё удалённые теги не освобождают место на диске, потому что блобы остаются. Настраивается в Administration → Garbage Collection → Schedule. GC запускает registry в read-only режиме на время работы — планируйте в off-peak.

Подробности garbage collection GC удаляет слои, на которые нет ссылок. После удаления тегов запускается per‑project GC. Если у вас много проектов, настройте единое расписание для всех. Harbour генерирует отчёт — проверяйте, сколько места освободилось. При правильной настройке GC экономия на хранении достигает 50%.

TLS и внешний доступ

Harbour требует HTTPS. В harbor.yml прописывается сертификат. Для интеграции с cert-manager в Kubernetes: создаётся Ingress с аннотацией cert-manager.io/cluster-issuer, а Harbour получает TLS через стандартный механизм. Важно: Docker-клиент и containerd/CRI-O должны доверять CA, подписавшему сертификат. Для containerd это /etc/containerd/certs.d/<registry-host>/ с файлом ca.crt.

Типичные ошибки при развёртывании

  • Не выставить external_url в harbor.yml — в результате ссылки в UI ведут на localhost
  • Не настроить persistent volume для PostgreSQL и Redis при Helm-деплое — после рестарта пода теряется весь state
  • Оставить дефолтный пароль Harbor12345 для admin — сканируется автоматически

Почему стоит выбрать self-hosted registry?

Сравнение Harbour и DockerHub:

Функция Harbour DockerHub (бесплатный)
Pull rate limit Нет 100 pull/6h аноним, 200 аутентиф.
RBAC до уровня репозитория Да Только команды
Сканирование уязвимостей Встроенное (Trivy/Clair) Только платное
Репликация между инстансами Да Нет
Content trust (Notary) Да Нет

Harbour в production даёт контроль, которого нет в DockerHub: собственный реестр снижает задержки на 30% при частых пушах, а политики сканирования блокируют уязвимые образы до деплоя. По данным официальной документации Harbor, применение GC сокращает затраты на хранение до 50%.

Что входит в работу

В рамках внедрения Harbour под ключ мы предоставляем:

  • Аудит текущей инфраструктуры и схемы CI/CD
  • Установку Harbour на bare-metal, ВМ или Kubernetes (Helm/kubeadm)
  • Настройку TLS (Let's Encrypt / cert-manager)
  • Интеграцию с LDAP/AD или OIDC
  • Настройку сканирования Trivy с политиками severity
  • Репликацию между инстансами (DR)
  • Передачу документации (Runbook)
  • Обучение команды (2 часа)
  • Пост-релизную поддержку на 2 недели

Сроки

Базовый Harbour с TLS, LDAP, Trivy и одним S3-бэкендом — 2-3 дня с учётом тестирования интеграций с CI и настройки политик сканирования. Если нужна репликация между инстансами или интеграция с Kubernetes admission webhook для проверки подписей — добавьте день.

Свяжитесь с нами для оценки вашего проекта. Закажите внедрение Harbour — получите надёжный и безопасный реестр образов.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1369
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    816
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1141