Установка Harbor Registry на Kubernetes

Обновлено и опубликовано Опубликовано:

Используемые термины: Harbor, Docker, Kubernetes, Helm.

В этой инструкции разберем развертывание Harbor в Kubernetes: установим Harbor registry через официальный Helm-чарт, настроим доступ по HTTPS через Ingress и подключим прокси-кеш Docker Hub.

Подготовка системы

Выполним предварительные настройки.

Подключение Helm-репозитория

Добавим зеркало официального чарта Harbor-helm — им удобно пользоваться, если основной репозиторий недоступен:

helm repo add harbor-mirror https://mirror.yandex.ru/helm/helm.goharbor.io/

* зеркало имеет смысл использовать, если официальный репозиторий helm.goharbor.io недоступен из-за блокировки (в России недоступен). Если доступ есть — используйте официальный источник, зеркало остается точкой доверия, за синхронизацию и целостность которой отвечает третья сторона.

Обновим список репозиториев, чтобы Helm подтянул актуальную версию чарта:

helm repo update

Репозиторий подключен.

Namespace и рабочий каталог

Создадим отдельный namespace для Harbor:

kubectl create namespace harbor

Создадим каталог для файлов конфигурации и перейдем в него:

mkdir -p /opt/harbor && cd /opt/harbor

Настройка values.yml

Опишем параметры Harbor Kubernetes-инсталляции — настройки для Ingress, хранилище и пароль администратора. Откроем файл:

vi values.yml

expose:
  type: ingress
  tls:
    enabled: true
    certSource: none
  ingress:
    ingressClassName: traefik
    hosts:
      core: registry.dmosk.ru
    annotations:
      traefik.ingress.kubernetes.io/router.entrypoints: web,websecure
      traefik.ingress.kubernetes.io/router.tls: "true"
      traefik.ingress.kubernetes.io/router.tls.certresolver: default

externalURL: https://registry.dmosk.ru

persistence:
  enabled: true
  resourcePolicy: "keep"
  persistentVolumeClaim:
    registry:
      storageClass: "local-path"
      size: 100Gi
    jobservice:
      jobLog:
      storageClass: "local-path"
        size: 5Gi
    database:
      storageClass: "local-path"
      size: 10Gi
    redis:
      storageClass: "local-path"
      size: 5Gi
    trivy:
      storageClass: "local-path"
      size: 5Gi

harborAdminPassword: "YourAdminPassword123"

notary:
  enabled: false
trivy:
  enabled: true
chartmuseum:
  enabled: false

internalTLS:
  enabled: false

* где нужно обратить внимание на:

  • expose.ingress.hosts.core — домен, на котором будет доступен Harbor (в нашем примере registry.dmosk.ru).
  • ingressClassName — используемый Ingress-контроллер (в примере traefik).
  • persistence.persistentVolumeClaim — объемы для каждого компонента, storageClass local-path нужно заменить на свой. Посмотреть можно командой kubectl get sc.
  • harborAdminPassword — стандартный пароль администратора (Harbor default password). Если файл values.yml попадет в git, пароль попадет туда же. Для продакшена его обязательно нужно сменить сразу после первого входа.

** ingressClassName: traefik и аннотации traefik.ingress.kubernetes.io/... — специфичны для Traefik. Если в кластере используется другой контроллер (например, ingress-nginx), эти строки нужно заменить на свои: ingressClassName: nginx и аннотации nginx.ingress.kubernetes.io/...

*** storageClass: local-path хранит данные на диске конкретной ноды без репликации — при выходе ноды из строя образы будут потеряны вместе с ней. Для продакшена безопаснее реплицируемое хранилище: сетевой storageClass с репликацией или S3-совместимый бэкенд (например, Garage или MinIO).

**** certSource: none и certresolver: default предполагают, что выпуск сертификатов в кластере уже настроен — через Cert-Manager или встроенный ACME-резолвер Traefik с именем default. Если это не настроено заранее, браузер покажет ошибку сертификата, а docker login завершится с x509: certificate signed by unknown authority.

Файл values.yml готов.

Harbor Helm install: установка чарта

Установим Harbor через Helm с указанием подготовленного values.yml:

helm install harbor harbor-mirror/harbor --namespace harbor --values values.yml

* если мы еще раз сделали правки в файле values и хотим применить новую версию, вместо install используем upgrade:

helm upgrade harbor harbor-mirror/harbor --namespace harbor --values values.yml

Чтобы не хранить пароль администратора в values.yml в открытом виде, значение можно передать отдельным флагом прямо в команде установки — тогда пароль не попадет в файл конфигурации и, соответственно, в git:

helm install harbor harbor-mirror/harbor --namespace harbor --values values.yml --set harborAdminPassword=$HARBOR_ADMIN_PASSWORD

* переменную HARBOR_ADMIN_PASSWORD нужно предварительно экспортировать в shell (export HARBOR_ADMIN_PASSWORD=...) и не хранить в истории команд после установки.

Проксирование Docker Hub через Harbor

Если нужно, чтобы Harbor кешировал образы из Docker Hub — это отдельная функция, к скачиванию образов самого Harbor отношения не имеет и настраивается не в values.yml, а через интерфейс.

Зайдем в Harbor UI под администратором и откроем раздел Administration → Registries. Добавим новый endpoint: Provider — Docker Hub, Endpoint URL — https://hub.docker.com, при необходимости укажем логин и пароль от Docker Hub, чтобы увеличить лимит запросов к API.

Затем в разделе Projects создадим новый проект, включим галку Proxy Cache и выберем только что добавленный endpoint. Образы из Docker Hub станут доступны через путь вида registry.dmosk.ru/<имя-проекта>/library/nginx:latest.

* если логин и пароль от Docker Hub не указывать, прокси-кеш все равно будет работать, но с более низким лимитом анонимных запросов к API Docker Hub.

Проверка установки

Проверим, что все поды Harbor запустились:

kubectl get pods -n harbor

Проверим состояние Helm-релиза:

helm list -n harbor

Мы должны увидеть релиз harbor в статусе deployed.

Harbor готов к работе и доступен по адресу: https://registry.dmosk.ru.

Установка завершена.

# DevOps # Контейнеризация # Серверы # Kubernetes
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет

Дмитрий Моск
— IT-специалист.
Настройка серверов, услуги DevOps.

Заказать настройку контейнеризации

Нужна бесплатная консультация?

Мини-инструкции

Установка и запуск Harbor Registry на Kubernetes с помощью Helm Chart

Как установить и настроить ArgoCD в кластере Kubernetes

Использование Helm для установки Garage S3 в Kubernetes

Как установить и настроить K3S для корректной работы на Linux Ubuntu

Использование приложения Barman для резервного копирования СУБД PostgreSQL

Шпаргалка для docker healthcheck

Как получить бесплатный VDS-сервер в SpaceWeb

Другие инструкции

Все статьи

Нужна помощь? Пишите:






Реклама