Harbor – это облачный реестр с открытым исходным кодом, который хранит, подписывает и сканирует образы контейнеров на наличие уязвимостей.
Это руководство покажет вам как установить Harbor Image Registry в Kubernetes / OpenShift с помощью чарта Helm.
Вот некоторые из интересных особенностей реестра образов Harbour:
Особенности Harbour
- Поддержка Multi-tenant
- Поддержка анализа безопасности и уязвимостей
- Расширяемый API и веб-интерфейс
- Подписание и проверка контента
- Репликация образов в нескольких экземплярах Harbour
- Интеграция и контроль доступа на основе ролей
Helm – это инструмент интерфейса командной строки (CLI), созданный для упрощения развертывания приложений и сервисов в кластерах Kubernetes / OpenShift
Helm использует формат упаковки, называемый чартами.
Чарт Helm – это набор файлов, описывающих ресурсы Kubernetes.
Шаг 1: Установка Helm 3 на Linux / macOS
Helm имеет бинарник, что означает, что для его установки на вашем компьютере Linux / macOS не требуется никаких зависимостей:
--- Linux ---
sudo curl -L https://mirror.openshift.com/pub/openshift-v4/clients/helm/latest/helm-linux-amd64 -o /usr/local/bin/helm
sudo chmod +x /usr/local/bin/helm
--- macOS ---
sudo curl -L https://mirror.openshift.com/pub/openshift-v4/clients/helm/latest/helm-darwin-amd64 -o /usr/local/bin/helm
sudo chmod +x /usr/local/bin/helm
Проверьте установленную версию:
$ helm version version.BuildInfo{Version:"v3.1+unreleased", GitCommit:"7ebdbb86fca32c77f2fce166f7f9e58ebf7e9946", GitTreeState:"clean", GoVersion:"go1.13.4"}
Шаг 2: Установите чарт Harbor в Kubernetes / OpenShift кластере
Чарт – это пакет Helm.
Он содержит все определения ресурсов, необходимые для запуска приложения, инструмента или службы внутри кластера Kubernetes.
Добавьте репозиторий Harbour Helm:
$ helm repo add harbor https://helm.goharbor.io
"harbor" has been added to your repositories
$ helm repo update
Настройка чарта
Элементы конфигурации могут быть установлены с помощью флага –set во время установки или настроены путем непосредственного редактирования values.yaml.
Вы можете скачать файл values.yaml по умолчанию.
wget https://raw.githubusercontent.com/goharbor/harbor-helm/master/values.yaml
vim values.yaml
$ helm install harbor harbor/harbor -f values.yaml -n harbor
NAME: harbor
LAST DEPLOYED: Wed Apr 1 19:20:07 2020
NAMESPACE: harbor
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Please wait for several minutes for Harbor deployment to complete.
Then you should be able to visit the Harbor portal at https://hbr.apps.hqocp.safaricom.net.
For more details, please visit https://github.com/goharbor/harbor.
Проверьте статус, чтобы подтвердить его развертывание:
$ helm status harbor
Исправление инициализации:CrashLoopBackOff в поде harbor-harbor-database на OpenShift
Некоторые образы контейнеров, такие как postgres и redis, требуют рутового доступа и имеют определенные ожидания относительно владения томами.
Нам нужно ослабить безопасность в кластере, чтобы образы не запускались как предварительно выделенный UID, не предоставляя всем доступ к привилегированному SCC:
Предоставьте всем аутентифицированным пользователям доступ к anyuid SCC:
$ oc adm policy add-scc-to-group anyuid system:authenticated
Проверьте статус ваших развертываний:
$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
harbor-harbor-chartmuseum 1/1 1 1 24m
harbor-harbor-clair 1/1 1 1 24m
harbor-harbor-core 1/1 1 1 24m
harbor-harbor-jobservice 1/1 1 1 24m
harbor-harbor-notary-server 1/1 1 1 24m
harbor-harbor-notary-signer 1/1 1 1 24m
harbor-harbor-portal 1/1 1 1 24m
harbor-harbor-registry 1/1 1 1 24m
Проверьте статус подов:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
harbor-harbor-chartmuseum-58f8647f95-mtmmf 1/1 Running 0 5m16s
harbor-harbor-clair-654dcfd8bf-77qs6 2/2 Running 0 5m16s
harbor-harbor-core-5cb85989d6-r7s84 1/1 Running 0 5m16s
harbor-harbor-database-0 1/1 Running 0 5m33s
harbor-harbor-jobservice-fc54cf784-lv864 1/1 Running 0 5m16s
harbor-harbor-notary-server-65d8fb7c77-xgxvg 1/1 Running 0 5m16s
harbor-harbor-notary-signer-66c9db4cf4-5bwvh 1/1 Running 0 5m16s
harbor-harbor-portal-5cbc6d5897-r5wzh 1/1 Running 0 25m
harbor-harbor-redis-0 1/1 Running 0 5m16s
harbor-harbor-registry-7ff65976f4-sgnnd 2/2 Running 0 5m16s
Посмотрите последние созданные сервисы и ингрессы:
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
harbor-harbor-chartmuseum ClusterIP 172.30.161.108 <none> 80/TCP 26m
harbor-harbor-clair ClusterIP 172.30.133.154 <none> 8080/TCP 26m
harbor-harbor-core ClusterIP 172.30.29.180 <none> 80/TCP 26m
harbor-harbor-database ClusterIP 172.30.199.219 <none> 5432/TCP 26m
harbor-harbor-jobservice ClusterIP 172.30.86.18 <none> 80/TCP 26m
harbor-harbor-notary-server ClusterIP 172.30.188.135 <none> 4443/TCP 26m
harbor-harbor-notary-signer ClusterIP 172.30.165.7 <none> 7899/TCP 26m
harbor-harbor-portal ClusterIP 172.30.41.233 <none> 80/TCP 26m
harbor-harbor-redis ClusterIP 172.30.101.107 <none> 6379/TCP 26m
harbor-harbor-registry ClusterIP 172.30.112.213 <none> 5000/TCP,8080/TCP 26m
$ kubectl get ing
NAME HOSTS ADDRESS PORTS AGE
harbor-harbor-ingress core.harbor.domain,notary.harbor.domain
Поскольку я на самом деле делаю это развертывание в OpenShift, у меня будут созданы определенные маршруты.
$ kubectl get route
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD
harbor-harbor-ingress-7f9vg notary.harbor.domain / harbor-harbor-notary-server 4443 edge/Redirect None
harbor-harbor-ingress-9pvvz core.harbor.domain / harbor-harbor-portal 8080 edge/Redirect None
harbor-harbor-ingress-d7mcn core.harbor.domain /c/ harbor-harbor-core 8080 edge/Redirect None
harbor-harbor-ingress-gn5w6 core.harbor.domain /chartrepo/ harbor-harbor-core 8080 edge/Redirect None
harbor-harbor-ingress-jf48l core.harbor.domain /service/ harbor-harbor-core 8080 edge/Redirect None
harbor-harbor-ingress-lhbx4 core.harbor.domain /api/ harbor-harbor-core 8080 edge/Redirect None
harbor-harbor-ingress-vtt8v core.harbor.domain /v2/ harbor-harbor-core 8080 edge/Redirect None
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
data-harbor-harbor-redis-0 Bound pvc-1de4a5b2-d55a-48cc-b8b6-1b258214260c 1Gi RWO ocs-storagecluster-cephfs 29m
database-data-harbor-harbor-database-0 Bound pvc-9754adde-e2bd-40ee-b18b-d72eacfdfc12 1Gi RWO ocs-storagecluster-cephfs 29m
harbor-harbor-chartmuseum Bound pvc-3944fce8-ecee-4bec-b0f6-cc5da3b30572 5Gi RWO ocs-storagecluster-cephfs 29m
harbor-harbor-jobservice Bound pvc-5ecf0be4-002c-4628-8dcc-283e996175bc 1Gi RWO ocs-storagecluster-cephfs 29m
harbor-harbor-registry Bound pvc-072358e9-06f2-4384-b7d6-88e97eb29499 5Gi RWO ocs-storagecluster-cephfs 29m
Шаг 3: Доступ к панели управления Harbour
Используйте внешний домен, настроенный во время установки, для доступа к панели мониторинга реестра контейнера Harbour.
Креды по умолчанию:
Username: admin Password: Harbor12345
Не забудьте сразу сменить пароль!