Navigeren door het cloud-native landschap met Harbor Registry
<span id="hs_cos_wrapper_name" class="hs_cos_wrapper hs_cos_wrapper_meta_field hs_cos_wrapper_type_text" style="" data-hs-cos-general-type="meta_field" data-hs-cos-type="text" >Navigeren door het cloud-native landschap met Harbor Registry</span>
Share this via:

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?

Official logo from 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.

Container image

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

Image Specific vulnerabilities

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.

Container image signing feature

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.

Image creating system robot account

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?

Setup of harbor registery

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:

  1. AWS bronnen.
  2. Kubernetes bronnen.
  3. 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
Standaard

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 = "" }
Standaard

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:

Push command of 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
Standaard

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
Standaard

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
Standaard

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!

 

Bregt Coenen
Bregt Coenen
Solution Engineer, ACA Group
Contact us

Want to dive deeper into this topic?

Get in touch with our experts today. They are happy to help!

ACA mug mok koffie tas
Contact us

Want to dive deeper into this topic?

Get in touch with our experts today. They are happy to help!

ACA mug mok koffie tas
Contact us

Want to dive deeper into this topic?

Get in touch with our experts today. They are happy to help!

ACA mug mok koffie tas
Contact us

Want to dive deeper into this topic?

Get in touch with our experts today. They are happy to help!

ACA mug mok koffie tas