====== NPO Hosting Image Registry ======
Voor alle afnemers van OpenShift bieden wij bij NPO Hosting ook een Image Registry aan voor het opslaan van Docker Images. Dit Registry bied een aantal voordelen:
* Onderhouden en beheerd door NPO Hosting
* Geen problemen met Pull- of Ratelimits
* Automatische vulnerability scanning op Images
* Projecten in OpenShift hebben automatisch toegang
Op deze pagina leggen we uit hoe deze gebruikt kan worden.
===== Harbor =====
Ons registry is gebaseerd op het Open Source project [[https://goharbor.io/|Harbor]] en omvat een aantal functionaliteiten:
* Multi Tenancy
* Storage ligt op Amazon S3
* Standaard vulnerability scanning
* Configureerbare Retention Policy's
Het registry is beschikbaar via https://registry.npohosting.nl
===== Eerste keer inloggen =====
Wanneer je gebruik wilt gaan maken van het Registry moet je eerst inloggen op https://registry.npohosting.nl. Hier kan je gewoon inloggen met je SSO account. Eenmaal ingelogd moet een medewerker van Hosting & Streaming het account nog toevoegen aan de juiste groepen zodat ook werkelijk Repository's beschikbaar zijn.
Voor elke afnemer wordt een Repository aanmaken. Binnen deze Repository kan je zelf verschillende Images plaatsen. Voor elk Repository hebben we een aantal dingen standaard geconfigureerd:
* Er is een quota van 16Gb storage per repository.
* Alle Images die worden gepushed worden gecontroleerd op vulnerabilities.
* Images waarin "Critical" vulnerabilities zitten kunnen standaard niet opgehaald worden.
* Een Robot (Service) account die automatisch wordt toegevoegd aan de OpenShift Projecten voor het verlenen van toegang vanuit OpenShift.
Eenmaal ingelogged zie je een overzicht van alle "Projects" waar je toegang tot hebt. Dat zijn een aantal publieke projecten, en natuurlijk je eigen Project. In deze documentatie gebruik ik het ''hens'' Project als voorbeeld.
{{:chp:handleidingen:npo-hosting-image-registry:20240209-105425.png?600}}
===== Registry Web UI =====
Als je eenmaal bent ingelogged kan je kiezen om naar je Project te gaan, je krijgt dan deze pagina te zien:
{{:chp:handleidingen:npo-hosting-image-registry:20240209-110717.png?400}}
Op deze pagina zie je alle Images die je in je Project hebt staan (in dit voorbeeld alleen een ''nginx'' image). Je ziet ook hoeveel "Artifacts" een Image heeft. Artifacts verwijzen in dit geval naar werkelijke Images. Verder kan je zien hoeveel "Pulls" er zijn geweest en wanneer het image voor het laatst is aangepast.
Als je vervolgens op het Image klikt, krijg je een pagina met een overzicht van "Artifacts":
{{:chp:handleidingen:npo-hosting-image-registry:20240209-110902.png?400}}
Je ziet de volgende kolommen:
* Artifacts: dit is een unieke sha die naar het werkelijke image verwijst, je kan deze sha rechtstreeks gebruiken om een image te pullen in plaats van een tag.
* Tags: welke tags er aan elk Image zijn toegewezen.
* Signed: deze functie wordt (nog) niet ondersteund.
* Size: Hoe groot het image is.
* Vulnerabilities: welke kwetsbaarheden er in het image zit.
* Labels: eventuele labels.
* Push time: wanneer het image gemaakt is.
===== Push & Pull van Images =====
==== Lokaal ====
Als je lokaal, bijvoorbeeld met Docker, Images wil Pushen en Pullen naar je Repository, dan moet je eerst inloggen. Daarvoor moet je eerst naar de [[https://registry.npohosting.nl|Web UI]] en inloggen met de SSO, dan kan je rechtsboven op je naam klikken en vervolgens kiezen voor "User Profile":
{{:chp:handleidingen:npo-hosting-image-registry:20240209-105921.png?200}}
Vervolgens wordt onderstaande venster getoond:
{{:chp:handleidingen:npo-hosting-image-registry:20240209-105958.png?400}}
Uit dit venster heb je de "Username" en "CLI secret" nodig om te kunnen inloggen met Docker:
docker login -u Tim_Sterk registry.npohosting.nl
Password:
Login Succeeded
Vervolgens kan je nu een Docker image gaan bouwen en Pushen. Voor dit voorbeeld heb ik een simpele Dockerfile gemaakt met Nginx:
FROM nginx:alpine
Deze kan ik nu bouwen en daarna Pushen:
docker build . -t registry.npohosting.nl/hens/nginx:alpine
[+] Building 0.2s (5/5) FINISHED docker:desktop-linux
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 55B 0.0s
=> [internal] load metadata for docker.io/library/nginx:alpine 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/1] FROM docker.io/library/nginx:alpine 0.1s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:de39847e78f8b36e9a1c5c982a7c5297c93c81cd668c445d963cbff5e3a7cb95 0.0s
=> => naming to registry-test.npohosting.nl/hens/nginx:alping 0.0s
What's Next?
View a summary of image vulnerabilities and recommendations → docker scout quickview
Wanneer die gebouwd is, kan ik hem Pushen:
docker push registry-test.npohosting.nl/hens/nginx:alpine
The push refers to repository [registry-test.npohosting.nl/hens/nginx]
a34b395c0ca3: Pushed
5e728486380e: Pushed
b968c967e155: Pushed
92ef9174e989: Pushed
28c7b3c0b176: Pushed
fbed1f6990ee: Pushed
dd731ddf52be: Pushed
9fe9a137fd00: Pushed
alpine: digest: sha256:ddfea4c6a445bbb043aed9b6b8ae9ab7b858ac01728c331cf3a465e2abb949a7 size: 1989
Je kan hem nu ook in de Web UI terugvinden:
{{:chp:handleidingen:npo-hosting-image-registry:20240209-110552.png?400}}
==== Vanuit OpenShift ====
==== Voorbeeld met een BuildConfig ====
Veel afnemers maken gebruik van BuildConfig's in OpenShift om hun images te bouwen. Standaard worden de images gepushed naar de interne registry van OpenShift, maar met CHP5 is het aan te raden deze naar het NPO Hosting Registry te sturen. Hiervoor moet je de volgende stappen ondernemen:
* Maak een secret aan met de juiste credentials van het Robot account, het aanmaken van het secret gebeurd in het nieuwe cluster automatisch bij het aanmaken van het Project.
oc create secret docker-registry npohosting-harbor --docker-server=registry.npohosting.nl --docker-username= --docker-password=
* Link dit secret aan zowel het default serviceaccount als de builder serviceaccount. Worden er andere serviceaccounts gebruikt, dan moeten die ook gelinked worden aan het secret:
oc secrets link default npohosting-harbor --for=pull,mount
oc secrets link builder npohosting-harbor --for=pull,mount
* Pas in de BuildConfig het volgende stukje aan:
output:
to:
kind: ImageStreamTag
name: demo-app:latest
* Pas dit aan naar:
output:
to:
kind: DockerImage
name: registry.npohosting.nl/hens/demo-app:latest
* Daarna moeten we de imagestream aanpassen:
oc get imagestream demo-app
NAME IMAGE REPOSITORY TAGS UPDATED
demo-app openshift-image-registry.apps.cluster.chp4.io/hens-buildconfig-ext-registry/demo-app latest About a minute ago
* Hierin vervangen we:
spec:
lookupPolicy:
local: false
* Door:
tags:
- annotations: null
from:
kind: DockerImage
name: registry.npohosting.nl/hens/demo-app:latest
importPolicy:
scheduled: true
name: latest
referencePolicy:
type: Source
Met deze manier van werken is het wel nodig dat de ImageStream verteld wordt dat er een nieuw Image klaar staat in het Registry. Dit kan je automatisch laten doen met:
importPolicy:
scheduled: true
Dit kan alleen 15/20 minuten duren. Je kan dit daarnaast ook met de hand starten:
oc import-image demo-app
Na de import wordt het image op de normale manier verder uitgerold.