Развертывание экземпляра Harbor
В этом документе описывается подписка на Harbor Operator и функциональность, основанная на развертывании экземпляра Harbor.
Требования к уровню допуска безопасности Pod Security Admission (PSA) для развертывания Harbor зависят от используемого метода хранения:
-
Хранение HostPath: уровень PSA должен быть настроен как
Privileged, поскольку томаhostPathне разрешены при политикеRestricted. -
Хранение PVC или StorageClass: Harbor может быть развернут с уровнем PSA
Restricted.
Поддерживаемые уровни PSA для каждого шаблона развертывания:
Содержание
Предварительные требованияПланирование развертыванияОсновная информацияПланирование ресурсов перед развертываниемПланирование конфигурации после развертыванияРазвертывание экземпляраРазвертывание из шаблонаHarbor Quick StartРазвертывание из шаблона Harbor High AvailabilityРазвертывание из шаблона Harbor Object StorageРазвертывание из YAMLВысокая доступность (фрагменты YAML)Хранение (фрагменты YAML)Сетевой доступ (фрагменты YAML)Конфигурация учётных данных доступа RedisКонфигурация учётных данных доступа PostgreSQLКонфигурация учётных данных администратораПолный пример YAML: одиночный экземпляр, node storage, сетевой доступ NodePortПолный пример YAML: высокая доступность, StorageClass, сетевой доступ IngressПоследующие операцииНастройка единой аутентификации (SSO)Настройка HTTPSНастройка политики базы данных уязвимостей для сканирования образовДополнительная информацияРазвёртывание Harbor в IPv6-средеПредварительные требования
-
Этот документ применим к версиям Harbor 2.14 и выше, предоставляемым платформой. Он отделён от платформы и основан на технологиях, таких как Operator.
-
Убедитесь, что Harbor Operator развернут (подписан) в целевом кластере, то есть Harbor Operator готов создавать экземпляры.
Планирование развертывания
Harbor поддерживает различные конфигурации ресурсов для удовлетворения различных сценариев клиентов. В разных сценариях требуемые ресурсы и конфигурации могут значительно отличаться. Поэтому в этом разделе описывается, какие аспекты необходимо учитывать при планировании развертывания перед созданием экземпляров Harbor, а также влияние ключевых решений, чтобы помочь пользователям осуществлять последующие конкретные развертывания экземпляров на основе этой информации.
Основная информация
-
Harbor Operator, предоставляемый платформой, основан на официальном сообществом Harbor Operator, с корпоративными улучшениями, такими как поддержка ARM и исправления уязвимостей безопасности. Он полностью совместим с версией сообщества по функциональности и улучшает удобство развертывания Harbor за счёт опциональных и настраиваемых шаблонов.
-
Экземпляр Harbor содержит несколько компонентов, таких как
Registry— компонент, отвечающий за управление файлами образов,PostgreSQL— компонент, обеспечивающий хранение метаданных приложения и информации о пользователях, иRedis— компонент для кэширования и др. Платформа предоставляет профессиональные PostgreSQL Operator и Redis Operator, поэтому при развертывании экземпляров Harbor ресурсы Redis и PostgreSQL не разворачиваются напрямую, а используются через настройку соответствующих учётных данных доступа к существующим экземплярам.
Планирование ресурсов перед развертыванием
Планирование ресурсов перед развертыванием означает принятие решений до развертывания, которые вступают в силу во время развертывания. Основные аспекты включают:
Высокая доступность
-
Harbor поддерживает развертывание с высокой доступностью, с основными последствиями и ограничениями:
-
Каждый компонент использует несколько реплик
-
Сетевой доступ больше не поддерживает
NodePort, требуется доступ через доменные имена, настроенные черезIngress -
Методы хранения больше не поддерживают
node storage, требуется доступ черезStorageClassилиPVC
-
Ресурсы
Согласно рекомендациям сообщества, экземпляр Harbor без высокой доступности может работать с минимум 2 ядрами CPU и 4Gi памяти, а в режиме высокой доступности требуется минимум 8 ядер CPU и 16Gi памяти для стабильной работы.
Хранение
-
Для Harbor можно использовать общие методы хранения, предоставляемые платформой, такие как классы хранения, постоянные тома (PVC), node storage и др.
-
Чтобы намеренно отказаться от сохранения данных для Trivy, оставьте
spec.helmValues.persistence.persistentVolumeClaim.trivy.storageClassнеустановленным. Тогда база уязвимостей будет храниться вemptyDir, и при каждом перезапуске пода Trivy происходит повторная загрузка базы и временная блокировка сканирования. -
Node storage не подходит для режима
высокой доступности, так как хранит файлы в указанном пути на хост-узле. -
Кроме того, Harbor поддерживает объектное хранилище. Инструкции по настройке см. в разделе Использование объектного хранилища в качестве бэкенда реестра.
Не рекомендуется использовать NFS в качестве бэкенда хранения Harbor в продуктивных или нагруженных сценариях (например, при масштабных операциях push/pull образов или высокой конкуренции). Из-за особенностей протокола NFS не может полностью удовлетворять требованиям Harbor Registry к интенсивным операциям с метаданными. При высокой нагрузке часто возникают ошибки загрузки артефактов, например:
- digest invalid: предоставленный дайджест не совпадает с загруженным содержимым
- blob upload unknown
- blob upload invalid
Если вы всё же хотите использовать NFS в тестовой среде, включение параметров sync и no_wdelay на сервере NFS (обратитесь к поставщику хранилища за настройками) и установка количества реплик компонента Registry равным 1 помогут смягчить указанные проблемы.
Сеть
-
Платформа предоставляет два основных метода сетевого доступа:
NodePortиIngress-
NodePortтребует указания HTTP и SSH портов и их доступности.NodePortне подходит для режимавысокой доступности -
Ingressтребует указания доменного имени и обеспечения корректного разрешения домена
-
-
Платформа поддерживает протокол HTTPS, который необходимо настроить после развертывания экземпляра. Подробности см. в разделе Настройка HTTPS.
Redis
Рекомендуется использовать блочное хранилище (например, TopoLVM) для достижения более высокой IOPS и низкой задержки.
-
Текущая версия компонента Redis, от которой зависит Harbor, — v6. Рекомендуется использовать Redis Operator, предоставляемый платформой, для развертывания экземпляров Redis, а затем завершить интеграцию Redis, настроив учётные данные доступа.
-
Доступ к Redis осуществляется путём настройки ресурса
secretс определённым форматом содержимого. Подробности см. в разделе Настройка учётных данных доступа Redis, PostgreSQL и аккаунтов. -
Harbor поддерживает подключение к внешнему Redis с включённым TLS. Пример настройки см. в разделе Пример Redis с TLS.
-
-
Известная проблема: Ошибка внутреннего сервера при изменении разрешений проекта Harbor
PostgreSQL
Рекомендуется использовать блочное хранилище (например, TopoLVM) для достижения более высокой IOPS и низкой задержки.
-
Поддерживаемые версии PostgreSQL см. в матрице совместимости версий. Рекомендуется развертывать экземпляры PostgreSQL с помощью PostgreSQL Operator, предоставляемого платформой, и интегрировать PostgreSQL, настроив соответствующие учётные данные доступа.
- Доступ к PostgreSQL осуществляется путём настройки ресурса
secretс определённым форматом содержимого. Подробности см. в разделе Настройка учётных данных доступа Redis, PostgreSQL и аккаунтов.
- Доступ к PostgreSQL осуществляется путём настройки ресурса
Учётные данные аккаунта
При инициализации экземпляра Harbor необходимо настроить учётную запись администратора и её пароль. Это делается путём настройки ресурса secret. Подробности см. в разделе Настройка учётных данных доступа Redis, PostgreSQL и аккаунтов.
Планирование конфигурации после развертывания
Планирование конфигурации после развертывания — это планирование, не требующее решений до развертывания, но которое можно изменять по мере необходимости с помощью стандартизированных операций после развертывания. Это включает в себя единую аутентификацию (SSO), настройку HTTPS, конфигурацию внешнего балансировщика нагрузки и др. Подробности см. в разделе Последующие операции.
Развертывание экземпляра
Harbor Operator, предоставляемый платформой, предлагает два основных метода развертывания: развертывание из шаблонов и развертывание из YAML.
Платформа предоставляет два встроенных шаблона: Harbor Quick Start и Harbor High Availability, а также поддерживает пользовательские шаблоны для удовлетворения специфических сценариев клиентов.
Информация о встроенных шаблонах и развертывании из YAML приведена ниже:
Развертывание из шаблона Harbor Quick Start
Этот шаблон предназначен для быстрого создания лёгкого экземпляра Harbor, подходящего для сценариев разработки и тестирования, не рекомендуется для продуктивных сред.
- Вычислительные ресурсы: 2 ядра CPU, 4Gi памяти
- Метод хранения: используется локальное node storage, требуется указать IP и путь узла хранения
- Сетевой доступ: используется метод NodePort, общий IP узла с хранилищем, требуется указать порты
- Зависимые сервисы: требуется настройка учётных данных доступа к существующим Redis и PostgreSQL
- Другие настройки: требуется настройка учётных данных аккаунта, функция SSO по умолчанию отключена
Завершите развертывание, заполнив соответствующую информацию согласно подсказкам шаблона.
Развертывание из шаблона Harbor High Availability
Развёртывание экземпляра Harbor с высокой доступностью требует более высокой конфигурации ресурсов и обеспечивает более высокий стандарт доступности.
- Вычислительные ресурсы: 16 ядер CPU, 16 Gi памяти
- Метод хранения: используется StorageClass для хранения файлов образов, логов фоновых задач и базы данных уязвимостей сканирования образов
- Сетевой доступ: используется метод Ingress, требуется указать доменное имя
- Зависимые сервисы: требуется настройка учётных данных доступа к существующим Redis и PostgreSQL
- Другие настройки: требуется настройка учётных данных аккаунта, функция SSO по умолчанию отключена
Для обеспечения высокой доступности Harbor внешние зависимости должны соответствовать следующим условиям:
- Экземпляры
RedisиPostgreSQLдолжны быть высокодоступными - Сетевой балансировщик нагрузки должен быть высокодоступным; при использовании ALB необходимо настроить VIP
- В кластере должно быть более 2 узлов
Завершите развертывание, заполнив соответствующую информацию согласно подсказкам шаблона.
Развертывание из шаблона Harbor Object Storage
Развёртывание экземпляра Harbor на основе объектного хранилища.
- Вычислительные ресурсы: 8 ядер CPU, 16 Gi памяти
- Хранение: файлы образов используют объектное хранилище, логи фоновых задач — базу данных
- Сетевой доступ: используется Ingress, указывается доменное имя
- Зависимости: настройка учётных данных доступа к существующим Redis и PostgreSQL
- Другие настройки: настройка учётных данных аккаунта, функция SSO по умолчанию отключена
В этом шаблоне сканер Trivy не сохраняет данные; он монтирует emptyDir, поэтому при каждом перезапуске пода база уязвимостей загружается заново, и новые сканирования временно блокируются до завершения синхронизации.
Убедитесь, что предоставленные учётные данные объектного хранилища имеют необходимые разрешения S3 API, см. Учётные данные объектного хранилища.
Завершите развертывание, заполнив соответствующую информацию согласно подсказкам шаблона.
Развертывание из YAML
Развертывание из YAML — самый базовый и мощный способ развертывания. Здесь приведены соответствующие фрагменты YAML для каждого аспекта из раздела Планирование развертывания, а также два полных примера YAML для типовых сценариев, чтобы помочь пользователям понять метод конфигурации YAML и при необходимости вносить изменения.
Высокая доступность (фрагменты YAML)
В режиме высокой доступности количество реплик компонентов Harbor должно быть не менее 2. Фрагмент конфигурации YAML:
Хранение (фрагменты YAML)
Хранение данных Harbor включает три основных части:
- Registry: управляет и хранит образы контейнеров и артефакты, обрабатывает операции загрузки, скачивания и хранения образов.
- Jobservice: выполняет фоновые задачи, такие как репликация образов между реестрами, сбор мусора и другие запланированные или по требованию задания.
- Trivy: выполняет сканирование образов на уязвимости для выявления проблем безопасности и обеспечения соответствия политикам безопасности.
В настоящее время поддерживаются три метода конфигурации хранения: StorageClass, PVC и локальное node storage. При использовании StorageClass или PVC хранилище должно поддерживать многозадачное чтение и запись (ReadWriteMany).
Для Registry также можно использовать объектное хранилище (S3) в качестве бэкенда.
Jobservice поддерживает хранение логов заданий в нескольких местах (файл, база данных, stdout). Если вы не выбрали вывод логов jobservice в файл, настройка хранилища для jobservice не требуется. Подробности см. в Настройка хранения логов заданий.
Фрагмент конфигурации StorageClass:
Фрагмент конфигурации PVC (PVC должны быть созданы заранее):
Фрагмент конфигурации локального node storage:
Настройка объектного хранилища (S3) в качестве бэкенда хранения Registry:
-
Используйте Amazon S3 или совместимые с S3 сервисы, такие как MinIO, Ceph.
-
Корзина объектного хранилища должна быть создана заранее.
-
Секрет
<object-storage-secret>должен быть создан заранее.
Подробности см. в драйвере хранения S3.
Если вы хотите использовать Ceph на платформе, обратитесь к Ceph Distributed Storage.
В настоящее время Harbor поддерживает настройку использования S3 только для компонента Registry. Другие компоненты продолжают использовать PVC или StorageClass для постоянного хранения.
Сетевой доступ (фрагменты YAML)
Сетевой доступ включает два основных метода: доступ по доменному имени и доступ через NodePort.
Фрагмент конфигурации доступа по доменному имени:
Фрагмент конфигурации доступа через NodePort:
Конфигурация учётных данных доступа Redis
Это фрагмент конфигурации для этих учётных данных в экземпляре Harbor после настройки ресурса secret с учётными данными Redis:
Пример для standalone:
Пример для Sentinel:
Пример Redis с TLS
Примечания по Redis с TLS:
caBundleSecretName— глобальное значение Helm Harbor. Указанный Secret должен содержать ключ с именемca.crt.- Для Redis Sentinel с включённым TLS продолжайте использовать адреса Sentinel в
redis.external.addr, укажитеredis.external.sentinelMasterSetи включитеredis.external.tlsOptions.enable: true. - Harbor поддерживает только проверку сертификата сервера для TLS Redis. Клиентские сертификаты не поддерживаются.
- Подключение Harbor к Alauda Cache Service for Redis OSS по TLS в настоящее время не поддерживается.
Конфигурация учётных данных доступа PostgreSQL
Это фрагмент конфигурации для этих учётных данных в экземпляре Harbor после настройки ресурса secret с учётными данными PostgreSQL:
Конфигурация учётных данных администратора
Это фрагмент конфигурации для этих учётных данных в экземпляре Harbor после настройки ресурса secret с учётными данными аккаунта:
Полный пример YAML: одиночный экземпляр, node storage, сетевой доступ NodePort
Полный пример YAML: высокая доступность, StorageClass, сетевой доступ Ingress
Последующие операции
Настройка единой аутентификации (SSO)
Вы можете изменить режим аутентификации с базы данных на OIDC только если в базе данных не добавлены локальные пользователи. Если в базе данных Harbor есть хотя бы один пользователь, кроме администратора, изменить режим аутентификации нельзя.
Подробности см.: Настройка аутентификации через OIDC
Настройка SSO включает следующие шаги:
- Зарегистрировать клиент аутентификации SSO в глобальном кластере
- Подготовить конфигурацию аутентификации SSO
- Настроить экземпляр Harbor для использования аутентификации SSO
Создайте следующий ресурс OAuth2Client в глобальном кластере для регистрации клиента аутентификации SSO:
Отредактируйте экземпляр Harbor, добавив следующую конфигурацию:
Настройка HTTPS
После развертывания экземпляра Harbor HTTPS можно настроить по необходимости.
Сначала создайте секрет TLS-сертификата в пространстве имён, где расположен экземпляр:
Затем отредактируйте YAML-конфигурацию экземпляра Harbor для включения HTTPS-доступа:
Настройка политики базы данных уязвимостей для сканирования образов
Функция сканирования образов в Harbor реализована компонентом Trivy. С учётом сетевой среды пользователя, политика базы данных уязвимостей по умолчанию для этого компонента — использование встроенной офлайн-базы уязвимостей. Поскольку база не обновляется, новые уязвимости не обнаруживаются своевременно.
Если вы хотите поддерживать базу уязвимостей в актуальном состоянии, отредактируйте YAML-конфигурацию экземпляра Harbor для включения политики онлайн-обновления (эта политика требует доступа к GitHub):
После включения политики онлайн-обновления Trivy будет определять необходимость обновления базы уязвимостей перед сканированием на основе времени последнего обновления. Поскольку загрузка базы занимает некоторое время, если вам не требуется сканирование уязвимостей Java, вы можете отключить обновление базы уязвимостей Java, отредактировав YAML-конфигурацию экземпляра Harbor:
Дополнительная информация
Развёртывание Harbor в IPv6-среде
Harbor поддерживает развертывание в IPv6-средах, однако необходимо убедиться, что версии используемых клиентских инструментов поддерживают IPv6. Если возникает ошибка invalid reference format, проверьте поддержку IPv6 в версии вашего клиента.
Связанные вопросы сообщества: