Создание многоквартирного реестра Docker с гаванью
В современном мире контейнеризации безопасное и эффективное управление несколькими изображениями Docker имеет решающее значение для организаций всех размеров. По мере того, как предприятия масштабируют развертывание своих контейнеров, первостепенное значение приобретает необходимость в надежном, безопасном и богатом функциями реестре контейнеров. Harbor, дипломированный проект CNCF с более чем 30 000 звезд GitHub, является наиболее широко распространенным облачным реестром контейнеров с открытым исходным кодом. Это всеобъемлющее руководство проведет вас через создание реестра Docker с Harbor, охватывающего все, от установки до передовых конфигураций безопасности.
Что такое гавань и почему ее выбирают?
Harbor - это реестр с открытым исходным кодом, который защищает артефакты с помощью политик и контроля доступа на основе ролей, гарантирует, что изображения сканируются и свободны от уязвимостей, а также подписывает изображения как надежные. Harbor расширяет распространение Docker с открытым исходным кодом, добавляя функции, обычно требуемые пользователями, такие как безопасность, идентификация и управление.
VMware с открытым исходным кодом Harbor в 2016 году присоединилась к CNCF в июле 2018 года, а в июне 2020 года она получила высшее образование, что делает ее первым реестром с открытым исходным кодом, достигшим статуса CNCF. Эта веха отражает как зрелость, так и силу поддержки сообщества.
Основные особенности, которые отличают Харбор
Harbor отличается от основных реестров Docker и даже коммерческих альтернатив несколькими возможностями корпоративного уровня:
- Многоквартирный бизнес через проекты: Гавань организует контент в проекты, причем каждый проект получает свои собственные политики RBAC, настройки сканирования, ограничения квот и правила хранения тегов.
- Башня встроенного сканирования уязвимостей: Харбор включает в себя политики сканирования на подталкивании с подключаемыми бэкэндами, включая Trivy, Clair и Anchore, которые блокируют уязвимые изображения перед развертыванием
- Доверие к подписи изображений и контенту: Гавань поддерживает подписание артефактов с Cosign и Notation для безопасности цепочки поставок, а также политики доверия к контенту, которые обеспечивают соблюдение только подписанных изображений.
- Многорегистрационная репликация: Гавань синхронизирует изображения в центрах обработки данных, облачных регионах или гибридных средах с фильтрами на основе политики на репозиториях, тегах и этикетках
- Комплексное управление доступом: Аутентификация подключается к LDAP, Active Directory, OIDC-провайдерам или встроенной базе данных
- Учетные записи роботов для автоматизации: Учетные записи роботов предоставляют CI/CD-проводам нечеловеческий доступ с ограниченными разрешениями и сроками истечения срока действия
- Полный аудит: Ревизионный журнал отслеживает, кто толкал, тянул, удалял или сканировал артефакты
Когда выбрать гавань вместо альтернативы
Организации управляют Harbor, когда им нужен частный реестр контейнеров с элементами управления безопасностью, которые размещают реестры, которые взимают плату за или просто не предлагают, с средами с воздушным движением, регулируемыми отраслями и многооблачными настройками, являющимися типичными вариантами использования.
По сравнению с Docker Hub, Harbor предлагает встроенное сканирование уязвимостей, подписание изображений, RBAC, регистрацию аудита и репликацию нескольких реестров — функции, которые требуют платных планов Docker Hub или недоступны. Для организаций с требованиями к резидентности данных, мандатами соответствия или необходимостью в неограниченных частных хранилищах Harbor предоставляет убедительную самостоятельную альтернативу.
Понимание архитектуры многоквартирной аренды Harbor
Прежде чем погрузиться в установку, важно понять, как Harbor реализует многопользовательскую архитектуру и как она поддерживает организационную изоляцию и безопасность.
Проекты как границы арендатора
Артефакты в Харборе принадлежат проекту, и эта группировка позволяет настраивать настройки и разрешения для наборов артефактов, а не на чисто глобальный уровень.Проекты служат фундаментальной единицей мультитенанса в Харборе, действуя как изолированные пространства имен, которые разделяют изображения контейнеров, диаграммы Хелма и другие артефакты OCI командой, отделом или клиентом.
Возможности многоквартирного использования Harbor включают проекты, действующие как пространства имен, которые изолируют модели по команде, среде или варианту использования, а также мелкозернистый RBAC для контроля того, кто может толкать, тянуть или управлять артефактами. Эта изоляция на основе проекта гарантирует, что разные арендаторы не могут получить доступ к артефактам друг друга без явного разрешения грантов.
Управление доступом на основе ролей (RBAC)
Пользователи получают доступ к различным репозиториям через «проекты», и пользователь может иметь разное разрешение на изображения или диаграммы Хелма в рамках проекта. Harbor реализует сложную систему RBAC с заранее определенными ролями, которые могут быть назначены на уровне проекта:
- Гость: Доступ к просмотру и извлечению артефактов только для чтения
- Разработчик: Разрешения на чтение и запись для нажатия и вытягивания изображений
- Майнтайнер: Может управлять участниками проекта и настраивать параметры проекта
- Администрирование проекта: Полный контроль над проектом, включая возможности настройки чтения-записи
Эта гранулированная модель разрешения позволяет организациям реализовать принцип наименьших привилегий, гарантируя пользователям и автоматизированным системам доступ только к необходимым им ресурсам.
Аутентификация интеграции
В простейших случаях пользователи могут создаваться самой Harbor и управляться внутри, однако это не особенно хорошо масштабируется, поэтому Harbor также обеспечивает интеграцию с другими популярными сервисами, такими как OIDC, Active Directory и LDAP. Эта гибкость позволяет организациям использовать существующую инфраструктуру управления идентификацией, уменьшая административные накладные расходы и обеспечивая согласованную политику доступа в системах.
Предпосылки и системные требования
Перед установкой Harbor убедитесь, что ваша среда соответствует необходимым требованиям для готового к производству развертывания.
Требования к аппаратуре
Для развертывания производственной гавани, поддерживающей нескольких арендаторов, рассмотрите следующие минимальные характеристики:
- CPU: 4 ядра минимальные (8+ ядер рекомендуется для среды с высоким трафиком)
- Память: 8 ГБ ОЗУ минимум (рекомендуется 16+ ГБ)
- Хранение: Зависит от объема изображения; начните с 100 ГБ и планируйте рост
- Сеть: Стабильное сетевое соединение с достаточной пропускной способностью для операций нажатия/вытягивания изображения
Программные требования
Harbor требует следующих программных компонентов:
- Операционная система: Дистрибутив Linux (Ubuntu 20.04+, CentOS 7+, RHEL 7+ или аналогичный)
- Двигатель докера: Версия 20.10.0 или выше
- Docker Compose: Версия 1.29.0 или выше (для метода установки Docker Compose)
- Кубернеты: Версия 1.20+ (при развертывании через Helm)
- OpenSSL: Для создания SSL/TLS сертификатов
Сеть и конфигурация домена
Для развертывания производства вам понадобятся:
- Полностью квалифицированное доменное имя (FQDN), указывающее на ваш сервер Harbor
- SSL/TLS сертификаты (самоподписанные для тестирования, CA-подписанные для производства)
- Открытые порты брандмауэра: 80 (HTTP), 443 (HTTPS) и необязательно 4443 (Нотариус)
Установка гавани: шаг за шагом руководство
Гавань может быть установлена в любой среде 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:
- Войдите в Харбор в качестве администратора
- Нажмите на «Проекты» в левом меню навигации
- Нажмите кнопку «Новый проект»
- Настройка параметров проекта:
- Имя проекта: Используйте описательное имя (например, «команда-фронтенд», «клиент-акме»)
- Уровень доступа: Выберите «Общественный» (любой может потянуть) или «Частный» (требует аутентификации)
- Хранение Quota: Установите лимит, чтобы предотвратить потребление чрезмерного хранения любым единственным арендатором.
- Прокси-кэш: Опционально настроить проект как прокси-кэш для внешних реестров
- Нажмите «ОК» для создания проекта
Создание проектов с помощью 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 .
Конфигурирование настроек уровня проекта
Каждый проект в Харборе может быть настроен независимо с настройками, которые обеспечивают соблюдение политики безопасности и ограничения ресурсов.
Хранение квот
Квоты на хранение не позволяют отдельным арендаторам потреблять избыточное дисковое пространство:
- Навигация по проекту
- Нажмите на вкладку «Конфигурация»
- В разделе «Управление ресурсами» установите квоту хранения (например, 100 ГБ).
- Нажмите «Сохранить»
Политика сканирования уязвимостей
Настройка автоматического сканирования уязвимостей для изображений, выдвигаемых в проект:
- Перейти к проекту «Конфигурация»
- Включите «Автоматически сканировать изображения нажатием»
- Настройка «Предотвратить запуск уязвимых изображений» для блокировки изображений с критическими уязвимостями
- Настройка порога серьезности (например, блокировка изображений с «высокими» или «критическими» уязвимостями)
Tag политика удержания
Политика хранения автоматически очищает старые или неиспользованные изображения для эффективного управления хранением:
- Навигация для проекта вкладка «Политика»
- Нажмите «Добавить правило» в разделе Сохранение тегов
- Настройка критериев удержания:
- Структура соответствия репозиторий (например, «**» для всех репозиториев)
- Правило удержания (например, «сохранить последние 10 артефактов»)
- Тег соответствия шаблон (например, исключить "последние" и "производственные" теги)
- Нажмите «Добавить», а затем «Беги сейчас» для проверки политики.
Доверие к контенту и подпись изображений
Позволяет довериться контенту, чтобы гарантировать, что только подписанные изображения могут быть удалены:
- В проекте «Конфигурация» включить «Включить доверие к контенту»
- Для этого необходимо подписать изображения с помощью Docker Content Trust или Cosign.
- Неподписанные изображения будут отклонены, когда пользователи попытаются их вытащить.
Управление доступом и разрешениями пользователей
Эффективное мульти-аренда требует тщательного управления доступом пользователей и разрешениями, чтобы арендаторы могли получить доступ только к назначенным им ресурсам.
Стратегии управления пользователями
Harbor поддерживает несколько серверов аутентификации, что позволяет выбрать подход, который наилучшим образом соответствует инфраструктуре управления идентификацией вашей организации.
Местное управление пользователями
Для небольших развертываний или тестирования вы можете создавать пользователей непосредственно в Харборе:
- Войти как admin
- Перейти в «Администрация» → «Пользователи»
- Нажмите «Новый пользователь»
- Заполните данные пользователя (имя пользователя, электронная почта, полное имя, пароль)
- Нажмите «ОК»
LDAP/Active Directory Integration (Интеграция активных каталогов)
Для развертывания предприятия интегрируйте Harbor с существующими LDAP или Active Directory:
- Навигация в «Администрирование» → «Конфигурация» → «Аутентификация»
- Выберите «LDAP» в качестве режима аутентификации
- Настройка настроек 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 Сфера: Поддержка
- Проверьте соединение
- Нажмите «Сохранить»
Интеграция IDC
Для современных поставщиков удостоверений личности, таких как Okta, Auth0 или Keycloak:
- В настройках «Аутентификация» выберите «OIDC»
- Настройка параметров OIDC:
- Имя поставщика OIDC: Имя поставщика
- OIDC Endpoint: https://your-idp.com
- Идентификатор клиента OIDC: Ваш идентификатор клиента
- OIDC Client Secret: Ваш клиентский секрет
- OIDC Сфера: openid,profile,email
- Проверять и сохранять
Присвоение пользователям проектов
После аутентификации пользователей, назначьте их на проекты с соответствующими ролями:
- Навигация по проекту
- Нажмите на вкладку «Члены»
- Нажмите «Пользователь» или «Группа», чтобы добавить участников
- Поиск пользователя или группы
- Выберите подходящую роль:
- Гость: Доступ только для чтения изображений
- Разработчик: Может нажимать и тянуть изображения
- Мейнлайнер: Может управлять участниками проекта и настраивать настройки
- Административный директор проекта: Полный контроль над проектом
- Нажмите «ОК»
Роботы для интеграции CI/CD
Учетные записи роботов - это служебные учетные записи в Гавани с конкретными разрешениями, используемые для автоматизированных операций, таких как трубопроводы CI / CD, толкающие или вытягивающие изображения без необходимости использования учетных данных человека.
Для создания учетной записи робота:
- Навигация по проекту
- Нажмите вкладку «Учетные записи роботов»
- Нажмите «Новый счет робота»
- Настройка учетной записи робота:
- Имя: Описательное имя (например, «ci-pipeline-bot»)
- Время истечения срока действия: Установить дату истечения срока действия для обеспечения безопасности
- Разрешения: Выберите конкретные репозитории и действия (нажмите, вытяните, удалите)
- Нажмите «ADD»
- Копировать сгенерированный токен немедленно (он не будет показан снова)
Используйте учетную запись робота в вашем конвейере 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, изображения могут автоматически сканироваться на наличие известных уязвимостей, а результаты этих сканирований могут быть использованы для предотвращения извлечения артефактов с нерешенными проблемами безопасности.
Настройка автоматического сканирования
Включите автоматическое сканирование на уровне системы или проекта:
- Для системного сканирования: «Администрация» → «Службы допроса» → Настройка настроек Trivy
- Для сканирования проектного уровня: Проект → «Конфигурация» → Включить «Автоматически сканировать изображения нажатием»
- Настройка запланированных сканирований для повторного сканирования существующих изображений на наличие вновь обнаруженных уязвимостей.
Политика предотвращения уязвимостей
Настройка политик для предотвращения развертывания уязвимых изображений:
- В проекте «Конфигурация» включить «Предотвращение уязвимых изображений от запуска»
- Установите порог тяжести (например, «высокий» или «критический»)
- Изображения с уязвимостями на этом пороге или выше этого порога не могут быть удалены.
Просмотр результатов сканирования
Для просмотра результатов сканирования уязвимостей:
- Навигация по проекту и репозиторию
- Нажмите на артефакт / тег
- Просмотр вкладки «Уязвимости» для подробных результатов сканирования
- Обзор деталей CVE, уровней тяжести и доступных исправлений
Подписание изображений и доверие к контенту
Harbor поддерживает подписание изображений контейнеров с помощью Docker Content Trust (leveraging Notary) для обеспечения подлинности и происхождения, а также могут быть активированы политики, которые предотвращают развертывание неподписанных изображений.
Создание доверия к контенту
Чтобы обеспечить доверие к контенту для проекта:
- Навигация по проекту «Конфигурация»
- Включить «Включить доверие к контенту»
- Включить "Предотвращение неподписанных изображений от выдергивания"
Подписание изображений с помощью 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 ведет всеобъемлющие журналы аудита, которые отслеживают все действия пользователей, что облегчает соблюдение требований соответствия и расследование инцидентов безопасности.
Просмотр журналов аудита
- Перейти в «Администрация» → «Логс»
- Фильтровые журналы:
- Имя пользователя
- Тип операции (толкать, тянуть, удалять, создавать и т. Д.)
- Тип ресурса (проект, репозиторий, артефакт)
- Время
- Экспортные журналы для внешнего анализа или архивирования
Интеграция с системами 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 в производстве для шифрования данных в пути:
- Получите сертификаты SSL / TLS от доверенного CA (Let's Encrypt, DigiCert и т. Д.)
- Настройка harbor.yml с сертификатами
- Перезагрузить гавань
Конфигурация 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.
Для настройки конечной точки репликации:
- Перейти в «Администрация» → «Реестр»
- Нажмите «Новый конец»
- Конфигурируйте детали конечных точек:
- Провайдер: Выберите тип реестра (Harbor, Docker Hub, AWS ECR и т.д.)
- Имя: Описательное название конечной точки
- Конечный URL: Регистрационный URL
- Доступ к ID/секрету: Удостоверения подлинности
- Проверьте соединение
- Нажмите «ОК»
Создание правил репликации
Определите политику репликации для автоматической синхронизации изображений:
- Перейдите в «Администрирование» → «Репликации»
- Нажмите «Новое правило регистрации»
- Настройте правило:
- Имя: Описательное название правила
- Режим репликации: Нажмите (на удаленный) или Вытяните (на удаленный)
- Исходный реестр: Выберите источник
- Реестр определения: Выберите конечную точку цели
- Режим триггера: Руководящий, запланированный или основанный на событиях
- Фильтры: Укажите, какие репозитории, теги или метки реплицировать
- Нажмите «Сохранить»
Используйте случаи для репликации
- Восстановление после катастрофы: Воспроизведение критических изображений во вторичном экземпляре гавани в другом регионе
- Географическое распределение: Синхронизация изображений с региональными реестрами для более быстрого времени тяги
- Гибридное облако: Репликация между локальными гаванями и облачными реестрами
- Разработка/Разделение продукции: Продвижение изображений из реестров разработчиков в производственные реестры
Работа с гаванью: практические рабочие процессы
После того, как 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 действовать как прокси-кэш для внешних реестров, уменьшая использование полосы пропускания и улучшая производительность тяги.
Для настройки прокси-кеша проекта:
- Создать новый проект
- Выберите «Прокси-кэш» в качестве типа проекта
- Выберите целевой реестр (Docker Hub, Quay.io и т.д.)
- Конфигурировать учетные данные, если это необходимо
- Проведите изображения через 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
Советы по оптимизации производительности
- Использовать SSD-накопитель: Хранить данные Harbor на быстрых SSD-накопителях для лучшей производительности ввода/вывода
- Настройте кэширование Redis: Убедитесь, что Redis имеет достаточно выделенной памяти
- Настройка базы данных: Оптимизируйте настройки PostgreSQL для вашей рабочей нагрузки
- Позволяет сбор мусора: Расписание регулярного сбора мусора для восстановления хранения
- Использовать прокси-кэш: Уменьшить внешние тяги реестра путем кэширования часто используемых изображений
- Репликация выполнения: Распределение нагрузки по нескольким экземплярам гавани
Коллекция Garbage
Сбор мусора - это процесс восстановления пространства для хранения путем удаления нессылочных капель и артефактов, которые больше не нужны.
Для сбора мусора:
- Перейти в «Администрация» → «Сбор мусора»
- Нажмите «GC NOW» для немедленной коллекции
- Или планировать регулярный сбор мусора (например, еженедельно в 2 часа ночи)
Устранение общих проблем
Не могу нажимать изображения
Симптомы: «отказано: запрошенный доступ к ресурсу отказано» ошибка
Решения:
- Проверить, имеет ли пользователь Разработчик или более высокую роль в проекте.
- Проверка квоты на хранение проекта не была превышена
- Убедитесь, что пользователь аутентифицирован:
- Проверить название проекта в теге изображения, соответствующем существующему проекту
Ошибки SSL-сертификата
Симптомы: Ошибка «x509: сертификат, подписанный неизвестным органом»
Решения:
- Добавить сертификат CA Harbor в доверенные сертификаты Docker
- Для самоподписанных сертификатов, скопируйте сертификат CA на
- Перезагрузить Docker daemon:
Медленный Push/Pull
Симптомы: Операции с изображением занимают чрезмерное время
Решения:
- Проверить пропускную способность сети и задержку
- Проверить производительность I/O хранилища
- Увеличить максимальную одновременную загрузку / загрузку Docker daemon
- Рассмотрите возможность использования репликации гавани для географически распределенных команд.
- Включите прокси-кэш для часто вытягиваемых внешних изображений
Проблемы подключения базы данных
Симптомы: Портовый интерфейс показывает ошибки или не загружается
Решения:
- Проверьте состояние контейнера базы данных:
- Проверить учетные данные базы данных в harbor.yml
- Проверить журналы баз данных:
- Обеспечить наличие достаточных ресурсов в базе данных (CPU, память, диск)
Расширенные сценарии многоквартирного жилья
Распределение контейнеров клиентоориентированных
Harbor может использоваться для распространения контейнерного программного обеспечения для внешних клиентов:
- Создавать отдельные проекты для каждого клиента
- Используйте учетные записи роботов с датами истечения срока действия для доступа клиентов
- Внедрение уведомлений Webhook при наличии новых версий
- Настройка репликации в реестры клиентов, если это необходимо
- Использование проектных квот для управления хранением на одного клиента
Многорегиональное развертывание
Для глобальных организаций разверните порт в нескольких регионах:
- Развертывание портовых комплексов в каждом крупном регионе (США, ЕС, АТЭС)
- Настройка двунаправленной репликации между экземплярами
- Используйте балансировку нагрузки на основе DNS для маршрутизации пользователей в ближайший экземпляр
- Внедрение согласованной аутентификации LDAP/OIDC во всех случаях
- Централизовать мониторинг и ведение журналов для всех случаев
Соблюдение и нормативные требования
Для регулируемых отраслей (здравоохранение, финансы, правительство):
- Обеспечить всеобъемлющую регистрацию аудита
- Внедрение обязательного сканирования уязвимостей с помощью политики блокировки
- Требуется подпись изображения для всех производственных изображений
- Настройка политики хранения для удовлетворения требований к хранению данных
- Использование интеграции LDAP/AD для централизованного контроля доступа
- Внедрение правил сегментации сети и брандмауэра
- Регулярное тестирование резервного копирования и аварийного восстановления
- Документирование всех средств контроля и процедур безопасности
Лучшие практики для многоквартирных портовых развертываний
Лучшие практики безопасности
- Всегда используйте HTTPS: Никогда не запускайте Harbor по простому HTTP в производстве
- Изменить пароли по умолчанию: Сразу после установки изменить пароль администратора
- Позволяет сканировать уязвимости: Настройка автоматического сканирования нажатием
- Внедрить подписание изображений: Требуется подписанное изображение для развертывания производства
- Используйте учетные записи роботов: Никогда не используйте личные учетные данные в трубопроводах CI/CD
- Обновления безопасности: Поддерживайте Харбор и его компоненты в актуальном состоянии.
- Принцип наименьшей привилегии: Предоставление пользователям минимальных необходимых разрешений
- Регулярно отслеживайте и просматривайте журналы аудита:
Оперативные лучшие практики
- Реализуйте стратегию резервного копирования: Регулярные автоматизированные резервные копии с проверенными процедурами восстановления
- Использование ресурсов монитора: Хранение трека, процессор, память и сетевые метрики
- Установить квоты хранения: Предотвратить чрезмерное потребление отдельными проектами
- Настройка политики удержания: Автоматическая очистка старых или неиспользованных изображений
- Расписание сбора мусора: Регулярная очистка для восстановления места для хранения
- Процедуры документирования: Ведение документации для общих операций и устранения неполадок
- Проверка аварийного восстановления: Регулярно тестируйте процедуры резервного восстановления и отказоустойчивости
- Планирование потенциала: Мониторинг тенденций роста и план масштабирования
Организационные лучшие практики
- Названия конвенций: Установить последовательное наименование для проектов, репозиториев и тегов
- Структура проекта: Организуйте проекты по команде, приложению или среде
- Политика контроля доступа: Определение четких политик для того, кто может получить доступ к тому, что
- Стратегия тегов: Используйте семантические версии и значимые теги
- Обучение и документация: Обеспечить понимание командами того, как эффективно использовать Харбор
- Управление изменениями: Процессы утверждения для изменения конфигурации
- Общение: Установить каналы для объявления об обслуживании и обновлениях
Интеграция гавани с экосистемой 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
Настройте веб-хуки, чтобы активировать действия при нажатии изображений:
- Навигация для проекта «Webhooks»
- Нажмите «Новый сайт»
- Настройка webhook:
- Конечный URL: Ваш URL-адрес получателя webhook
- События: Выберите события для запуска (нажмите, вытяните, удалите, сканирование завершено)
- Аутентификация: Конфигурация аутентификации при необходимости
- Тестировать webhook
- Кликните «Континуум»
Репозиторий 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
Масштабируемые соображения
По мере роста вашей организации, подумайте:
- Горизонтальное масштабирование: Развернуть несколько экземпляров гавани с балансировкой нагрузки
- Внешняя база данных: Использование управляемой PostgreSQL для лучшей масштабируемости и надежности
- Внешний Redis: Использование управляемого кластера Redis или Redis для кэширования
- Объектное хранилище: Используйте S3, Azure Blob или GCS для хранения изображений вместо локального диска
- интеграция CDN: Использование CDN для глобального распространения изображений
Новые случаи использования
Harbor всегда был OCI-совместим, то есть он может хранить и распространять любой артефакт, который соответствует спецификации распределения OCI, а расширяемость спецификации OCI означает, что модели ИИ теперь могут использовать ту же инфраструктуру с той же безопасностью, управлением и оперативной зрелостью.
- Реестр моделей ИИ/МЛ: Хранение и распространение моделей машинного обучения в качестве артефактов OCI
- Модули WASM: Распределение модулей WebAssembly
- Программный билль материалов (SBOM): Хранение и управление SBOM наряду с изображениями
- Пакеты политик: Распределение политик OPA и других конфигурационных артефактов
Заключение
Создание многопользовательского реестра Docker с Harbor предоставляет организациям мощное, безопасное и масштабируемое решение для управления изображениями контейнеров между командами, отделами и даже клиентами. Harbor устраняет разрыв в качестве реестра контейнеров с открытым исходным кодом корпоративного уровня, который обеспечивает безопасность, производительность и суверенитет для управления изображениями контейнеров, плавно интегрируясь с существующими операционными парадигмами и обеспечивая надежное решение для современных потребностей управления изображениями контейнеров.
Реализуя методы, изложенные в этом руководстве, - от правильной установки и конфигурации до закалки безопасности, многопользовательской установки и лучших практик эксплуатации - вы можете создать готовое к производству развертывание Harbor, которое удовлетворяет потребности вашей организации сегодня, оставаясь достаточно гибким, чтобы адаптироваться к будущим требованиям.
Ключевые выводы для успешной многоквартирной аренды Harbor:
- Проекты являются основой: Используйте проекты для создания изолированных пространств имен для разных арендаторов
- Безопасность имеет первостепенное значение: Обеспечение сканирования уязвимостей, подписи изображений и всеобъемлющего аудита
- Автоматизация имеет важное значение: Используйте учетные записи роботов, веб-хуки и интеграцию API для рабочих процессов CI/CD
- План масштабирования: Реализация репликации, мониторинг и планирование потенциала с самого начала
- Оставайтесь вовлеченными: Присоединяйтесь к сообществу Харбора, оставайтесь в курсе обновлений и вносите свой вклад обратно
Независимо от того, управляете ли вы контейнерами для небольшой команды разработчиков или управляете крупномасштабной многопользовательской платформой, обслуживающей сотни клиентов, Harbor предоставляет функции, гибкость и поддержку сообщества, необходимые для успеха.Начните с основ, внедряйте лучшие практики безопасности и постепенно внедряйте расширенные функции по мере развития ваших потребностей.
Для получения дополнительной информации и ресурсов посетите официальный веб-сайт Harbor , изучите репозиторий GitHub , присоединитесь к сообществу на Slack и проконсультируйтесь с всеобъемлющей документацией Harbor .