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-notary
TIP
Для установки со службой Notary необходимо настроить Harbor на использование HTTPS.
Чтобы установить Harbor со службой репозитория ChartMuseum, добавьте параметр при запуске install.sh
:
./install.sh --with-chartmuseum
INFO
Чтобы использовать несколько служб, просто используйте одновременно несколько параметров.
Дождитесь окончания работы скрипта установки.
Запустите браузер и откройте страницу входа в 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, которое может отличаться от локального.