Harbor

Harbor — это бесплатный реестр для хранения Docker и Podman образов c открытым исходным кодом, который предоставляет доступ к образам с помощью политик, а также умеет сканировать образы на наличие уязвимостей.
Он состоит из набора взаимосвязанных контейнеров.
Жёстко читаем документацию - там информации кот наплакал.
Установка
Шаг 1. Установка docker и docker-compose
Установите Docker и Docker Compose.
Шаг 2. Скачивание архива офлайн установщика
На сервере перейдите на страницу релизов Harbor и скачайте архив harbor-offline-installer-vX.Y.Z.tgz, или в терминале выполните следующую команду:
wget https://github.com/goharbor/harbor/releases/download/vX.Y.Z/harbor-offline-installer-vX.Y.Z.tgzВ место vX.Y.Z необходимо подставить версию, например v2.13.2.
Распакуйте архив на сервере, где будет производиться установка и скопируйте конфигурационный файл по умолчанию harbor.yml.tmpl в harbor.yml. Для этого выполните команду:
tar xzvf harbor-offline-installer-vX.Y.Z.tgz
cd harbor
cp harbor.yml.tmpl harbor.ymlШаг 3. Заполнение конфигурационного файла harbor.yml
Заполните переменные в файле harbor.yml.
Для этого зададим в параметре hostname домен FQDN или ip адрес, по которому будет доступен реестр, например, зададим доменное имя registry.example.com.
Определите протоколы, по которым будет доступен репозиторий.
Если реестр должен быть доступен только по протоколу http, закомментируйте параметры секции https и в параметре trivy.insecure выставьте значение true.
Номера портов для параметров http.port и https.port:
- 80 для HTTP;
- 443 для HTTPS.
Укажите путь до файла открытого сертификата в параметре https.certificate и в https.private_key укажите путь до файла закрытого ключа.
Задайте пароль для пользователя admin в параметре harbor_admin_password. При необходимости в параметре data_volume измените путь до каталога, где будут храниться образы.
Настройте остальные параметры согласно вашей политике безопасности и предполагаемой нагрузке.
S3 Хранилище
Если вы планируете использовать хранилище S3, в данном случае, MinIO, добавьте следующие строки в файл harbor.yml:
storage_service:
s3:
region: us-east-1
bucket: testbucket
accesskey: MINIO_ROOT_USER
secretkey: MINIO_ROOT_PASSWORD
secure: false
regionendpoint: http://minio1.example.com:9000
v4auth: true
chunksize: 5242880
rootdirectory: /
encrypt: falseРегион
ru-central-1работать не будет. Как я понял, отрабатывают ТОЛЬКО стандартные AWS регионы. Иначе вот такая ошибка:Вот эта ошибка происходит если использовать
endpoint, а неregionendpoint(можно указывать и IP в качестве URL, главное протокол и порт не забудьте):
Если у Вас кластер - он должен быть за балансировщиком, или, если по простому, указать только одну ноду, иначе не работает - синтаксис не позволяет указать несколько нод.
Кажется, эта ошибка вознокает, если аналогичный Image уже лежит в проекте (в смысле, один образ с разными тегами):

P.S. Чисто чтобы понимали - это единственная более-менее официальная документация по настройки связки Harbor-MinIO
Шаг 4. Установка Harbor
Установите Harbor, выполнив следующую команду:
./install.shЕсли вы хотите подключить сканер уязвимостей Trivy, добавьте параметр при запуске install.sh:
./install.sh --with-trivyЧтобы установить Harbor со службой Notary, добавьте параметр при запуске install.sh:
./install.sh --with-notaryTIP
Для установки со службой Notary необходимо настроить Harbor на использование HTTPS.
Чтобы установить Harbor со службой репозитория ChartMuseum, добавьте параметр при запуске install.sh:
./install.sh --with-chartmuseumINFO
Чтобы использовать несколько служб, просто используйте одновременно несколько параметров.
Дождитесь окончания работы скрипта установки.
Запустите браузер и откройте страницу входа в Harbor по адресу http://hostname или https://hostname. Параметр hostname указывали при заполнении в файле конфигурации harbor.ym на шаге заполнение конфигурационного файла.
В данном примере адрес страницы входа в Harbor — https://registry.example.com.
Войдите в систему с именем пользователя admin и паролем, установленным в файле harbor.yml в параметре harbor_admin_password.
Откроется окно проектов в Harbor.
Установка приватного реестра Harbor закончена.
Пушим Docker образ в Harbor
Прежде чем вы сможете пушить образ в Harbor, вы должны создать соответствующий проект в интерфейсе Harbor. По умолчанию уже существует проект library
Необходимо залогиниться в Harbor:
docker login <harbor_address>Затем введите свое имя пользователя и пароль, когда вас попросят.
Если видите ошибку: Error response from daemon: Get https://myregistrydomain.com/v1/users/: dial tcp myregistrydomain.com:443 getsockopt: connection refused., тогда обратитесь к гайду.
Создаем тэг.
docker tag <image_name>:<tag> <harbor_address>/<project_name>/<image_name>:<tag>Пушим образ.
docker push <harbor_address>/<project_name>/<image_name>:<tag>Пушим Podman образ в Harbor
Прежде чем вы сможете пушить образ в Harbor, вы должны создать соответствующий проект в интерфейсе Harbor. По умолчанию уже существует проект library
Используйте команду podman login с URL Harbor и именем_пользователя/паролем. Например:
podman login your-harbor-domain.comЗатем введите свое имя пользователя и пароль, когда вас попросят.
Используйте команду podman push с полным именем образа, которое включает URL Harbor, имя проекта и имя образа. Например:
podman push my-image:latest your-harbor-domain.com/my-project/my-image:latestВ этом примере:
- my-image:latest - это локальный образ, который вы хотите отправить.
- your-harbor-domain.com - это URL вашего Harbor.
- my-project - это имя проекта в Harbor.
- my-image:latest - это имя образа в Harbor, которое может отличаться от локального.
