Развертывание экземпляра 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: высокая доступность, storage class, доступ через IngressПоследующие операцииНастройка Single Sign-On (SSO)Настройка HTTPSНастройка политики базы данных уязвимостей для сканирования образовДополнительная информацияРазвертывание Harbor в среде IPv6Предварительные требования
-
Этот документ применим к версиям Harbor 2.14 и выше, предоставляемым платформой. Он отсоединён от платформы и основан на таких технологиях, как Operator.
-
Убедитесь, что Harbor Operator уже развернут (подписка выполнена) в целевом кластере, то есть Harbor Operator готов к созданию экземпляров.
Планирование развертывания
Harbor поддерживает различные конфигурации ресурсов для различных сценариев использования. В разных сценариях требуемые ресурсы и конфигурации могут существенно отличаться. Поэтому в этом разделе описано, какие аспекты необходимо учитывать при планировании развертывания до размещения экземпляров Harbor, а также какое влияние оказывают ключевые решения, чтобы пользователи могли на этой основе выполнять последующее развертывание конкретных экземпляров.
Основная информация
-
Harbor Operator, предоставляемый платформой, основан на официальном Harbor Operator сообщества и дополнен возможностями уровня enterprise, такими как поддержка ARM и исправления уязвимостей безопасности. По функциональности он полностью совместим с версией сообщества, а по удобству использования повышает простоту развертывания Harbor за счёт необязательных и настраиваемых шаблонов.
-
Экземпляр Harbor содержит несколько компонентов, например компонент
Registry, отвечающий за управление файловыми образами, компонентPostgreSQL, предоставляющий хранилище для метаданных приложения и информации о пользователях, компонентRedisдля кэширования и т. д. Платформа предоставляет профессиональные PostgreSQL Operator и Redis Operator, поэтому при развертывании экземпляров Harbor ресурсы Redis и PostgreSQL больше не разворачиваются напрямую, а используются через настройку специальных учётных данных для доступа к существующим экземплярам.
Планирование ресурсов до развертывания
Планирование ресурсов до развертывания означает решения, которые необходимо принять до развертывания и которые вступают в силу во время развертывания. Основные элементы включают:
Высокая доступность
-
Harbor поддерживает развертывание с высокой доступностью, при этом действуют следующие основные последствия и ограничения:
-
Каждый компонент будет использовать несколько реплик
-
Сетевой доступ больше не поддерживает
NodePort, а требует доступа через доменные имена, настроенные черезIngress -
Способы хранения больше не поддерживают
node storage, а требуют доступа черезStorageClassилиPVC
-
Ресурсы
Согласно рекомендациям и практике сообщества, экземпляр Harbor без высокой доступности может работать минимум на 2 ядрах и 4Gi ресурсов, тогда как в режиме высокой доступности для стабильной работы требуется минимум 8 ядер и 16Gi ресурсов.
Хранилище
-
Для Harbor можно использовать общие способы хранения, предоставляемые платформой, такие как storage class, persistent volume claims, node storage и т. д.
-
Чтобы намеренно отказаться от сохранения данных для Trivy, оставьте
spec.helmValues.persistence.persistentVolumeClaim.trivy.storageClassне заданным. Тогда база уязвимостей будет размещаться в томеemptyDir, и при каждом перезапуске pod Trivy будет запускаться полная загрузка базы данных, а сканирование уязвимостей будет заблокировано до её завершения. -
Node storage не подходит для режима
high availability, поскольку он хранит файлы по указанному пути на узле-хосте -
Кроме того, Harbor поддерживает объектное хранилище. Инструкции по настройке см. в разделе Использование Object Storage в качестве backend-хранилища Registry.
Не рекомендуется использовать NFS в качестве backend-хранилища для Harbor в production или high-load scenarios (например, при массовых операциях push/pull образов или при высокой конкуренции за образами). Из-за особенностей протокола NFS не может полностью удовлетворить требования Harbor Registry к операциям с интенсивным использованием метаданных. При высокой нагрузке это часто приводит к ошибкам загрузки артефактов, и вы можете увидеть такие сообщения об ошибках:
- digest invalid: provided digest did not match uploaded content
- blob upload unknown
- blob upload invalid
Если вы всё же хотите использовать NFS в качестве backend-хранилища Harbor в testing environment, включение sync и no_wdelay на сервере NFS (подробности настройки уточняйте у поставщика хранилища) и установка количества реплик компонента Registry в 1 могут помочь снизить вероятность указанных проблем.
Сеть
-
Платформа предоставляет два основных способа сетевого доступа:
NodePortиIngress-
NodePortтребует указания HTTP-порта и SSH-порта, а также проверки доступности этих портов.NodePortне подходит для режимаhigh availability -
Ingressтребует указания доменного имени и проверки корректности разрешения доменного имени
-
-
Платформа поддерживает протокол HTTPS, который необходимо настроить после развертывания экземпляра. Подробности см. в Настройка HTTPS.
Redis
Рекомендуется использовать блочное хранилище (например, TopoLVM) для достижения более высокого IOPS и меньшей задержки.
-
Текущая версия компонента Redis, от которой зависит Harbor, — v6. Рекомендуется использовать Redis Operator, предоставляемый платформой, для развертывания экземпляров Redis, а затем завершить интеграцию Redis путём настройки учётных данных доступа.
- Доступ к Redis выполняется путём настройки ресурса
secretсо специальным форматом содержимого. Подробности см. в разделе Настройка учётных данных доступа к Redis, PostgreSQL и учётной записи. - Harbor поддерживает подключение к внешнему Redis с TLS. Пример настройки см. в разделе Пример Redis с TLS.
- Доступ к Redis выполняется путём настройки ресурса
-
Известная проблема: Изменение прав доступа к проекту Harbor вызывает Internal Server Error
PostgreSQL
Рекомендуется использовать блочное хранилище (например, TopoLVM) для достижения более высокого IOPS и меньшей задержки.
-
Поддерживаемые версии PostgreSQL см. в матрице совместимости версий. Рекомендуется развертывать экземпляры PostgreSQL с использованием PostgreSQL Operator, предоставляемого платформой, и интегрировать PostgreSQL путём настройки соответствующих учётных данных доступа.
- Доступ к PostgreSQL выполняется путём настройки ресурса
secretсо специальным форматом содержимого. Подробности см. в разделе Настройка учётных данных доступа к Redis, PostgreSQL и учётной записи.
- Доступ к PostgreSQL выполняется путём настройки ресурса
Учётные данные учётной записи
При инициализации экземпляра Harbor необходимо настроить учётную запись администратора и её пароль. Это выполняется путём настройки ресурса secret. Подробности см. в разделе Настройка учётных данных доступа к Redis, PostgreSQL и учётной записи.
Планирование конфигурации после развертывания
Планирование конфигурации после развертывания означает планирование, которое не требует принятия решений до развертывания, но может быть изменено по мере необходимости стандартными операциями после развертывания. Сюда в основном относятся Single Sign-On (SSO), настройка HTTPS, настройка внешнего балансировщика нагрузки и т. д. Подробности см. в разделе Последующие операции.
Развертывание экземпляра
Harbor Operator, предоставляемый платформой, в основном предлагает два способа развертывания: развертывание из шаблонов и развертывание из YAML.
Платформа предоставляет два встроенных шаблона для использования: шаблон Harbor Quick Start и шаблон Harbor High Availability, а также поддерживает пользовательские шаблоны для удовлетворения потребностей конкретных сценариев.
Сведения о встроенных шаблонах и развертывании из YAML приведены ниже:
Развертывание из шаблона Harbor Quick Start
Этот шаблон используется для быстрого создания лёгкого экземпляра Harbor, подходящего для сценариев разработки и тестирования, и не рекомендуется для production-среды.
- Вычислительные ресурсы: CPU 2 ядра, память 4Gi
- Способ хранения: использует локальное хранилище узла, требуется указать IP узла-хранилища и путь
- Сетевой доступ: используется способ NodePort, IP узла общий с хранилищем, требуется указать порт
- Зависимые службы: требуется настроить существующие учётные данные доступа к Redis и PostgreSQL
- Другие настройки: требуется настройка учётных данных учётной записи, функция SSO по умолчанию отключена
Завершите развертывание, заполнив соответствующую информацию в соответствии с подсказками шаблона.
Развертывание из шаблона Harbor High Availability
Развертывание высокодоступного экземпляра Harbor требует более высокой конфигурации ресурсов и обеспечивает более высокий стандарт доступности.
- Вычислительные ресурсы: CPU 16 ядер, память 16 Gi
- Способ хранения: используются ресурсы storage class для хранения файлов образов, журналов фоновых задач и базы уязвимостей для сканирования образов
- Сетевой доступ: используется способ Ingress, требуется указать доменное имя
- Зависимые службы: требуется настроить существующие учётные данные доступа к Redis и PostgreSQL
- Другие настройки: требуется настройка учётных данных учётной записи, функция SSO по умолчанию отключена
Для обеспечения высокой доступности Harbor внешние зависимости должны соответствовать следующим условиям:
- Экземпляры
RedisиPostgreSQLдолжны быть высокодоступными - Балансировщик сетевой нагрузки должен быть высокодоступным; при использовании ALB необходимо настроить VIP
- В кластере должно быть более 2 узлов
Завершите развертывание, заполнив соответствующую информацию в соответствии с подсказками шаблона.
Развертывание из шаблона Harbor Object Storage
Разверните экземпляр Harbor на основе объектного хранилища.
- Вычислительные ресурсы: 8 CPU ядер, 16 Gi памяти
- Хранилище: файловые образы используют объектное хранилище, а журналы фоновых задач используют хранилище базы данных
- Сетевой доступ: используйте Ingress для доступа к сервису и укажите доменное имя
- Зависимости: настройте существующие учётные данные доступа к Redis и PostgreSQL
- Другие настройки: настройте учётные данные учётной записи, функция SSO по умолчанию отключена
В этом шаблоне сканер Trivy не сохраняет данные; он монтирует emptyDir, поэтому при каждом перезапуске pod база уязвимостей загружается заново, а новые сканирования временно блокируются до завершения синхронизации.
Убедитесь, что предоставленные вами учётные данные объектного хранилища соответствуют требуемым разрешениям S3 API, см. Учётные данные объектного хранилища.
Завершите развертывание, заполнив соответствующую информацию в соответствии с подсказками шаблона.
Развертывание из YAML
Развертывание из YAML — это наиболее базовая и в то же время наиболее мощная возможность развертывания. Ниже приведены соответствующие фрагменты YAML для каждого аспекта из раздела Планирование развертывания, а затем приведены два полных примера YAML для завершённых сценариев, чтобы помочь пользователям понять способ настройки YAML и при необходимости вносить изменения в конфигурацию.
Высокая доступность (фрагменты YAML)
В режиме высокой доступности количество реплик компонентов Harbor должно быть не менее 2. Фрагмент конфигурации YAML выглядит следующим образом:
Хранилище (фрагменты YAML)
Хранение данных Harbor в основном включает три части:
- Registry: управляет и хранит контейнерные образы и артефакты. Он выполняет загрузку, скачивание и хранение образов.
- Jobservice: выполняет фоновые задачи, такие как репликация образов между реестрами, сборка мусора и другие запланированные или выполняемые по требованию задания.
- Trivy: выполняет сканирование контейнерных образов на уязвимости для выявления проблем безопасности и обеспечения соответствия политике безопасности.
В настоящее время поддерживаются три способа настройки хранилища: storage class, PVC и локальное хранилище узла. При использовании storage class или pvc хранилище должно поддерживать чтение и запись с нескольких узлов (ReadWriteMany).
Для Registry также можно использовать Object Storage (S3) в качестве backend-хранилища.
Jobservice поддерживает хранение журналов заданий в нескольких местах (файл, база данных, stdout). Если вы не выбрали вывод журналов jobservice в файл, нет необходимости настраивать backend-хранилище для jobservice. Подробности см. в Настройка хранения журналов заданий.
Фрагмент настройки storage class:
Фрагмент настройки PVC (PVC необходимо создать заранее):
Фрагмент настройки локального хранилища узла:
Настройка Object Storage (S3) в качестве backend-хранилища Registry:
-
Используйте Amazon S3 или S3-совместимые сервисы объектного хранилища, такие как MinIO, Ceph.
-
Корзина (bucket) Object Storage должна быть создана заранее.
-
Secret
<object-storage-secret>должен быть создан заранее.
Дополнительные сведения см. в S3 storage driver
Если вы хотите использовать Ceph в платформе, см. Ceph Distributed Storage.
В настоящее время Harbor поддерживает настройку компонента Registry только для использования S3-хранилища. Остальные компоненты по-прежнему будут использовать PVC или StorageClass для постоянного хранения.
Сетевой доступ (фрагменты YAML)
Сетевой доступ в основном включает два способа: доступ по доменному имени и доступ через NodePort.
Фрагмент настройки доступа по доменному имени:
Фрагмент настройки доступа через NodePort:
Настройка учётных данных доступа Redis
Это фрагмент настройки этих учётных данных в экземпляре Harbor после настройки ресурса secret с учётными данными Redis:
Пример для standalone:
Пример для Sentinel:
Пример Redis с TLS
Примечания для Redis с TLS:
caBundleSecretName— это глобальное значение Harbor Helm. Указанный Secret должен содержать ключ с именемca.crt.- Для Redis Sentinel с включённым TLS по-прежнему используйте адреса Sentinel в
redis.external.addr, задайтеredis.external.sentinelMasterSetи включитеredis.external.tlsOptions.enable: true. - Harbor поддерживает только проверку серверного сертификата для Redis TLS. Клиентские сертификаты не поддерживаются.
- Подключение Harbor к Alauda Cache Service for Redis OSS по TLS в настоящее время не поддерживается.
Настройка учётных данных доступа PostgreSQL
Это фрагмент настройки этих учётных данных в экземпляре Harbor после настройки ресурса secret с учётными данными PostgreSQL:
Настройка учётной записи администратора
Это фрагмент настройки этих учётных данных в экземпляре Harbor после настройки ресурса secret с учётными данными учётной записи:
Полный пример YAML: один экземпляр, node storage, доступ через NodePort
Полный пример YAML: высокая доступность, storage class, доступ через Ingress
Последующие операции
Настройка Single Sign-On (SSO)
Вы можете изменить режим аутентификации с database на OIDC только в том случае, если в базе данных не были добавлены локальные пользователи. Если в базе данных Harbor существует хотя бы один пользователь, отличный от admin, изменить режим аутентификации нельзя.
Подробности: Настройка аутентификации провайдера OIDC
Настройка SSO включает следующие шаги:
- Зарегистрировать клиент аутентификации SSO в глобальном кластере
- Подготовить конфигурацию аутентификации SSO
- Настроить экземпляр Harbor на использование аутентификации SSO
Создайте следующий ресурс OAuth2Client в глобальном кластере, чтобы зарегистрировать клиент аутентификации SSO:
Отредактируйте экземпляр Harbor, добавив следующую конфигурацию:
Настройка HTTPS
После развертывания экземпляра Harbor при необходимости можно настроить HTTPS.
Сначала создайте секрет TLS-сертификата в namespace, где расположен экземпляр:
Затем отредактируйте YAML-конфигурацию экземпляра Harbor, чтобы включить доступ по HTTPS:
Настройка политики базы данных уязвимостей для сканирования образов
Функция сканирования образов Harbor реализована компонентом Trivy. С учётом сетевой среды пользователя политика базы уязвимостей по умолчанию для этого компонента использует встроенную офлайн-базу уязвимостей. Поскольку база уязвимостей не обновляется, новые уязвимости не могут обнаруживаться своевременно.
Если вы хотите поддерживать базу уязвимостей в актуальном состоянии, отредактируйте YAML-конфигурацию экземпляра Harbor, чтобы включить политику онлайн-обновления (эта политика требует доступа к GitHub):
После включения политики онлайн-обновления Trivy будет определять необходимость обновления базы уязвимостей перед сканированием на основе времени последнего обновления. Поскольку загрузка базы уязвимостей занимает некоторое время, если вам не требуется сканирование уязвимостей Java, вы также можете отредактировать YAML-конфигурацию экземпляра Harbor, чтобы отключить обновление базы уязвимостей Java:
Если вы оставляете включённым рабочий процесс офлайн-базы и init container init-offline-db завершает работу с OOM при распаковке базы данных, можно увеличить ресурсы только для инициализации отдельно от основных ресурсов выполнения Trivy:
Эта настройка влияет только на init container во время инициализации Pod и не увеличивает постоянные лимиты ресурсов основного контейнера Trivy.
Дополнительная информация
Развертывание Harbor в среде IPv6
Harbor поддерживает развертывание в средах IPv6, но необходимо убедиться, что версии ваших клиентских инструментов поддерживают IPv6. Если возникает ошибка invalid reference format, проверьте, поддерживает ли версия вашего клиентского инструмента IPv6.
Связанные вопросы сообщества: