Создание многоквартирного реестра Docker с гаванью

В современном мире контейнеризации безопасное и эффективное управление несколькими изображениями Docker имеет решающее значение для организаций всех размеров. По мере того, как предприятия масштабируют развертывание своих контейнеров, первостепенное значение приобретает необходимость в надежном, безопасном и богатом функциями реестре контейнеров. Harbor, дипломированный проект CNCF с более чем 30 000 звезд GitHub, является наиболее широко распространенным облачным реестром контейнеров с открытым исходным кодом. Это всеобъемлющее руководство проведет вас через создание реестра Docker с Harbor, охватывающего все, от установки до передовых конфигураций безопасности.

Что такое гавань и почему ее выбирают?

Harbor - это реестр с открытым исходным кодом, который защищает артефакты с помощью политик и контроля доступа на основе ролей, гарантирует, что изображения сканируются и свободны от уязвимостей, а также подписывает изображения как надежные. Harbor расширяет распространение Docker с открытым исходным кодом, добавляя функции, обычно требуемые пользователями, такие как безопасность, идентификация и управление.

VMware с открытым исходным кодом Harbor в 2016 году присоединилась к CNCF в июле 2018 года, а в июне 2020 года она получила высшее образование, что делает ее первым реестром с открытым исходным кодом, достигшим статуса CNCF. Эта веха отражает как зрелость, так и силу поддержки сообщества.

Основные особенности, которые отличают Харбор

Harbor отличается от основных реестров Docker и даже коммерческих альтернатив несколькими возможностями корпоративного уровня:

Когда выбрать гавань вместо альтернативы

Организации управляют Harbor, когда им нужен частный реестр контейнеров с элементами управления безопасностью, которые размещают реестры, которые взимают плату за или просто не предлагают, с средами с воздушным движением, регулируемыми отраслями и многооблачными настройками, являющимися типичными вариантами использования.

По сравнению с Docker Hub, Harbor предлагает встроенное сканирование уязвимостей, подписание изображений, RBAC, регистрацию аудита и репликацию нескольких реестров — функции, которые требуют платных планов Docker Hub или недоступны. Для организаций с требованиями к резидентности данных, мандатами соответствия или необходимостью в неограниченных частных хранилищах Harbor предоставляет убедительную самостоятельную альтернативу.

Понимание архитектуры многоквартирной аренды Harbor

Прежде чем погрузиться в установку, важно понять, как Harbor реализует многопользовательскую архитектуру и как она поддерживает организационную изоляцию и безопасность.

Проекты как границы арендатора

Артефакты в Харборе принадлежат проекту, и эта группировка позволяет настраивать настройки и разрешения для наборов артефактов, а не на чисто глобальный уровень.Проекты служат фундаментальной единицей мультитенанса в Харборе, действуя как изолированные пространства имен, которые разделяют изображения контейнеров, диаграммы Хелма и другие артефакты OCI командой, отделом или клиентом.

Возможности многоквартирного использования Harbor включают проекты, действующие как пространства имен, которые изолируют модели по команде, среде или варианту использования, а также мелкозернистый RBAC для контроля того, кто может толкать, тянуть или управлять артефактами. Эта изоляция на основе проекта гарантирует, что разные арендаторы не могут получить доступ к артефактам друг друга без явного разрешения грантов.

Управление доступом на основе ролей (RBAC)

Пользователи получают доступ к различным репозиториям через «проекты», и пользователь может иметь разное разрешение на изображения или диаграммы Хелма в рамках проекта. Harbor реализует сложную систему RBAC с заранее определенными ролями, которые могут быть назначены на уровне проекта:

Эта гранулированная модель разрешения позволяет организациям реализовать принцип наименьших привилегий, гарантируя пользователям и автоматизированным системам доступ только к необходимым им ресурсам.

Аутентификация интеграции

В простейших случаях пользователи могут создаваться самой Harbor и управляться внутри, однако это не особенно хорошо масштабируется, поэтому Harbor также обеспечивает интеграцию с другими популярными сервисами, такими как OIDC, Active Directory и LDAP. Эта гибкость позволяет организациям использовать существующую инфраструктуру управления идентификацией, уменьшая административные накладные расходы и обеспечивая согласованную политику доступа в системах.

Предпосылки и системные требования

Перед установкой Harbor убедитесь, что ваша среда соответствует необходимым требованиям для готового к производству развертывания.

Требования к аппаратуре

Для развертывания производственной гавани, поддерживающей нескольких арендаторов, рассмотрите следующие минимальные характеристики:

Программные требования

Harbor требует следующих программных компонентов:

Сеть и конфигурация домена

Для развертывания производства вам понадобятся:

Установка гавани: шаг за шагом руководство

Гавань может быть установлена в любой среде Kubernetes или в системе с поддержкой Docker.Это руководство охватывает оба метода установки, начиная с подхода Docker Compose для простоты, за которым следует развертывание Kubernetes с использованием диаграмм Хелма.

Способ 1: Установка гавани с помощью Docker Compose

Docker Compose обеспечивает самый быстрый путь к запуску Harbor, что делает его идеальным для среды разработки и небольших развертываний.

Шаг 1: Установите Docker и Docker Compose

Во-первых, убедитесь, что Docker и Docker Compose установлены на вашей системе. На Ubuntu вы можете установить их со следующими командами:

# Update package index
sudo apt update

# Install prerequisites
sudo apt install -y ca-certificates curl gnupg lsb-release

# Add Docker's official GPG key
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# Set up Docker repository
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Install Docker Engine and Docker Compose
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# Start and enable Docker
sudo systemctl start docker
sudo systemctl enable docker

# Verify installation
docker --version
docker compose version

Шаг 2: Скачать Harbor

Скачать двоичные файлы Harbor release и следовать Installation & Configuration Guide для установки Harbor.Вы можете скачать последний релиз Harbor из официального репозитория GitHub:

# Download the latest Harbor release
cd /opt
curl -s https://api.github.com/repos/goharbor/harbor/releases/latest | grep browser_download_url | cut -d '"' -f 4 | grep '.tgz$' | wget -i -

# Extract the archive
tar xzvf harbor-offline-installer-*.tgz

# Navigate to Harbor directory
cd harbor

Шаг 3: Настройка гавани

Harbor использует файл конфигурации YAML, который должен быть настроен для вашей среды:

# Copy the template configuration file
cp harbor.yml.tmpl harbor.yml

# Edit the configuration file
nano harbor.yml

Ключевые параметры конфигурации для модификации:

# The hostname or IP address of your Harbor server
hostname: harbor.yourdomain.com

# HTTP configuration
http:
 port: 80

# HTTPS configuration (recommended for production)
https:
 port: 443
 certificate: /path/to/your/certificate.crt
 private_key: /path/to/your/private_key.key

# Harbor admin password (change this!)
harbor_admin_password: YourSecurePassword123!

# Database configuration
database:
 password: DatabasePassword123!
 max_idle_conns: 100
 max_open_conns: 900

# Data storage location
data_volume: /data

# Log configuration
log:
 level: info
 local:
 rotate_count: 50
 rotate_size: 200M
 location: /var/log/harbor

Шаг 4: Создание SSL-сертификатов (необязательно, но рекомендуется)

Для развертывания производства используйте сертификаты, подписанные CA. Для тестирования можно генерировать сертификаты, подписанные самим собой:

# Create certificate directory
mkdir -p /opt/harbor/certs
cd /opt/harbor/certs

# Generate private key
openssl genrsa -out harbor.key 4096

# Generate certificate signing request
openssl req -new -key harbor.key -out harbor.csr -subj "/C=US/ST=State/L=City/O=Organization/CN=harbor.yourdomain.com"

# Generate self-signed certificate (valid for 365 days)
openssl x509 -req -days 365 -in harbor.csr -signkey harbor.key -out harbor.crt

# Update harbor.yml with certificate paths
# certificate: /opt/harbor/certs/harbor.crt
# private_key: /opt/harbor/certs/harbor.key

Шаг 5: Установите гавань с помощью Trivy Scanner

Trivy - сканер по умолчанию, начиная с Harbor v2.2. Для установки Harbor с включенным сканером уязвимостей Trivy:

# Run the installation script with Trivy
sudo ./install.sh --with-trivy

# Verify all containers are running
docker compose ps

Вы должны увидеть результаты, показывающие все работающие службы гавани, включая ядро гавани, порт порта, гавань-db, реестр, триви-адаптер и другие.

Шаг 6: Доступ к веб-интерфейсу Harbor

После завершения установки вы сможете получить доступ к пользовательскому интерфейсу Harbor в своем веб-браузере по адресу https://harbor.yourdomain.com и войти в систему с пользователем администратора и установленным вами паролем.

Способ 2: Установка гавани на Кубернетах с рулем

Если вы хотите развернуть Harbor на Kubernetes, используйте диаграмму Harbor.Развертывание Kubernetes обеспечивает лучшую масштабируемость, высокую доступность и интеграцию с облачными экосистемами.

Шаг 1: Добавьте репозиторий шлема гавани

# Add Harbor Helm repository
helm repo add harbor https://helm.goharbor.io

# Update Helm repositories
helm repo update

# Create namespace for Harbor
kubectl create namespace harbor

Шаг 2: Создайте файл ценностей руля

Создайте пользовательский файл значений для настройки развертывания Harbor:

cat > harbor-values.yaml <<EOF
expose:
 type: ingress
 tls:
 enabled: true
 certSource: secret
 secret:
 secretName: harbor-tls
 ingress:
 hosts:
 core: harbor.yourdomain.com
 className: nginx
 annotations:
 cert-manager.io/cluster-issuer: "letsencrypt-prod"

externalURL: https://harbor.yourdomain.com

persistence:
 enabled: true
 resourcePolicy: "keep"
 persistentVolumeClaim:
 registry:
 storageClass: "fast-ssd"
 size: 500Gi
 database:
 storageClass: "fast-ssd"
 size: 10Gi
 redis:
 storageClass: "fast-ssd"
 size: 1Gi

harborAdminPassword: "ChangeThisPassword123!"

database:
 type: internal

redis:
 type: internal

trivy:
 enabled: true

notary:
 enabled: true
EOF

Шаг 3: Установите гавань через Хелм

# Install Harbor
helm install harbor harbor/harbor
 -n harbor
 -f harbor-values.yaml

# Wait for all components to be ready
kubectl wait --for=condition=available --timeout=600s
 deployment --all -n harbor

# Check pod status
kubectl get pods -n harbor

# Get Harbor admin password
kubectl get secret harbor-core -n harbor -o jsonpath='{.data.HARBOR_ADMIN_PASSWORD}' | base64 -d

Многоквартирный дом в Харборе

С установленным Harbor следующим шагом является настройка многопользовательской аренды для поддержки нескольких команд, отделов или клиентов в вашей организации.

Создание проектов для арендаторов

Вы можете создавать несколько проектов в Харборе, чтобы отделить артефакты, хранящиеся различными командами или подорганизациями в рамках предприятия.Проекты могут создаваться через веб-интерфейс Харбора или программно через API.

Создание проектов через веб-интерфейс

Для создания проекта через портал Harbor:

  1. Войдите в Харбор в качестве администратора
  2. Нажмите на «Проекты» в левом меню навигации
  3. Нажмите кнопку «Новый проект»
  4. Настройка параметров проекта:
    • Имя проекта: Используйте описательное имя (например, «команда-фронтенд», «клиент-акме»)
    • Уровень доступа: Выберите «Общественный» (любой может потянуть) или «Частный» (требует аутентификации)
    • Хранение Quota: Установите лимит, чтобы предотвратить потребление чрезмерного хранения любым единственным арендатором.
    • Прокси-кэш: Опционально настроить проект как прокси-кэш для внешних реестров
  5. Нажмите «ОК» для создания проекта

Создание проектов с помощью API

Для автоматизированного создания проекта или массовых операций используйте API Harbor REST:

# Set Harbor credentials
HARBOR_URL="https://harbor.yourdomain.com"
HARBOR_USER="admin"
HARBOR_PASSWORD="YourSecurePassword123!"

# Create multiple projects
for project in team-frontend team-backend team-ml customer-alpha customer-beta; do
 curl -X POST "${HARBOR_URL}/api/v2.0/projects"
 -H "Content-Type: application/json"
 -u "${HARBOR_USER}:${HARBOR_PASSWORD}"
 -d "{
 "project_name": "${project}",
 "public": false,
 "storage_limit": 107374182400
 }"
 echo "Created project: $project"
done

# List all projects
curl -X GET "${HARBOR_URL}/api/v2.0/projects"
 -u "${HARBOR_USER}:${HARBOR_PASSWORD}" | jq .

Конфигурирование настроек уровня проекта

Каждый проект в Харборе может быть настроен независимо с настройками, которые обеспечивают соблюдение политики безопасности и ограничения ресурсов.

Хранение квот

Квоты на хранение не позволяют отдельным арендаторам потреблять избыточное дисковое пространство:

  1. Навигация по проекту
  2. Нажмите на вкладку «Конфигурация»
  3. В разделе «Управление ресурсами» установите квоту хранения (например, 100 ГБ).
  4. Нажмите «Сохранить»

Политика сканирования уязвимостей

Настройка автоматического сканирования уязвимостей для изображений, выдвигаемых в проект:

  1. Перейти к проекту «Конфигурация»
  2. Включите «Автоматически сканировать изображения нажатием»
  3. Настройка «Предотвратить запуск уязвимых изображений» для блокировки изображений с критическими уязвимостями
  4. Настройка порога серьезности (например, блокировка изображений с «высокими» или «критическими» уязвимостями)

Tag политика удержания

Политика хранения автоматически очищает старые или неиспользованные изображения для эффективного управления хранением:

  1. Навигация для проекта вкладка «Политика»
  2. Нажмите «Добавить правило» в разделе Сохранение тегов
  3. Настройка критериев удержания:
    • Структура соответствия репозиторий (например, «**» для всех репозиториев)
    • Правило удержания (например, «сохранить последние 10 артефактов»)
    • Тег соответствия шаблон (например, исключить "последние" и "производственные" теги)
  4. Нажмите «Добавить», а затем «Беги сейчас» для проверки политики.

Доверие к контенту и подпись изображений

Позволяет довериться контенту, чтобы гарантировать, что только подписанные изображения могут быть удалены:

  1. В проекте «Конфигурация» включить «Включить доверие к контенту»
  2. Для этого необходимо подписать изображения с помощью Docker Content Trust или Cosign.
  3. Неподписанные изображения будут отклонены, когда пользователи попытаются их вытащить.

Управление доступом и разрешениями пользователей

Эффективное мульти-аренда требует тщательного управления доступом пользователей и разрешениями, чтобы арендаторы могли получить доступ только к назначенным им ресурсам.

Стратегии управления пользователями

Harbor поддерживает несколько серверов аутентификации, что позволяет выбрать подход, который наилучшим образом соответствует инфраструктуре управления идентификацией вашей организации.

Местное управление пользователями

Для небольших развертываний или тестирования вы можете создавать пользователей непосредственно в Харборе:

  1. Войти как admin
  2. Перейти в «Администрация» → «Пользователи»
  3. Нажмите «Новый пользователь»
  4. Заполните данные пользователя (имя пользователя, электронная почта, полное имя, пароль)
  5. Нажмите «ОК»

LDAP/Active Directory Integration (Интеграция активных каталогов)

Для развертывания предприятия интегрируйте Harbor с существующими LDAP или Active Directory:

  1. Навигация в «Администрирование» → «Конфигурация» → «Аутентификация»
  2. Выберите «LDAP» в качестве режима аутентификации
  3. Настройка настроек LDAP:
    • URL LDAP: ldap://ldap.yourdomain.com:389
    • LDAP Поиск DN: cn=admin,dc=yourdomain,dc=com
    • LDAP Base DN: dc=yourdomain,dc=com
    • LDAP Фильтр: (объектный класс = человек)
    • LDAP UID:uid
    • LDAP Сфера: Поддержка
  4. Проверьте соединение
  5. Нажмите «Сохранить»

Интеграция IDC

Для современных поставщиков удостоверений личности, таких как Okta, Auth0 или Keycloak:

  1. В настройках «Аутентификация» выберите «OIDC»
  2. Настройка параметров OIDC:
    • Имя поставщика OIDC: Имя поставщика
    • OIDC Endpoint: https://your-idp.com
    • Идентификатор клиента OIDC: Ваш идентификатор клиента
    • OIDC Client Secret: Ваш клиентский секрет
    • OIDC Сфера: openid,profile,email
  3. Проверять и сохранять

Присвоение пользователям проектов

После аутентификации пользователей, назначьте их на проекты с соответствующими ролями:

  1. Навигация по проекту
  2. Нажмите на вкладку «Члены»
  3. Нажмите «Пользователь» или «Группа», чтобы добавить участников
  4. Поиск пользователя или группы
  5. Выберите подходящую роль:
    • Гость: Доступ только для чтения изображений
    • Разработчик: Может нажимать и тянуть изображения
    • Мейнлайнер: Может управлять участниками проекта и настраивать настройки
    • Административный директор проекта: Полный контроль над проектом
  6. Нажмите «ОК»

Роботы для интеграции CI/CD

Учетные записи роботов - это служебные учетные записи в Гавани с конкретными разрешениями, используемые для автоматизированных операций, таких как трубопроводы CI / CD, толкающие или вытягивающие изображения без необходимости использования учетных данных человека.

Для создания учетной записи робота:

  1. Навигация по проекту
  2. Нажмите вкладку «Учетные записи роботов»
  3. Нажмите «Новый счет робота»
  4. Настройка учетной записи робота:
    • Имя: Описательное имя (например, «ci-pipeline-bot»)
    • Время истечения срока действия: Установить дату истечения срока действия для обеспечения безопасности
    • Разрешения: Выберите конкретные репозитории и действия (нажмите, вытяните, удалите)
  5. Нажмите «ADD»
  6. Копировать сгенерированный токен немедленно (он не будет показан снова)

Используйте учетную запись робота в вашем конвейере CI / CD:

# In your CI/CD pipeline (e.g., GitLab CI, Jenkins)
docker login harbor.yourdomain.com -u 'robot$ci-pipeline-bot' -p 'TOKEN_HERE'
docker build -t harbor.yourdomain.com/team-frontend/app:${CI_COMMIT_SHA} .
docker push harbor.yourdomain.com/team-frontend/app:${CI_COMMIT_SHA}

Особенности безопасности для многопользовательских сред

Безопасность имеет первостепенное значение в многопользовательских средах, где несколько команд или клиентов имеют общую инфраструктуру. Harbor предоставляет комплексные функции безопасности для защиты вашей цепочки поставок контейнеров.

Сканирование уязвимостей

Используя популярные сканеры изображений, такие как Trivy, изображения могут автоматически сканироваться на наличие известных уязвимостей, а результаты этих сканирований могут быть использованы для предотвращения извлечения артефактов с нерешенными проблемами безопасности.

Настройка автоматического сканирования

Включите автоматическое сканирование на уровне системы или проекта:

  1. Для системного сканирования: «Администрация» → «Службы допроса» → Настройка настроек Trivy
  2. Для сканирования проектного уровня: Проект → «Конфигурация» → Включить «Автоматически сканировать изображения нажатием»
  3. Настройка запланированных сканирований для повторного сканирования существующих изображений на наличие вновь обнаруженных уязвимостей.

Политика предотвращения уязвимостей

Настройка политик для предотвращения развертывания уязвимых изображений:

  1. В проекте «Конфигурация» включить «Предотвращение уязвимых изображений от запуска»
  2. Установите порог тяжести (например, «высокий» или «критический»)
  3. Изображения с уязвимостями на этом пороге или выше этого порога не могут быть удалены.

Просмотр результатов сканирования

Для просмотра результатов сканирования уязвимостей:

  1. Навигация по проекту и репозиторию
  2. Нажмите на артефакт / тег
  3. Просмотр вкладки «Уязвимости» для подробных результатов сканирования
  4. Обзор деталей CVE, уровней тяжести и доступных исправлений

Подписание изображений и доверие к контенту

Harbor поддерживает подписание изображений контейнеров с помощью Docker Content Trust (leveraging Notary) для обеспечения подлинности и происхождения, а также могут быть активированы политики, которые предотвращают развертывание неподписанных изображений.

Создание доверия к контенту

Чтобы обеспечить доверие к контенту для проекта:

  1. Навигация по проекту «Конфигурация»
  2. Включить «Включить доверие к контенту»
  3. Включить "Предотвращение неподписанных изображений от выдергивания"

Подписание изображений с помощью Docker Content Trust

# Enable Docker Content Trust
export DOCKER_CONTENT_TRUST=1
export DOCKER_CONTENT_TRUST_SERVER=https://harbor.yourdomain.com:4443

# Push and sign an image
docker push harbor.yourdomain.com/team-frontend/app:v1.0

# The first push will prompt you to create signing keys
# Follow the prompts to set passphrases for root and repository keys

Подпись с Cosign

Для современных рабочих процессов подписания используйте Cosign:

# Install Cosign
curl -O -L "https://github.com/sigstore/cosign/releases/latest/download/cosign-linux-amd64"
sudo mv cosign-linux-amd64 /usr/local/bin/cosign
sudo chmod +x /usr/local/bin/cosign

# Generate key pair
cosign generate-key-pair

# Sign an image
cosign sign --key cosign.key harbor.yourdomain.com/team-frontend/app:v1.0

# Verify signature
cosign verify --key cosign.pub harbor.yourdomain.com/team-frontend/app:v1.0

Аудит и соблюдение

Все операции в хранилищах отслеживаются через журналы. Harbor ведет всеобъемлющие журналы аудита, которые отслеживают все действия пользователей, что облегчает соблюдение требований соответствия и расследование инцидентов безопасности.

Просмотр журналов аудита

  1. Перейти в «Администрация» → «Логс»
  2. Фильтровые журналы:
    • Имя пользователя
    • Тип операции (толкать, тянуть, удалять, создавать и т. Д.)
    • Тип ресурса (проект, репозиторий, артефакт)
    • Время
  3. Экспортные журналы для внешнего анализа или архивирования

Интеграция с системами SIEM

Для соответствия требованиям предприятия, интегрируйте журналы Harbor с вашей системой SIEM:

# Configure Harbor to send logs to syslog
# Edit harbor.yml
log:
 level: info
 external_endpoint:
 protocol: tcp
 host: syslog.yourdomain.com
 port: 514

# Restart Harbor to apply changes
docker compose down
docker compose up -d

Сетевая безопасность и контроль доступа

Настройка HTTPS

Всегда используйте HTTPS в производстве для шифрования данных в пути:

  1. Получите сертификаты SSL / TLS от доверенного CA (Let's Encrypt, DigiCert и т. Д.)
  2. Настройка harbor.yml с сертификатами
  3. Перезагрузить гавань

Конфигурация Firewall

Ограничьте доступ к Харбору с помощью правил брандмауэра:

# Allow HTTPS traffic
sudo ufw allow 443/tcp

# Allow HTTP (if needed for redirect)
sudo ufw allow 80/tcp

# Allow Notary (if using Docker Content Trust)
sudo ufw allow 4443/tcp

# Restrict access to specific IP ranges (optional)
sudo ufw allow from 10.0.0.0/8 to any port 443 proto tcp

# Enable firewall
sudo ufw enable

Репликация изображений для многосайтовых развертываний

Изображения и диаграммы могут быть воспроизведены (синхронизированы) между несколькими экземплярами реестра на основе политик с использованием фильтров (репозиторий, тег и метка), и Harbor автоматически перезаписывает репликацию, если она сталкивается с какими-либо ошибками, которые могут быть использованы для содействия балансировке нагрузки, достижения высокой доступности и облегчения развертывания мульти-центров данных в гибридных и многооблачных сценариях.

Настройка конечных точек репликации

Цели репликации включают другие экземпляры Harbor, Docker Hub, AWS ECR, Google GCR/GAR, Azure ACR и любой реестр, соответствующий OCI.

Для настройки конечной точки репликации:

  1. Перейти в «Администрация» → «Реестр»
  2. Нажмите «Новый конец»
  3. Конфигурируйте детали конечных точек:
    • Провайдер: Выберите тип реестра (Harbor, Docker Hub, AWS ECR и т.д.)
    • Имя: Описательное название конечной точки
    • Конечный URL: Регистрационный URL
    • Доступ к ID/секрету: Удостоверения подлинности
  4. Проверьте соединение
  5. Нажмите «ОК»

Создание правил репликации

Определите политику репликации для автоматической синхронизации изображений:

  1. Перейдите в «Администрирование» → «Репликации»
  2. Нажмите «Новое правило регистрации»
  3. Настройте правило:
    • Имя: Описательное название правила
    • Режим репликации: Нажмите (на удаленный) или Вытяните (на удаленный)
    • Исходный реестр: Выберите источник
    • Реестр определения: Выберите конечную точку цели
    • Режим триггера: Руководящий, запланированный или основанный на событиях
    • Фильтры: Укажите, какие репозитории, теги или метки реплицировать
  4. Нажмите «Сохранить»

Используйте случаи для репликации

Работа с гаванью: практические рабочие процессы

После того, как Harbor настроен для многопользовательской аренды, команды могут начать использовать его для своих рабочих процессов с контейнерами.

Подталкивающие изображения в гавань

Чтобы отправить изображение в Харбор:

# Log in to Harbor
docker login harbor.yourdomain.com

# Tag your image with Harbor registry path
docker tag myapp:latest harbor.yourdomain.com/team-frontend/myapp:v1.0

# Push the image
docker push harbor.yourdomain.com/team-frontend/myapp:v1.0

Изображения из Harbor

# Log in to Harbor (if pulling private images)
docker login harbor.yourdomain.com

# Pull the image
docker pull harbor.yourdomain.com/team-frontend/myapp:v1.0

# Run the container
docker run -d harbor.yourdomain.com/team-frontend/myapp:v1.0

Использование гавани с Kubernetes

Чтобы извлечь изображения из гавани в Кубернеце, создайте секрет извлечения изображения:

# Create a Docker registry secret
kubectl create secret docker-registry harbor-registry
 --docker-server=harbor.yourdomain.com
 --docker-username=your-username
 --docker-password=your-password
 [email protected]
 -n your-namespace

# Reference the secret in your pod spec
apiVersion: v1
kind: Pod
metadata:
 name: myapp
spec:
 containers:
 - name: myapp
 image: harbor.yourdomain.com/team-frontend/myapp:v1.0
 imagePullSecrets:
 - name: harbor-registry

Прокси-кэш для внешних реестров

Функция прокси-кэша Harbor позволяет Harbor действовать как прокси-кэш для внешних реестров, уменьшая использование полосы пропускания и улучшая производительность тяги.

Для настройки прокси-кеша проекта:

  1. Создать новый проект
  2. Выберите «Прокси-кэш» в качестве типа проекта
  3. Выберите целевой реестр (Docker Hub, Quay.io и т.д.)
  4. Конфигурировать учетные данные, если это необходимо
  5. Проведите изображения через Harbor с помощью пути прокси-кэша
# Instead of pulling from Docker Hub directly
docker pull nginx:latest

# Pull through Harbor proxy cache
docker pull harbor.yourdomain.com/dockerhub-proxy/library/nginx:latest

Резервное копирование и аварийное восстановление

Защита вашего порта и его данных имеет решающее значение для непрерывности бизнеса.

Обновление данных Harbor

Harbor использует базу данных для хранения своих данных, и по умолчанию она использует базу данных PostgreSQL, которая управляется Docker.

Чтобы поддержать Харбор:

# Stop Harbor
cd /opt/harbor
docker compose down

# Backup the data directory
sudo tar -czf harbor-backup-$(date +%Y%m%d).tar.gz /data

# Backup the configuration
sudo cp harbor.yml harbor.yml.backup

# Backup the database (if using external database)
docker exec harbor-db pg_dump -U postgres registry > harbor-db-backup-$(date +%Y%m%d).sql

# Restart Harbor
docker compose up -d

Автоматический сценарий резервного копирования

#!/bin/bash
# harbor-backup.sh

BACKUP_DIR="/backup/harbor"
DATE=$(date +%Y%m%d-%H%M%S)
HARBOR_DIR="/opt/harbor"
DATA_DIR="/data"

# Create backup directory
mkdir -p $BACKUP_DIR

# Stop Harbor
cd $HARBOR_DIR
docker compose down

# Backup data volume
tar -czf $BACKUP_DIR/harbor-data-$DATE.tar.gz $DATA_DIR

# Backup configuration
cp $HARBOR_DIR/harbor.yml $BACKUP_DIR/harbor-config-$DATE.yml

# Restart Harbor
docker compose up -d

# Remove backups older than 30 days
find $BACKUP_DIR -name "harbor-*" -mtime +30 -delete

echo "Backup completed: $BACKUP_DIR/harbor-data-$DATE.tar.gz"

Запланируйте этот сценарий с помощью cron:

# Run backup daily at 2 AM
0 2 * * * /usr/local/bin/harbor-backup.sh >> /var/log/harbor-backup.log 2>&1

Восстановление из резервного копирования

# Stop Harbor
cd /opt/harbor
docker compose down

# Restore data directory
sudo rm -rf /data
sudo tar -xzf /backup/harbor/harbor-data-20260402.tar.gz -C /

# Restore configuration
sudo cp /backup/harbor/harbor-config-20260402.yml /opt/harbor/harbor.yml

# Restart Harbor
docker compose up -d

Мониторинг и оптимизация производительности

Мониторинг состояния здоровья и производительности Harbor обеспечивает оптимальную работу и помогает выявить проблемы, прежде чем они повлияют на пользователей.

Мониторинг состояния здоровья гавани

В гавани выставлены конечные точки проверки здоровья:

# Check Harbor health
curl -k https://harbor.yourdomain.com/api/v2.0/health

# Expected response
{
 "status": "healthy",
 "components": [
 {"name": "core", "status": "healthy"},
 {"name": "database", "status": "healthy"},
 {"name": "redis", "status": "healthy"},
 {"name": "registry", "status": "healthy"}
 ]
}

Метрики Прометея

Harbor раскрывает метрики Прометея для мониторинга:

# Enable metrics in harbor.yml
metric:
 enabled: true
 port: 9090
 path: /metrics

# Scrape metrics with Prometheus
curl http://harbor.yourdomain.com:9090/metrics

Советы по оптимизации производительности

Коллекция Garbage

Сбор мусора - это процесс восстановления пространства для хранения путем удаления нессылочных капель и артефактов, которые больше не нужны.

Для сбора мусора:

  1. Перейти в «Администрация» → «Сбор мусора»
  2. Нажмите «GC NOW» для немедленной коллекции
  3. Или планировать регулярный сбор мусора (например, еженедельно в 2 часа ночи)

Устранение общих проблем

Не могу нажимать изображения

Симптомы: «отказано: запрошенный доступ к ресурсу отказано» ошибка

Решения:

Ошибки SSL-сертификата

Симптомы: Ошибка «x509: сертификат, подписанный неизвестным органом»

Решения:

Медленный Push/Pull

Симптомы: Операции с изображением занимают чрезмерное время

Решения:

Проблемы подключения базы данных

Симптомы: Портовый интерфейс показывает ошибки или не загружается

Решения:

Расширенные сценарии многоквартирного жилья

Распределение контейнеров клиентоориентированных

Harbor может использоваться для распространения контейнерного программного обеспечения для внешних клиентов:

Многорегиональное развертывание

Для глобальных организаций разверните порт в нескольких регионах:

Соблюдение и нормативные требования

Для регулируемых отраслей (здравоохранение, финансы, правительство):

Лучшие практики для многоквартирных портовых развертываний

Лучшие практики безопасности

Оперативные лучшие практики

Организационные лучшие практики

Интеграция гавани с экосистемой DevOps

CI/CD интеграция трубопроводов

Пример трубопровода GitLab CI:

stages:
 - build
 - scan
 - deploy

variables:
 HARBOR_REGISTRY: harbor.yourdomain.com
 HARBOR_PROJECT: team-frontend
 IMAGE_NAME: myapp

build:
 stage: build
 script:
 - docker login -u robot$ci-bot -p $HARBOR_TOKEN $HARBOR_REGISTRY
 - docker build -t $HARBOR_REGISTRY/$HARBOR_PROJECT/$IMAGE_NAME:$CI_COMMIT_SHA .
 - docker push $HARBOR_REGISTRY/$HARBOR_PROJECT/$IMAGE_NAME:$CI_COMMIT_SHA

scan:
 stage: scan
 script:
 - |
 # Wait for Harbor to scan the image
 sleep 30
 # Check scan results via Harbor API
 SCAN_STATUS=$(curl -u robot$ci-bot:$HARBOR_TOKEN
 "$HARBOR_REGISTRY/api/v2.0/projects/$HARBOR_PROJECT/repositories/$IMAGE_NAME/artifacts/$CI_COMMIT_SHA"
 | jq -r '.scan_overview.scan_status')
 if [ "$SCAN_STATUS" != "Success" ]; then
 echo "Vulnerability scan failed"
 exit 1
 fi

deploy:
 stage: deploy
 script:
 - kubectl set image deployment/myapp myapp=$HARBOR_REGISTRY/$HARBOR_PROJECT/$IMAGE_NAME:$CI_COMMIT_SHA
 only:
 - main

Интеграция Web-cook

Настройте веб-хуки, чтобы активировать действия при нажатии изображений:

  1. Навигация для проекта «Webhooks»
  2. Нажмите «Новый сайт»
  3. Настройка webhook:
    • Конечный URL: Ваш URL-адрес получателя webhook
    • События: Выберите события для запуска (нажмите, вытяните, удалите, сканирование завершено)
    • Аутентификация: Конфигурация аутентификации при необходимости
  4. Тестировать webhook
  5. Кликните «Континуум»

Репозиторий Helm Chart

Harbor также может служить хранилищем диаграмм Хелма:

# Add Harbor as Helm repository
helm repo add myteam https://harbor.yourdomain.com/chartrepo/team-frontend
 --username your-username
 --password your-password

# Push a Helm chart to Harbor
helm package ./mychart
helm push mychart-1.0.0.tgz myteam

# Install from Harbor
helm install myapp myteam/mychart

Будущее - доказательство вашего развертывания гавани

Оставаться в курсе обновлений

Начиная с версии v2.15.0, артефакты Harbor Release криптографически подписаны с использованием Cosign для обеспечения подлинности и целостности. Всегда проверяйте релизы Harbor перед обновлением:

# Download Harbor release and signature
wget https://github.com/goharbor/harbor/releases/download/v2.15.0/harbor-offline-installer-v2.15.0.tgz
wget https://github.com/goharbor/harbor/releases/download/v2.15.0/harbor-offline-installer-v2.15.0.tgz.sigstore.json

# Verify signature
cosign verify-blob
 --bundle harbor-offline-installer-v2.15.0.tgz.sigstore.json
 --certificate-oidc-issuer https://token.actions.githubusercontent.com
 --certificate-identity-regexp '^https://github.com/goharbor/harbor/.github/workflows/publish_release.yml@refs/tags/v.*$'
 harbor-offline-installer-v2.15.0.tgz

Масштабируемые соображения

По мере роста вашей организации, подумайте:

Новые случаи использования

Harbor всегда был OCI-совместим, то есть он может хранить и распространять любой артефакт, который соответствует спецификации распределения OCI, а расширяемость спецификации OCI означает, что модели ИИ теперь могут использовать ту же инфраструктуру с той же безопасностью, управлением и оперативной зрелостью.

Заключение

Создание многопользовательского реестра Docker с Harbor предоставляет организациям мощное, безопасное и масштабируемое решение для управления изображениями контейнеров между командами, отделами и даже клиентами. Harbor устраняет разрыв в качестве реестра контейнеров с открытым исходным кодом корпоративного уровня, который обеспечивает безопасность, производительность и суверенитет для управления изображениями контейнеров, плавно интегрируясь с существующими операционными парадигмами и обеспечивая надежное решение для современных потребностей управления изображениями контейнеров.

Реализуя методы, изложенные в этом руководстве, - от правильной установки и конфигурации до закалки безопасности, многопользовательской установки и лучших практик эксплуатации - вы можете создать готовое к производству развертывание Harbor, которое удовлетворяет потребности вашей организации сегодня, оставаясь достаточно гибким, чтобы адаптироваться к будущим требованиям.

Ключевые выводы для успешной многоквартирной аренды Harbor:

Независимо от того, управляете ли вы контейнерами для небольшой команды разработчиков или управляете крупномасштабной многопользовательской платформой, обслуживающей сотни клиентов, Harbor предоставляет функции, гибкость и поддержку сообщества, необходимые для успеха.Начните с основ, внедряйте лучшие практики безопасности и постепенно внедряйте расширенные функции по мере развития ваших потребностей.

Для получения дополнительной информации и ресурсов посетите официальный веб-сайт Harbor , изучите репозиторий GitHub , присоединитесь к сообществу на Slack и проконсультируйтесь с всеобъемлющей документацией Harbor .