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
Проверьте установленную версию:
$ <strong>helm version</strong>
version.BuildInfo{Version:"<strong>v3.1</strong>+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
Установите чарт Harbor с пользовательскими настройками после внесения изменений.
$ 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
1 | $ 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
Также создан ряд pvc!
Подбирая значения указанного вами размера.
$ 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
использовать Harbor для сканирования образов Docker на наличие уязвимостей
Harbor – это локальный реестр Docker, который, будучи собранным с поддержкой Clair, позволяет сканировать спушенные образы на наличие известных уязвимостей.
Это должно считаться обязательным в компаниях, которые полагаются на контейнеры.
Но как использовать Harbour для сканирования этих образов?
Давайте посмотрим.
Что вам нужно
Самое главное, вам понадобится это Harbor (с поддержкой Clair).
Вам также понадобятся образа для отправки на сервер Harbor и учетную запись пользователя на сервере Harbour.
Сертификаты
Если вы планируете передавать образы с компьютеров в вашей сети (которые не являются вашим сервером Harbour), вам необходимо скопировать сертификаты с сервера Harbour на клиенты.
Если вы следовали инструкциям по установке Harbor, возможно, вы используете самозаверенные сертификаты.
Я собираюсь предположить, что это так.
И так … вот как скопировать эти сертификаты с сервера на клиент:
- подключитесь по ssh (или войдите в консоль) к серверу Harbor.
- Получите root-доступ с помощью команды sudo -s.
- Перейдите в каталог сертификатов с помощью команды cd /etc/docker/certs.d/SERVER_IP (где SERVER_IP – это IP-адрес вашего сервера).
- Скопируйте ключ ca.cert на клиент с помощью команды scp ca.cert USER @ CLIENT_IP: / home / USER (где USER – имя пользователя на клиентском компьютере, а CLIENT_IP – IP-адрес клиентского компьютера).
- Скопируйте ключ ca.crt на клиент с помощью команды scp ca.crt USER @ CLIENT_IP: / home / USER (где USER – это имя пользователя на клиентском компьютере, а CLIENT_IP – это IP-адрес клиентского компьютера).
- Скопируйте клиентский ключ ca.key с помощью команды scp ca.key USER @ CLIENT_IP: / home / USER (где USER – это имя пользователя на клиентском компьютере, а CLIENT_IP – это IP-адрес клиентского компьютера).
- SSH к клиентскому компьютеру с помощью команды ssh USER @ CLIENT_IP (где USER – имя пользователя на клиентском компьютере, а CLIENT_IP – IP-адрес клиентского компьютера).
- Создайте новый каталог сертификатов с помощью команды sudo mkdir -p /etc/docker/certs.d/SERVER_IP (где SERVER_IP – это IP-адрес сервера Harbour).
- Скопируйте файлы с помощью команды sudo cp ca. * /etc/docker/certs.d/SERVER_IP (где SERVER_IP – IP-адрес сервера Harbor).
Теперь ваш клиент должен иметь возможность войти в репозиторий Harbor и отправлять образы.
Пометка образов ( теги )
Прежде чем отправить образ с клиента на сервер, сначала необходимо пометить его.
Допустим, у вас есть официальный образ Ubuntu, и вы хотите пометить его конкретным именем разработчика.
Чтобы пометить его так, чтобы его можно было перенести в реестр Harbor, команда tag будет выглядеть так:
docker tag ubuntu SERVER_IP/PROJECT_NAME/ubuntu:DEVNAME
Где:
- SERVER_IP – это IP-адрес сервера Harbour.
- PROJECT_NAME – это имя проекта на сервере Harbour.
- DEVNAME: имя разработчика, которого вы хотите пометить.
Таким образом, команда может выглядеть так:
docker tag ubuntu 192.168.1.75/test/ubuntu:jack
Пушинг образа
Сначала вы должны войти в реестр на сервере Harbor.
Для этого выполните команду:
docker login SERVER_IP
Где SERVER_IP – это IP-адрес сервера Harbor.
Вам будет предложено ввести имя пользователя и пароль пользователя на сервере Harbour.
После входа в систему вы можете спушить образ с помощью команды:
docker push 192.168.1.75/test/ubuntu:jack
После завершения вы готовы отсканировать образ на наличие уязвимостей.
Сканирование образа
Войдите в свой реестр Harbor и перейдите к проекту, в котором размещен недавно подтянутый образ
Вы должны увидеть образ в списке:
Щелкните на новый образ и в появившемся окне установите флажок, связанный с тегом образа.
После выбора нажмите кнопку SCAN, чтобы начать сканирование.
Когда сканирование завершится, вы увидите полосу, представляющую результаты сканирования.
Наведите курсор на эту полосу, чтобы просмотреть отчет:
Если вы нажмете на имя тега, вы увидите полный отчет, в котором представлены полные результаты, включая CVE для каждой уязвимости:
Прокрутите весь отчет, чтобы просмотреть все уязвимости.
Если вы обнаружите, что образ содержит слишком много общих уязвимостей или достаточно средних или высоких уязвимостей, я предлагаю не использовать его.
Но важно просканировать эти уязвимости!
Источник: https://sidmid.ru/harbor-реджестри-образов-в-kubernetes-сканировани/