

In de snel veranderende wereld van IT neemt ACA Group voortdurend de tijd om innovatieve oplossingen en tools te onderzoeken om onze klanten de beste diensten te kunnen leveren. Onlangs deelden we onze ervaring met Flux, een CloudNative Continuous Deployment tool die GitOps implementeert.
Wat is Harbor?

Harbor is een CloudNative-tool die is ontworpen om gebruik te maken van de flexibiliteit, schaalbaarheid en veerkracht van de cloud. Het is een gecontaineriseerde oplossing die geavanceerde functies biedt zoals het scannen op kwetsbaarheden en een artefactregister. Harbor kan op elke Kubernetes-gebaseerde oplossing in de publieke/private cloud draaien, maar ook op je lokale Kubernetes-cluster. Het is een zelfbeheerde oplossing die moet worden uitgerold op je Kubernetes-cluster. U kunt de componenten kiezen die u wilt implementeren op basis van uw behoeften. Voor sommige functies, zoals het scannen op kwetsbaarheden, kan een keuze worden gemaakt tussen verschillende tools.
De voordelen van Harbor Registry
We zijn enthousiast om Harbor Registry de komende maanden voor onze projecten te gebruiken vanwege de volgende voordelen:
- Harbor is gemakkelijk schaalbaar: Alle componenten kunnen worden ingesteld met meerdere replica's, waardoor onverwachte downtime wordt voorkomen en fail-over wordt geboden. Dit zorgt ervoor dat uw container images altijd beschikbaar zijn wanneer u ze nodig heeft.
- Harbor is samenstelbaar: U kunt alleen de workloads inzetten voor de functies die u gebruikt.
- Harbor is niet alleen een containerregister: het kan bijvoorbeeld ook worden gebruikt als een kaartenmuseum om helikopters op te slaan.
- Harbor is multi-tenant: Projectspecifieke configuratie is mogelijk met specifieke quota en beleidsregels.
Het heeft ook de meest complete set functies van alle containerregisters waar we ooit mee hebben gewerkt, zoals:
- Verbinding met OpenID Connect.
- Audit logging voor container pull en push acties.
- Beleid voor container images zoals tag retentie en tag onveranderlijkheid.
- Replicatie naar andere registers (bijvoorbeeld ECR, ACR, ...).
- Webhooks kunnen worden geactiveerd wanneer specifieke acties plaatsvinden.
- Een project kan dienen als cache proxy voor publieke afbeeldingen.
Daarnaast heeft Harbor een goed gedocumenteerde API en gebruiken we een Terraform-provider om bronnen zoals projecten en gebruikers binnen Harbor in te stellen met behulp van Terraform-code.
Zoals je kunt lezen, heeft Harbor veel te bieden. ;-) In de volgende sectie gaan we dieper in op een aantal functies die we nog niet hebben behandeld, maar die zeker het vermelden waard zijn.
Container Image Kwetsbaarheid Scannen
Een van de meest interessante functies is de ingebouwde kwetsbaarheidsscan. Harbor heeft een ingebouwde tool voor het scannen op kwetsbaarheden die automatisch container images scant op kwetsbaarheden wanneer ze naar het register worden gepushed. Er wordt een taak ingepland wanneer een container image wordt gepushed en zodra het resultaat beschikbaar is, is het zichtbaar naast de container image.

Je kunt ook meer details krijgen over de specifieke kwetsbaarheden die zijn gevonden:

Voor ons zijn deze inzichten in de kwaliteit van de containers een enorme verbetering ten opzichte van het huidige containerregister dat we gebruiken. Door enkele extra configuraties te maken, kunnen we de ervaring van het scannen op kwetsbaarheden nog beter maken. Enkele voorbeelden:
- Blokkeer het trekken van container images die Kritieke CVE kwetsbaarheden hebben.
- Regelmatige scans plannen van images die al in het havenregister zijn opgeslagen.
- Sta specifieke CVE's toe die op dit moment niet kunnen worden verholpen.
- Een webhook instellen om actie te ondernemen wanneer een CVE wordt gedetecteerd.
Harbor gebruikt Trivy als standaard tool om kwetsbaarheden te scannen, maar het is eenvoudig om over te schakelen naar een andere tool door deze op je cluster te installeren en te registreren in de Harbor interface. Met deze eenvoudige stappen kunt u de beveiliging van containers naar een hoger niveau tillen.
Ondertekening van containerafbeeldingen
Harbor biedt ook een Container Image Signing-functie waarmee gebruikers het vertrouwen van container images kunnen verifiëren. Als Notary of Cosign wordt gebruikt om container images te beveiligen, kan Harbor hun handtekeningen valideren, en verzekeren dat er niet met de images is geknoeid door ongeautoriseerde bronnen anders dan uw build tools. De functie Container Image Signing wordt aangegeven door een groen vinkje in de interface van Harbor, wat aangeeft dat de image correct is ondertekend.

Hoewel deze blogpost niet beschrijft hoe deze functie werkt, kunt u gedetailleerde documentatie over het proces vinden via deze link.
Robot-accounts
Naast gewone gebruikers kun je met Harbor ook robotaccounts aanmaken. Deze systeemgebruikers zijn niet gekoppeld aan persoonlijke accounts en worden vaak gebruikt door scripts en processen om zich te authenticeren met het Harbor register. Bijvoorbeeld bij het bouwen van een container image kunnen scripts een robot account gebruiken om de container image naar het Harbor register te pushen.

Om de beveiliging te verhogen, is het mogelijk om een verlooptijd in te stellen voor robotgebruikers. Bovendien kunnen de toegangsrechten beperkt worden tot een bepaald project en kan zelfs het niveau van rechten binnen dat project aangepast worden. Het auditlogboek registreert alle activiteiten die worden uitgevoerd door het robotaccount, net als bij gewone gebruikers.
Hoe ziet de installatie van het Harbor-register eruit?

We draaien Harbor-register op EKS, de Kubernetes Service van AWS. Omdat we op AWS draaien, kunnen we een aantal AWS-services gebruiken om een aantal afhankelijkheden te bieden.
We hebben 3 configuratielagen in deze opstelling:
- AWS bronnen.
- Kubernetes bronnen.
- Bronnen binnen Harbor register.
⬇️ In de volgende secties gaan we dieper in op deze configuratielagen.
1. De AWS-bronnen instellen
Binnen de ACA Group proberen we al onze infrastructuur als code te beheren. We gebruiken Terraform om alle afhankelijkheden voor ons Harbor-register in te stellen:
- Route53 voor DNS.
- RDS voor een multi-az postgres database.
- Elasticache voor een Redis-cluster met hoge beschikbaarheid voor sessiebeheer.
- EFS voor gedeelde opslag in meerdere zones voor onze containers.
- EKS voor de masterlaag van het Kubernetes-cluster.
- Nodegroups ingezet over meerdere beschikbaarheidszones die zullen dienen als rekencapaciteit voor ons Kubernetes cluster.
Zodra deze bronnen beschikbaar zijn, kunnen we de Kubernetes-configuratie genereren en deze inzetten op ons Kubernetes-cluster.
2. De kubernetes-bronnen instellen
We gebruiken een helm om de Kubernetes-configuratiebestanden te genereren die nodig zijn om Harbor in te stellen. Dit zijn YAML-bestanden die zijn opgeslagen in GIT-repositories. Uiteindelijk zal flux deze YAML-bestanden deployen naar het Kubernetes-cluster.
ℹ️ kun je hier in een andere blogpost lezen over implementaties met flux.
Als resultaat worden de volgende workloads aangemaakt op je Kubernetes cluster:
- Harbor core.
- Harbor Portal, bedient de UI.
- Harbor Registry, beheert het containerregister.
- Harbor Jobservice, plant achtergrondjobs.
- Harbor Trivy, scant CVE's / kwetsbaarheden.
- Notary resources, voor het ondertekenen van afbeeldingen.
Daarnaast worden verschillende Kubernetes-objecten gegenereerd, waaronder de Ingress, die de gebruikersinterface (UI) blootstelt op de door jou opgegeven URL. Als je meer details wilt, kun je Harbor direct installeren op je lokale Kubernetes-cluster door het Helm-installatiecommando uit te voeren:
helm install my-release harbor/harbor
3. Bronnen instellen in Harbor
Nu we het Harbor-register operationeel hebben, kunnen we daarin efficiënt verschillende bronnen aanmaken, zoals projecten, robotaccounts en retentiebeleid.
Nogmaals, we willen deze bronnen in code beheren in plaats van ze via de UI aan te maken. Dit helpt ons niet alleen bij het effectief bijhouden van wijzigingen, maar voorkomt ook mogelijke misconfiguraties via pull request mechanismen.
Met zijn uitgebreide en goed gedocumenteerde API maakt Harbor het voor veel tools mogelijk om aangepaste addons te ontwikkelen. Door gebruik te maken van onze expertise in Terraform-code, geven we de voorkeur aan de Terraform Harbor addon om de bronnen in het Harbor-register efficiënt te beheren.
Het volgende voorbeeld creëert een project binnen Harbor:
resource "harbor_project" "myproject" { name = "myproject" public = false vulnerability_scanning = true enable_content_trust = true deployment_security = "" }
Het Harbor-register gebruiken
Na het implementeren van het Harbor-register en het maken van projecten, wordt het een functioneel containerregister dat op dezelfde manier werkt als elk ander containerregister. Om container images naar het Harbor register te pushen, kunnen conventionele build jobs gebruikt worden. De buildjob vereist echter authenticatiereferenties, meestal van een robotaccount.
Daarna moet je de configuratie van je jenkins, tekton, BitBucket Pipeline, GitHub actie of soortgelijke opdracht bijwerken om het juiste project en de Harbor URL te specificeren, zoals registry.example.be/myproject.
Het push commando kan ook gevonden worden in de Harbor interface:

Nadat het container image naar het Harbor register is geduwd, kan het van andere locaties worden gehaald.
Om een image naar je lokale machine te trekken met Docker, kun je de volgende commando's gebruiken:
docker login docker pull registry.example.be/myproject/image:version
Om het container image te gebruiken in een Kubernetes omgeving, begin je met het aanmaken van een Secret van het type "docker-registry" dat de nodige referenties bevat om het container image te deployen. Aangezien een Secret specifiek is voor een naamruimte, moet je dit commando uitvoeren voor elke naamruimte die een container uit het Harbor-register gebruikt.
kubectl -n NAMESPACE create secret docker-registry registry.example.be --docker-server=registry.example.be --docker-username='firstname.lastname' --docker-password='mysupersecurepassword' --docker-email=me@company.be
Nu kan je verwijzen naar de container image binnen je Deployment, StatefulSet, Job, ... De imagePullSecrets sectie verwijst naar de Secret die in de bovenstaande stap werd aangemaakt.
image: registry.example.be/myproject/image:version ... imagePullSecrets: - naam: registry.example.be
Conclusie
Deze blogpost gaf een overzicht van de vele voordelen en functies van het Harbor-register. We hebben ook onze aanpak gedeeld voor het instellen en gebruiken van het containerregister.
Bij ACA gebruiken we Harbor als containerregister voor een van onze belangrijkste projecten en we zijn momenteel bezig om het te adopteren als ons standaardregister voor nieuwe projecten. Zodra dit is ingesteld, maken we een plan om andere actieve projecten te migreren. Ons doel is om de stabiliteit, beschikbaarheid en veiligheid voor onze klanten te verbeteren.
Als je meer wilt weten over het Harbor-register, neem dan gerust contact met ons op!
What others have also read


CloudBrew is altijd een hoogtepunt op onze kalender geweest, maar de editie van 2025 voelde anders. Misschien lag het aan de timing. Slechts een maand eerder, in november 2025, opende de Azure Belgium Central-regio eindelijk haar deuren. ACA opereert al altijd vanuit het hart van Europa, dus het live gaan van deze grote nationale mijlpaal net voor de conferentie zorgde voor een extra dosis enthousiasme.
Lees verder

Een betere uptime, lagere kosten en vendor lock-in vermijden. Dat zijn drie van de redenen waarom onze klanten kiezen voor een multicloud-strategie. Onze Cloud project manager Roel Van Steenberghe legt uit wat zo’n strategie precies inhoudt en wat de troeven zijn van Google Cloud Platform (GCP).
Lees verder

In de complexe wereld van moderne softwareontwikkeling worden bedrijven geconfronteerd met de uitdaging om verschillende applicaties die door verschillende teams worden ontwikkeld en beheerd, naadloos te integreren. De Service Mesh is van onschatbare waarde bij het overwinnen van deze uitdaging. In dit blogartikel verdiepen we ons in Istio Service Mesh en onderzoeken we waarom investeren in een Service Mesh zoals Istio een slimme zet is." Wat is Service Mesh? Een Service Mesh is een softwarelaag die verantwoordelijk is voor alle communicatie tussen applicaties, in deze context services genoemd. Het introduceert nieuwe functionaliteiten om de interactie tussen services te beheren, zoals monitoring, logging, tracing en verkeerscontrole. Een service mesh werkt onafhankelijk van de code van elke individuele service, waardoor het over netwerkgrenzen heen kan werken en kan samenwerken met verschillende beheersystemen. Dankzij een service mesh kunnen ontwikkelaars zich richten op het bouwen van toepassingsfuncties zonder zich zorgen te maken over de complexiteit van de onderliggende communicatie-infrastructuur. Istio Service Mesh in de praktijk Denk aan het beheren van een groot cluster waarop meerdere applicaties draaien die ontwikkeld en onderhouden worden door verschillende teams, elk met verschillende afhankelijkheden zoals ElasticSearch of Kafka. Na verloop van tijd resulteert dit in een complex ecosysteem van applicaties en containers, overzien door verschillende teams. De omgeving wordt zo ingewikkeld dat het voor beheerders steeds moeilijker wordt om het overzicht te bewaren. Dit leidt tot een reeks pertinente vragen: Hoe ziet de architectuur eruit? Welke applicaties interageren met elkaar? Hoe wordt het verkeer beheerd? Bovendien zijn er specifieke uitdagingen die voor elke afzonderlijke applicatie moeten worden aangepakt: Het afhandelen van aanmeldingsprocessen Implementeren van robuuste beveiligingsmaatregelen Netwerkverkeer beheren dat naar de applicatie wordt geleid ... Een Service Mesh, zoals Istio, biedt een oplossing voor deze uitdagingen. Istio fungeert als een proxy tussen de verschillende applicaties (services) in het cluster, waarbij elk verzoek door een component van Istio gaat. Hoe werkt Istio Service Mesh? Istio introduceert een sidecar proxy voor elke service in het microservices ecosysteem. Deze sidecar proxy beheert al het inkomende en uitgaande verkeer voor de dienst. Daarnaast voegt Istio componenten toe die het inkomende en uitgaande verkeer van het cluster afhandelen. Istio's control plane maakt het mogelijk om beleidsregels te definiëren voor verkeersbeheer, beveiliging en monitoring, die vervolgens worden toegepast op de toegevoegde componenten. Voor een beter begrip van de functionaliteit van Istio Service Mesh, zie ons blogartikel "Istio Service Mesh installeren: A Comprehensive Step-by-Step Guide" , een gedetailleerde, stapsgewijze uitleg over de installatie en het gebruik van Istio. Waarom Istio Service Mesh? Verkeersbeheer: Istio maakt gedetailleerd verkeersbeheer mogelijk, waardoor ontwikkelaars eenvoudig verkeer tussen verschillende versies van hun services kunnen routeren, verdelen en controleren. Beveiliging: Istio biedt een robuuste beveiligingslaag met functies zoals verkeersversleuteling met behulp van eigen certificaten, Role-Based Access Control (RBAC) en mogelijkheden voor het implementeren van authenticatie- en autorisatiebeleid. Waarneembaarheid: Door middel van ingebouwde instrumentatie biedt Istio diepgaande observeerbaarheid met tools voor monitoring, logging en gedistribueerde tracering. Hierdoor kunnen IT-teams de prestaties van services analyseren en snel problemen opsporen. Vereenvoudigde communicatie: Istio neemt de complexiteit van servicecommunicatie weg van applicatieontwikkelaars, zodat zij zich kunnen richten op het bouwen van applicatiefuncties. Is Istio geschikt voor uw opstelling? Hoewel de voordelen duidelijk zijn, is het essentieel om te overwegen of de extra complexiteit van Istio past bij jouw specifieke opstelling. Ten eerste is er een sidecar container nodig voor elke ingezette service, wat kan leiden tot ongewenste geheugen- en CPU overhead. Daarnaast kan het zijn dat je team niet beschikt over de specialistische kennis die nodig is voor Istio. Als je overweegt om Istio Service Mesh te gaan gebruiken, vraag dan begeleiding aan specialisten met expertise. Vraag onze experts gerust om hulp. Meer informatie over Istio Istio Service Mesh is een technologische game-changer voor IT-professionals die streven naar geavanceerde controle, beveiliging en observeerbaarheid in hun microservices-architectuur. Istio vereenvoudigt en beveiligt de communicatie tussen services, waardoor IT-teams zich kunnen richten op het bouwen van betrouwbare en schaalbare applicaties. Snel antwoord nodig op al uw vragen over Istio Service Mesh? Neem contact op met onze experts
Lees verderWant to dive deeper into this topic?
Get in touch with our experts today. They are happy to help!

Want to dive deeper into this topic?
Get in touch with our experts today. They are happy to help!

Want to dive deeper into this topic?
Get in touch with our experts today. They are happy to help!

Want to dive deeper into this topic?
Get in touch with our experts today. They are happy to help!


