Развертывание экземпляра Harbor
В этом документе описывается подписка на Harbor Operator и функциональность, основанная на развертывании экземпляра Harbor.
Harbor не поддерживает развертывание в пространствах имён с политикой SPA (Security Policy Admission), установленной в значение Restricted, по следующим причинам:
- Init-контейнер требует прав root: Harbor использует init-контейнеры для инициализации прав доступа к директории PVC, что требует прав root, которые не разрешены при политике Restricted.
Рекомендация: Создайте отдельное пространство имён для развертывания Harbor и убедитесь, что политика безопасности в нём не установлена в Restricted. При развертывании Harbor с использованием хранилища hostPath политика безопасности пространства имён должна быть настроена как Privileged.
Содержание
Предварительные требованияПланирование развертыванияОсновная информацияПланирование ресурсов перед развертываниемПланирование конфигурации после развертыванияРазвертывание экземпляраРазвертывание из шаблона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.12 и выше, предоставляемым платформой. Он отделён от платформы и основан на технологиях, таких как 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 можно использовать общие методы хранения, предоставляемые платформой, такие как классы хранилищ, persistent volume claims, 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 и аккаунта.
- Доступ к Redis осуществляется путём настройки ресурса
-
Известная проблема: Ошибка внутреннего сервера при изменении прав проекта Harbor
PostgreSQL
Рекомендуется использовать блочное хранилище (например, TopoLVM) для достижения высокой производительности IOPS и низкой задержки.
-
Текущая версия компонента PostgreSQL, от которой зависит Harbor, — v14. Рекомендуется использовать PostgreSQL Operator, предоставляемый платформой, для развертывания экземпляров PostgreSQL, а затем завершить интеграцию 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 памяти
- Метод хранения: использование ресурсов класса хранения для хранения файлов образов, логов фоновых задач и базы данных уязвимостей сканирования образов
- Сетевой доступ: метод Ingress, требуется указать доменное имя
- Зависимые сервисы: требуется настройка учётных данных доступа к существующим Redis и PostgreSQL
- Другие настройки: требуется настройка учётных данных аккаунта, функция SSO по умолчанию отключена
Для обеспечения высокой доступности Harbor внешние зависимости должны соответствовать следующим условиям:
- Экземпляры
RedisиPostgreSQLдолжны быть высокодоступными - Балансировщик нагрузки в сети должен быть высокодоступным; при использовании ALB необходимо настроить VIP
- В кластере должно быть более 2 узлов
Завершите развертывание, заполнив соответствующую информацию согласно подсказкам шаблона.
Развертывание из шаблона Harbor Object Storage
Развёртывание экземпляра Harbor с использованием объектного хранилища.
- Вычислительные ресурсы: 8 ядер CPU, 16 Gi памяти
- Хранилище: файлы образов используют объектное хранилище, логи фоновых задач — базу данных
- Сетевой доступ: доступ через Ingress, указать доменное имя
- Зависимости: настройка учётных данных доступа к существующим Redis и PostgreSQL
- Другие настройки: настройка учётных данных аккаунта, функция SSO по умолчанию отключена
В этом шаблоне сканер Trivy не сохраняет данные; он монтирует emptyDir, поэтому при каждом перезапуске пода база данных уязвимостей загружается заново, и новые сканирования временно блокируются до завершения синхронизации.
Убедитесь, что предоставленные учётные данные объектного хранилища имеют необходимые разрешения API S3, см. Учётные данные объектного хранилища.
Завершите развертывание, заполнив соответствующую информацию согласно подсказкам шаблона.
Развертывание из YAML
Развертывание из YAML — это самый базовый и мощный способ развертывания. Здесь приведены соответствующие YAML-фрагменты для каждого аспекта из раздела Планирование развертывания, а также два полных примера YAML для типовых сценариев, чтобы помочь пользователям понять метод конфигурации YAML и при необходимости внести изменения.
Высокая доступность (фрагменты YAML)
В режиме высокой доступности количество реплик компонентов Harbor должно быть не менее 2. Фрагмент конфигурации YAML:
Хранилище (фрагменты YAML)
Хранение данных Harbor включает три основные части:
- Registry: управление и хранение образов контейнеров и артефактов. Обеспечивает операции загрузки, скачивания и хранения образов.
- Jobservice: выполнение фоновых задач, таких как репликация образов между реестрами, сбор мусора и другие запланированные или по требованию задачи.
- Trivy: выполнение сканирования образов на уязвимости для выявления проблем безопасности и обеспечения соответствия политикам безопасности.
В настоящее время поддерживаются три метода конфигурации хранилища: класс хранилища, PVC и локальное node storage. При использовании класса хранилища или PVC хранилище должно поддерживать многозадачное чтение и запись (ReadWriteMany).
Для Registry также можно использовать объектное хранилище (S3) в качестве бэкенда.
Jobservice поддерживает хранение логов заданий в нескольких местах (файл, база данных, stdout). Если вы не выбрали вывод логов jobservice в файл, настройка хранилища для jobservice не требуется. Подробнее см. Настройка хранения логов заданий.
Фрагмент конфигурации класса хранилища:
Фрагмент конфигурации 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
Это фрагмент конфигурации для учётных данных Redis в экземпляре Harbor после настройки ресурса secret с учётными данными Redis:
Пример для standalone:
Пример для Sentinel:
Конфигурация учётных данных доступа PostgreSQL
Это фрагмент конфигурации для учётных данных PostgreSQL в экземпляре Harbor после настройки ресурса secret с учётными данными PostgreSQL:
Конфигурация учётных данных администратора
Это фрагмент конфигурации для учётных данных администратора в экземпляре Harbor после настройки ресурса secret с учётными данными аккаунта:
Полный пример YAML: одиночный экземпляр, node storage, сетевой доступ NodePort
Полный пример YAML: высокая доступность, StorageClass, сетевой доступ Ingress
Последующие операции
Настройка единой аутентификации (SSO)
Вы можете изменить режим аутентификации с базы данных на OIDC только если в базе данных нет локальных пользователей. Если в базе данных Harbor есть хотя бы один пользователь, кроме администратора, изменить режим аутентификации нельзя.
Подробности см.: Настройка аутентификации через OIDC
Настройка SSO включает следующие шаги:
- Зарегистрировать клиента аутентификации SSO в global cluster
- Подготовить конфигурацию аутентификации SSO
- Настроить экземпляр Harbor для использования аутентификации SSO
Создайте следующий ресурс OAuth2Client в global cluster для регистрации клиента аутентификации 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.
Связанные вопросы сообщества: