• Русский
  • Развертывание экземпляра Harbor

    В этом документе описывается подписка на Harbor Operator и функциональность, основанная на развертывании экземпляра Harbor.

    Ограничения уровня допуска безопасности Pod

    Требования к уровню допуска безопасности Pod Security Admission (PSA) для развертывания Harbor зависят от используемого метода хранения:

    1. Хранение HostPath: уровень PSA должен быть настроен как Privileged, поскольку тома hostPath не разрешены при политике Restricted.

    2. Хранение PVC или StorageClass: Harbor может быть развернут с уровнем PSA Restricted.

    Поддерживаемые уровни PSA для каждого шаблона развертывания:

    Шаблон развертыванияПоддерживаемые уровни PSA
    Шаблон быстрого старта HarborPrivileged
    Шаблон высокой доступности HarborPrivileged, Baseline, Restricted
    Шаблон объектного хранения HarborPrivileged, Baseline, Restricted

    Содержание

    Предварительные требованияПланирование развертыванияОсновная информацияПланирование ресурсов перед развертываниемПланирование конфигурации после развертыванияРазвертывание экземпляраРазвертывание из шаблона 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, а также влияние ключевых решений, чтобы помочь пользователям осуществлять последующие конкретные развертывания экземпляров на основе этой информации.

    Основная информация

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

    2. Экземпляр 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 памяти для стабильной работы.

    Хранение

    Руководство по выбору хранилища
    КомпонентПоддерживаемый тип хранилищаОписание
    Registryобъектное хранилище (например, MinIO)
    файловое хранилище (например, Ceph FS)
    Для сценариев с высокой конкуренцией при загрузке образов рекомендуется использовать объектное хранилище и включить функцию перенаправления.
    Последовательная пропускная способность диска хранения (с размером блока 1 МБ) должна быть не ниже 100 МиБ/с.
    JobServiceфайловое хранилище (например, Ceph FS)Логи заданий также могут храниться в базе данных, в этом случае настройка хранилища для JobService не требуется.
    Trivyфайловое хранилище (например, Ceph FS)Хранит базу данных уязвимостей и кэш; сохранение данных необязательно.
    Без сохранения используется emptyDir, поэтому при перезапуске пода база данных загружается заново, и сканирование временно приостанавливается.
    • Для Harbor можно использовать общие методы хранения, предоставляемые платформой, такие как классы хранения, постоянные тома (PVC), node storage и др.

    • Чтобы намеренно отказаться от сохранения данных для Trivy, оставьте spec.helmValues.persistence.persistentVolumeClaim.trivy.storageClass неустановленным. Тогда база уязвимостей будет храниться в emptyDir, и при каждом перезапуске пода Trivy происходит повторная загрузка базы и временная блокировка сканирования.

    • Node storage не подходит для режима высокой доступности, так как хранит файлы в указанном пути на хост-узле.

    • Кроме того, Harbor поддерживает объектное хранилище. Инструкции по настройке см. в разделе Использование объектного хранилища в качестве бэкенда реестра.

    Не используйте NFS в качестве бэкенда хранения

    Не рекомендуется использовать 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

    Руководство по выбору хранилища для компонента Redis

    Рекомендуется использовать блочное хранилище (например, TopoLVM) для достижения более высокой IOPS и низкой задержки.

    PostgreSQL

    Руководство по выбору хранилища для компонента PostgreSQL

    Рекомендуется использовать блочное хранилище (например, TopoLVM) для достижения более высокой IOPS и низкой задержки.

    Учётные данные аккаунта

    При инициализации экземпляра 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 внешние зависимости должны соответствовать следующим условиям:

    1. Экземпляры Redis и PostgreSQL должны быть высокодоступными
    2. Сетевой балансировщик нагрузки должен быть высокодоступным; при использовании ALB необходимо настроить VIP
    3. В кластере должно быть более 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:

    spec:
      helmValues:
        core:
          replicas: 2
        portal:
          replicas: 2
        jobservice:
          replicas: 2
        registry:
          replicas: 2

    Хранение (фрагменты YAML)

    Хранение данных Harbor включает три основных части:

    • Registry: управляет и хранит образы контейнеров и артефакты, обрабатывает операции загрузки, скачивания и хранения образов.
    • Jobservice: выполняет фоновые задачи, такие как репликация образов между реестрами, сбор мусора и другие запланированные или по требованию задания.
    • Trivy: выполняет сканирование образов на уязвимости для выявления проблем безопасности и обеспечения соответствия политикам безопасности.

    В настоящее время поддерживаются три метода конфигурации хранения: StorageClass, PVC и локальное node storage. При использовании StorageClass или PVC хранилище должно поддерживать многозадачное чтение и запись (ReadWriteMany).

    Для Registry также можно использовать объектное хранилище (S3) в качестве бэкенда.

    Jobservice поддерживает хранение логов заданий в нескольких местах (файл, база данных, stdout). Если вы не выбрали вывод логов jobservice в файл, настройка хранилища для jobservice не требуется. Подробности см. в Настройка хранения логов заданий.

    Фрагмент конфигурации StorageClass:

    spec:
      helmValues:
        persistence:
          enabled: true
          persistentVolumeClaim:
            registry:
              storageClass: ceph
              accessMode: ReadWriteMany
              size: 10Gi
            jobservice:
              jobLog:
                storageClass: ceph
                accessMode: ReadWriteMany
                size: 1Gi
            trivy:
              storageClass: ceph
              accessMode: ReadWriteMany
              size: 5Gi
    

    Фрагмент конфигурации PVC (PVC должны быть созданы заранее):

    spec:
      helmValues:
        harbor:
          persistence:
            enabled: true
            persistentVolumeClaim:
              registry:
                existingClaim: <PVC компонента registry>
              jobservice:
                jobLog:
                  existingClaim: <PVC компонента jobservice>
              trivy:
                existingClaim: <PVC компонента trivy>

    Фрагмент конфигурации локального node storage:

    spec:
      helmValues:
        persistence:
          enabled: true
          hostPath:
            registry:
              path: <путь node storage компонента registry>
            jobservice:
              path: <путь node storage компонента jobservice>
            trivy:
              path: <путь node storage компонента trivy>
        registry:
          nodeSelector:
            kubernetes.io/hostname: <имя узла>
        jobservice:
          nodeSelector:
            kubernetes.io/hostname: <имя узла>
        trivy:
          nodeSelector:
            kubernetes.io/hostname: <имя узла>

    Настройка объектного хранилища (S3) в качестве бэкенда хранения Registry:

    • Используйте Amazon S3 или совместимые с S3 сервисы, такие как MinIO, Ceph.

    • Корзина объектного хранилища должна быть создана заранее.

    • Секрет <object-storage-secret> должен быть создан заранее.

      spec:
        helmValues:
          harbor:
            persistence:
              enabled: true
              imageChartStorage:
                disableredirect: true
                s3:
                  existingSecret: <object-storage-secret>
                  bucket: <bucket>
                  region: <region>
                  regionendpoint: <regionendpoint>
                  v4auth: true
                type: s3
              persistentVolumeClaim:
                jobservice:
                  jobLog:
                    existingClaim: <PVC компонента jobservice>
                trivy:
                  existingClaim: <PVC компонента trivy>
    ПолеОписаниеПример значения
    object-storage-secretСекрет, содержащий ключ доступа и секретный ключ S3, подробности см. в Учётных данных объектного хранилищаobject-storage-secret
    bucketИмя корзины объектного хранилища, которая должна быть создана заранееharbor-registry
    regionendpointURL конечной точки сервиса объектного хранилища (включая порт, если требуется)http://192.168.133.37:32227
    regionРегион объектного хранилища (обычно us-east-1 для MinIO)us-east-1
    disableredirectУстановите в false для включения перенаправления и улучшения производительности pull. Harbor будет возвращать временные URL S3 для слоёв, поэтому клиенты должны иметь доступ к S3true

    Подробности см. в драйвере хранения S3.

    Если вы хотите использовать Ceph на платформе, обратитесь к Ceph Distributed Storage.

    INFO

    В настоящее время Harbor поддерживает настройку использования S3 только для компонента Registry. Другие компоненты продолжают использовать PVC или StorageClass для постоянного хранения.

    Сетевой доступ (фрагменты YAML)

    Сетевой доступ включает два основных метода: доступ по доменному имени и доступ через NodePort.

    Фрагмент конфигурации доступа по доменному имени:

    spec:
      helmValues:
        expose:
          type: ingress
          tls:
            enabled: false
          ingress:
            hosts:
              core: <доменное имя>
    
        externalURL: http://<доменное имя>

    Фрагмент конфигурации доступа через NodePort:

    spec:
      helmValues:
        expose:
          type: nodePort
          nodePort:
            name: harbor
            ports:
              http:
                port: 80
                nodePort: <номер порта>
    
        externalURL: http://<IP узла>:<номер порта>

    Конфигурация учётных данных доступа Redis

    Это фрагмент конфигурации для этих учётных данных в экземпляре Harbor после настройки ресурса secret с учётными данными Redis:

    Пример для standalone:

    spec:
      helmValues:
        database:
        redis:
          external:
            addr: "<адрес доступа к redis>:<порт redis>"
            existingSecret: <секрет с паролем redis>
            existingSecretKey: password
          type: external

    Пример для Sentinel:

    spec:
      helmValues:
        database:
        redis:
          external:
            addr: "<адрес sentinel1>:<порт sentinel1>,<адрес sentinel2>:<порт sentinel2>,<адрес sentinel3>:<порт sentinel3>"
            sentinelMasterSet: mymaster
            existingSecret: <секрет с паролем redis>
            existingSecretKey: password
          type: external
    Пример Redis с TLS
    apiVersion: v1
    kind: Secret
    metadata:
      name: redis-ca-bundle
    type: Opaque
    stringData:
      ca.crt: |
        -----BEGIN CERTIFICATE-----
        <корневой сертификат redis сервера>
        -----END CERTIFICATE-----
    ---
    spec:
      helmValues:
        caBundleSecretName: redis-ca-bundle
        redis:
          external:
            addr: "<адрес доступа к redis>:<порт tls redis>"
            existingSecret: <секрет с паролем redis>
            existingSecretKey: password
            tlsOptions:
              enable: true
          type: external

    Примечания по 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:

    spec:
      helmValues:
        database:
          external:
            host: <адрес доступа к postgresql>
            port: <порт postgresql>
            sslmode: <включён ли ssl>
            username: <имя пользователя postgresql>
            coreDatabase: <имя базы данных>
            existingSecret: <секрет с паролем postgresql>
          type: external

    Конфигурация учётных данных администратора

    Это фрагмент конфигурации для этих учётных данных в экземпляре Harbor после настройки ресурса secret с учётными данными аккаунта:

    spec:
      helmValues:
        existingSecretAdminPassword: <секрет с паролем администратора harbor>
        existingSecretAdminPasswordKey: password

    Полный пример YAML: одиночный экземпляр, node storage, сетевой доступ NodePort

    
    spec:
      helmValues:
        existingSecretAdminPassword: harbor-password # Секрет с паролем администратора harbor
        existingSecretAdminPasswordKey: password # Ключ секрета с паролем администратора harbor
        externalURL: http://192.168.142.11:32001 # Адрес доступа к Harbor
        expose:
          nodePort:
            name: harbor
            ports:
              http:
                nodePort: 32001 # Номер порта NodePort Harbor
                port: 80
          type: nodePort
        persistence:
          enabled: true
          hostPath:
            jobservice:
              path: /data/harbor/jobservice # Путь node storage компонента jobservice
            registry:
              path: /data/harbor/registry # Путь node storage компонента registry
            trivy:
              path: /data/harbor/trivy # Путь node storage компонента trivy
        portal:
          resources:
            request:
              cpu: 100m
              memory: 128Mi
            limit:
              cpu: 200m
              memory: 256Mi
        nginx:
          resources:
            request:
              cpu: 100m
              memory: 128Mi
            limit:
              cpu: 200m
              memory: 256Mi
        core:
          resources:
            request:
              cpu: 200m
              memory: 256Mi
            limit:
              cpu: 400m
              memory: 512Mi
        registry:
          nodeSelector:
            kubernetes.io/hostname: 192.168.142.11 # Node selector компонента registry
          resources:
            request:
              cpu: 200m
              memory: 512Mi
            limit:
              cpu: 400m
              memory: 1Gi
        jobservice:
          nodeSelector:
            kubernetes.io/hostname: 192.168.142.11 # Node selector компонента jobservice
          resources:
            request:
              cpu: 200m
              memory: 256Mi
            limit:
              cpu: 400m
              memory: 512Mi
        trivy:
          skipUpdate: true
          offlineScan: true
          nodeSelector:
            kubernetes.io/hostname: 192.168.142.11 # Node selector компонента trivy
          resources:
            request:
              cpu: 200m
              memory: 512Mi
            limit:
              cpu: 400m
              memory: 1Gi
        database:
          external:
            host: harbor-database # Адрес доступа к базе данных
            port: 5432 # Порт базы данных
            sslmode: require # Включён ли SSL
            username: harbor # Имя пользователя базы данных
            coreDatabase: registry # Имя базы данных
            existingSecret: harbor-database # Секрет с паролем базы данных
            existingSecretKey: password # Ключ секрета с паролем базы данных
          type: external
        redis:
          external:
            addr: harbor-redis:6379 # Адрес и порт доступа к Redis
            existingSecret: harbor-redis # Секрет с паролем Redis
            existingSecretKey: password # Ключ секрета с паролем Redis
          type: external

    Полный пример YAML: высокая доступность, StorageClass, сетевой доступ Ingress

    spec:
      helmValues:
        existingSecretAdminPassword: harbor-password # Секрет с паролем администратора harbor
        existingSecretAdminPasswordKey: password # Ключ секрета с паролем администратора harbor
        externalURL: http://harbor.example.com # Адрес доступа к Harbor
        expose:
          type: ingress
          tls:
            enabled: false
          ingress:
            hosts:
              core: harbor.example.com # Доменное имя Harbor
        persistence:
          enabled: true
          persistentVolumeClaim:
            registry:
              storageClass: ceph # StorageClass компонента registry
              accessMode: ReadWriteMany
              size: 10Gi # Размер хранилища компонента registry
            jobservice:
              jobLog:
                storageClass: ceph # StorageClass компонента jobservice
                accessMode: ReadWriteMany
                size: 1Gi # Размер хранилища компонента jobservice
            trivy:
              storageClass: ceph # StorageClass компонента trivy
              accessMode: ReadWriteMany
              size: 5Gi # Размер хранилища компонента trivy
        portal:
          replicas: 2 # Количество реплик компонента portal
          resources:
            request:
              cpu: 200m
              memory: 256Mi
            limit:
              cpu: 400m
              memory: 512Mi
        core:
          replicas: 2 # Количество реплик компонента core
          resources:
            request:
              cpu: 200m
              memory: 256Mi
            limit:
              cpu: 400m
              memory: 512Mi
        registry:
          replicas: 2 # Количество реплик компонента registry
          resources:
            request:
              cpu: 400m
              memory: 1Gi
            limit:
              cpu: 800m
              memory: 2Gi
        jobservice:
          replicas: 2 # Количество реплик компонента jobservice
          resources:
            request:
              cpu: 200m
              memory: 256Mi
            limit:
              cpu: 400m
              memory: 512Mi
        trivy:
          skipUpdate: true
          offlineScan: true
          resources:
            request:
              cpu: 400m
              memory: 1Gi
            limit:
              cpu: 800m
              memory: 2Gi
        database:
          external:
            host: harbor-database # Адрес доступа к базе данных
            port: 5432 # Порт базы данных
            sslmode: require # Включён ли SSL
            username: harbor # Имя пользователя базы данных
            coreDatabase: registry # Имя базы данных
            existingSecret: harbor-database # Секрет с паролем базы данных
            existingSecretKey: password # Ключ секрета с паролем базы данных
          type: external
        redis:
          external:
            addr: harbor-redis:6379 # Адрес и порт доступа к Redis
            existingSecret: harbor-redis # Секрет с паролем Redis
            existingSecretKey: password # Ключ секрета с паролем Redis
          type: external
    

    Последующие операции

    Настройка единой аутентификации (SSO)

    WARNING

    Вы можете изменить режим аутентификации с базы данных на OIDC только если в базе данных не добавлены локальные пользователи. Если в базе данных Harbor есть хотя бы один пользователь, кроме администратора, изменить режим аутентификации нельзя.

    Подробности см.: Настройка аутентификации через OIDC

    Настройка SSO включает следующие шаги:

    1. Зарегистрировать клиент аутентификации SSO в глобальном кластере
    2. Подготовить конфигурацию аутентификации SSO
    3. Настроить экземпляр Harbor для использования аутентификации SSO

    Создайте следующий ресурс OAuth2Client в глобальном кластере для регистрации клиента аутентификации SSO:

    apiVersion: dex.coreos.com/v1
    kind: OAuth2Client
    name: OIDC
    metadata:
      name: nbqxeytpoiwwizlyzpzjzzeeeirsk # Это значение вычисляется на основе хэша поля id, онлайн-калькулятор: https://go.dev/play/p/QsoqUohsKok
      namespace: cpaas-system
    alignPasswordDB: true
    id: harbor-dex # ID клиента
    public: false
    redirectURIs:
      - <адрес доступа к harbor>/c/oidc/callback
    secret: Z2l0bGFiLW9mZmljaWFsLTAK # Секрет клиента
    spec: {}
    ПолеОписаниеПример
    nameОтображаемое имя ресурса.OIDC
    idID клиента для аутентификации SSO. Может быть любым значением.
    id не может быть alauda-dex, это зарезервированное значение, которое может вызвать конфликты.
    harbor-dex
    secretСекрет клиента для аутентификации SSO. Может быть любым значением.Z2l0bGFiLW9mZmljaWFsLTAK
    metadata.nameИмя ресурса, которое должно быть вычислено на основе хэша поля id. Можно использовать онлайн-калькуляторы хэшей, например https://go.dev/play/p/QsoqUohsKok.nbqxeytpoiwwizlyzpzjzzeeeirsk
    redirectURIsURL стороннего продукта. Harbor требует формат: <адрес доступа к harbor>/c/oidc/callbackhttps://harbor.com/c/oidc/callback
    metadata.namespaceСистемное пространство имён платформы. По умолчанию cpaas-system.cpaas-system

    Отредактируйте экземпляр Harbor, добавив следующую конфигурацию:

    spec:
      helmValues:
        oidc:
          enable: true
          clientID: "harbor-dex"
          clientSecret: "Z2l0bGFiLW9mZmljaWFsLTAK"
          issuer: "<адрес доступа к платформе>/dex"

    Настройка HTTPS

    После развертывания экземпляра Harbor HTTPS можно настроить по необходимости.

    Сначала создайте секрет TLS-сертификата в пространстве имён, где расположен экземпляр:

    apiVersion: v1
    kind: Secret
    metadata:
      name: harbor-tls-cert
      namespace: harbor
    type: kubernetes.io/tls
    data:
      tls.crt: <сертификат в base64>
      tls.key: <ключ в base64>

    Затем отредактируйте YAML-конфигурацию экземпляра Harbor для включения HTTPS-доступа:

    expose:
      type: ingress
      tls:
        enabled: true
        certSource: secret
        secret:
          secretName: harbor-tls-cert
      ingress:
        hosts:
          core: <доменное имя>
    
    externalURL: https://<доменное имя>

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

    Функция сканирования образов в Harbor реализована компонентом Trivy. С учётом сетевой среды пользователя, политика базы данных уязвимостей по умолчанию для этого компонента — использование встроенной офлайн-базы уязвимостей. Поскольку база не обновляется, новые уязвимости не обнаруживаются своевременно.

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

    trivy:
      skipUpdate: false
      offlineScan: false

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

    trivy:
      skipJavaDBUpdate: true

    Дополнительная информация

    Развёртывание Harbor в IPv6-среде

    Harbor поддерживает развертывание в IPv6-средах, однако необходимо убедиться, что версии используемых клиентских инструментов поддерживают IPv6. Если возникает ошибка invalid reference format, проверьте поддержку IPv6 в версии вашего клиента.

    Связанные вопросы сообщества: