Blog

Kubernetes-Workflows mit Harbor verbessern: Lösungen für DockerHub-Rate-Limiting-Herausforderungen

Bild von Boyan Kirov
Bojan Kirow
DevOps- und Cloud-Ingenieur
25.11.2024
Lesezeit: 3 Minuten.
Zuletzt aktualisiert am: 10.10.2025

Inhaltsübersicht

DockerHub ist ein Eckpfeiler der containerisierten Entwicklung, aber seine ratenbegrenzenden Richtlinien führen oft zu Engpässen in Arbeitsabläufen. Teams stoßen häufig auf Probleme beim Ziehen von Container-Images, insbesondere in CI/CD-Pipelines, wo häufige Anfragen die Pull-Limits von DockerHub überschreiten können.

In diesem Artikel erfahren Sie, wie Sie Harbor als Proxy-Cache in einer Kubernetes-Umgebung einrichten, um die Ratenbeschränkungen von DockerHub zu umgehen. Mit Harbor, einer sicheren Open-Source-Container-Registry, haben wir eine skalierbare Caching-Lösung geschaffen, um die Abhängigkeit von DockerHub zu verringern und die Effizienz des Workflows zu verbessern.

DockerHub setzt die folgenden Ratenbeschränkungen durch:

  • Anonyme Benutzer: 100 Abrufe pro 6 Stunden pro IP-Adresse
  • Authentifizierte Benutzer: 200 Abrufe pro 6 Stunden pro Benutzer

Diese Grenzen sind in Kubernetes-Umgebungen restriktiv:

  • Mehrere Pods ziehen oft parallel das gleiche Bild
  • CI/CD-Pipelines beinhalten häufige Pulls von aktualisierten Images
  • Teams teilen sich eine gemeinsame IP-Adresse, was das Problem der Ratenbegrenzung noch verschärft

Häufige Fehler sind:

Zu viele Anfragen: Zu viele Anfragen. Bitte warten und später erneut versuchen

Unser Ziel war es , ein autarkes Ökosystem zu schaffen, das die Ratenbeschränkungen von DockerHub vermeidet und gleichzeitig einen nahtlosen Betrieb für Entwickler und CI/CD-Systeme gewährleistet.

Harbor bietet eine Proxy-Cache-Funktion, die Remote-Registry-Images lokal zwischenspeichert. Durch die Bereitstellung von Harbor in Kubernetes waren wir in der Lage,:

  1. Zwischenspeichern häufig abgerufener Images unter Umgehung von DockerHub-Ratenbeschränkungen
  2. Verbessern Sie die Geschwindigkeit des Bildzugriffs, indem Sie externe Netzwerkanrufe vermeiden.
  3. Zentralisierte Bildverwaltung mit zuverlässigen Sicherheitsfunktionen
Harbor-Proxy-Cache in Kubernetes-Docker

Stellen Sie sicher, dass Sie über:

  • Ein Kubernetes-Cluster
  • Helm ist auf Ihrem lokalen Rechner installiert.
  • Zugang zu einem DockerHub-Konto (optional, für authentifizierte Pulls).

Harbor kann in Kubernetes mithilfe des offiziellen Helm-Diagramms bereitgestellt werden.

a. Hinzufügen des Harbor Helm Repository

helm repo add harbor https://helm.goharbor.io

helm repo update

b. Erstellen Sie einen Namensraum für Harbor

kubectl create namespace harbor

c. Harbor mit Helm installieren

Passen Sie die Installation mit einer values.yaml-Datei an. Nachfolgend finden Sie eine Beispielkonfiguration für ein minimales Setup mit aktiviertem Proxy-Cache:

yaml

expose:

  type: ingress

  ingress:

    hosts:

      core: harbor.example.com

      notary: notary.harbor.example.com

    annotations:

      nginx.ingress.kubernetes.io/proxy-body-size: "100m"

externalURL: https://harbor.example.com

harborAdminPassword: yourpassword

proxy:

  httpProxy: http://proxy.example.com:3128

  httpsProxy: https://proxy.example.com:3128

  noProxy: 127.0.0.1,localhost,.example.com

persistence:

  persistentVolumeClaim:

    registry:

      storageClass: "default"

      size: 20Gi

Installieren Sie Harbor mit dieser Konfiguration:

helm install harbor harbor/harbor -n harbor -f values.yaml

Nach der Bereitstellung greifen Sie auf Harbor über die in values.yaml konfigurierte URL zu (z. B. https://harbor.example.com).

a. Anmeldung bei der Harbor UI

  1. Öffnen Sie die Harbor-Weboberfläche
  2. Melden Sie sich mit den Admin-Anmeldedaten an:
    1. Benutzername: admin
    1. Passwort: (aus values.yaml, in diesem Beispiel HarborAdmin12345)

b. Hinzufügen eines Proxy-Cache-Endpunkts für DockerHub

  1. Gehen Sie zu Verwaltung > Registrierungen.
  2. Klicken Sie auf + Neuer Endpunkt
  3. Konfigurieren Sie den Endpunkt wie folgt:
    1. Registry-Typ: Docker-Hub
    1. Name: dockerhub-proxy
    1. Registrierungs-URL: https://registry-1.docker.io
    1. Zugangskennung und Geheimnis: (Optional, für authentifizierte Abrufe)
  4. Speichern Sie die Konfiguration

c. Aktivieren Sie den Proxy-Cache für ein Projekt

  1. Zu Projekten in der Harbor UI navigieren
  2. Ein Projekt erstellen oder bearbeiten
  3. Aktivieren Sie den Proxy-Cache für das Projekt und verknüpfen Sie es mit dem DockerHub-Proxy-Endpunkt.

Um sicherzustellen, dass alle Kubernetes-Knoten Images über Harbor beziehen, aktualisieren Sie den Docker-Daemon auf jedem Knoten.

a. Harbor als Spiegel der Registrierung hinzufügen

Bearbeiten Sie die Docker-Daemon-Konfiguration (/etc/docker/daemon.json) auf jedem Knoten:

{

  "registry-mirrors": ["https://harbor.example.com"]

}

b. Docker neu starten

sudo systemctl restart docker

Ziehen Sie ein DockerHub-Image über Harbor:

  1. Melden Sie sich über Ihren Docker-Client bei Harbor an:
bash

docker login harbor.example.com
  • Ziehen Sie ein Bild:
bash

docker pull harbor.example.com/<project-name>/library/nginx:latest
  • Prüfen Sie Harbor, um zu bestätigen, dass das Bild im Cache gespeichert ist.

Aktualisieren Sie in Kubernetes Ihre Bereitstellungsmanifeste, um Images von Harbor zu verwenden:

image: harbor.example.com/<project-name>/library/nginx:latest

Wenn Harbor eine Authentifizierung erfordert, erstellen Sie ein Kubernetes-Geheimnis für die Anmeldeinformationen:

kubectl create secret docker-registry harbor-secret \

  --docker-server=harbor.example.com \

  --docker-username=<username> \

  --docker-password=<password> \

  --docker-email=<email>

Add the secret to your pods:

yaml

Copy code

imagePullSecrets:

  - name: harbor-secret

Mit Harbor können Sie Aufbewahrungsrichtlinien für die Verwaltung zwischengespeicherter Bilder konfigurieren. Richten Sie eine Richtlinie ein, um ungenutzte Bilder regelmäßig zu entfernen, um Speicherplatz zu sparen.

Nach dem Einsatz von Harbor als Proxy-Cache in Kubernetes haben wir Folgendes erreicht:

  1. Umgehung der DockerHub-Ratenbegrenzungen: Zwischengespeicherte Bilder reduzierten externe Anfragen an DockerHub erheblich
  2. Schnellere Image Pulls: Lokale Zwischenspeicherung verbessert die Geschwindigkeit, insbesondere in CI/CD-Pipelines
  3. Zentralisierte Bildverwaltung: Entwickler können über eine einzige, sichere Schnittstelle auf Bilder zugreifen und diese verwalten

Eine Antwort hinterlassen

Mehr Beiträge

Die ITGix AWS Landing Zone wird kontinuierlich weiterentwickelt, wobei ein klares Ziel im Vordergrund steht: Unternehmen sollen in die Lage versetzt werden, sichere, konforme und skalierbare AWS-Umgebungen mit geringerem Betriebsaufwand aufzubauen. In den jüngsten Versionen (v1.2.0...
Lesen
In früheren Artikeln haben wir uns mit der Migration von Repositorys aus der Bitbucket Cloud, der sicheren Aktualisierung von Projektabhängigkeiten und der Modernisierung von CI/CD-Workflows durch die Umstellung von Jenkins- und Bash-basierten Pipelines auf GitHub Actions befasst. Auf dieser Grundlage...
Lesen
Kontakt aufnehmen
ITGix bietet Ihnen fachkundige Beratung und maßgeschneiderte DevOps-Services, um Ihr Unternehmenswachstum zu beschleunigen.
Newsletter für
Technik-Experten
Schließen Sie sich 12.000+ Geschäftsführern und Ingenieuren an, die Blogs, e-Books und Fallstudien Fallstudien über neue Technologie erhalten.