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
- Встановіть Harbor через Helm з підтримкою Trivy (
helm install harbor harbor/harbor --set trivy.enabled=true). - В UI перейдіть Administration → Interrogation Services.
- Додайте адаптер Trivy з endpoint
http://trivy-adapter:8080. - В проекті включіть політику сканування при push.
- Налаштуйте поріг severity: наприклад, блокувати образи з CRITICAL вразливостями.
- Протестуйте: запуште образ з відомою вразливістю — пайплайн повинен впасти.
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 року — довіряйте досвіду.







