Налаштування 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 саме в пік робочого дня, коли запускаються десятки паралельних джобів. Ми стикалися з цим не раз, і Harbor став нашим стандартним рішенням. Він не тільки знімає ліміти, але й додає enterprise-функції: сканування вразливостей при push, RBAC з деталізацією до репозиторію, реплікацію між інстансами та content trust через Notary.

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

У цій статті розберемо реальні налаштування: від встановлення через Helm до налаштування garbage collection, які потрібні для стабільної роботи в production. Щоб уникнути простоїв, замовте впровадження Harbor — ми налаштуємо все під ваш CI.

Як Harbor вирішує проблему rate limit?

Harbor — це self-hosted registry, який працює у вашій інфраструктурі. Ви повністю контролюєте зберігання образів, політики доступу та сканування. Без зовнішніх лімітів CI/CD працює стабільно, навіть при 50+ паралельних збірках.

Що реально потрібно налаштувати після встановлення

Установка через docker-compose або Helm-чарт займає близько 45 хвилин. Складність — у тому, що йде після.

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

Тонкість: якщо Trivy-адаптер і Harbor розгорнуті в одному docker-compose, сканування працює по internal-мережі. Але при Helm-деплої в Kubernetes Trivy-adapter потрібен як окремий pod, і між ним та Harbor повинен бути коректний service discovery — за замовчуванням це trivy-adapter.harbor.svc.cluster.local:8080.

Покрокове налаштування сканування Trivy

  1. Встановіть Harbor через 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. Harbor використовує проекти як одиницю ізоляції. Всередині проекту ролі: Guest (тільки pull), Developer (push), Maintainer (управління тегами), ProjectAdmin. Інтеграція з LDAP/AD налаштовується через Administration → Configuration → Authentication. Часта проблема: при LDAP-групах Harbor кешує членство, і зміна групи в AD не застосовується одразу — потрібно або чекати cache TTL (налаштовується), або зробити POST /api/v2.0/ldap/ping для форс-оновлення.

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

Сховище та garbage collection

За замовчуванням Harbor зберігає образи в локальній директорії або 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. За даними офіційної документації Harbor, GC може звільнити до 50% місця.

Подробиці garbage collection GC видаляє шари, на які немає посилань. Після видалення тегів запускається per‑project GC. Якщо у вас багато проектів, налаштуйте єдиний розклад для всіх. Harbor генерує звіт — перевіряйте, скільки місця звільнилося. При правильному налаштуванні GC економія на зберіганні досягає 50%. Для команди з 10 розробників це економія близько 3000 грн/міс.

TLS та зовнішній доступ

Harbor вимагає HTTPS. У harbor.yml прописується сертифікат. Для інтеграції з cert-manager в Kubernetes: створюється Ingress з анотацією cert-manager.io/cluster-issuer, а Harbor отримує 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?

Порівняння Harbor та DockerHub:

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

Harbor в production дає контроль, якого немає в DockerHub: власний реєстр знижує затримки в 1.5 рази порівняно з віддаленим реєстром, а політики сканування блокують вразливі образи до деплою. За даними офіційної документації Harbor, застосування GC скорочує витрати на зберігання до 50%.

Що входить в роботу

В рамках впровадження Harbor під ключ ми надаємо (маємо 7-річний досвід, реалізовано понад 50 проектів):

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

Терміни

Базовий Harbor з TLS, LDAP, Trivy та одним S3-бекендом — 2-3 дні з урахуванням тестування інтеграцій з CI та налаштування політик сканування. Якщо потрібна реплікація між інстансами або інтеграція з Kubernetes admission webhook для перевірки підписів — додайте день.

Зв'яжіться з нами для оцінки вашого проекту. Замовте впровадження Harbor — отримайте надійний та безпечний реєстр образів. На ринку з 2017 року — довіряйте досвіду.

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

Останні роботи

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