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

Newsletter für Tech-Experten

Signal, kein Rauschen –

direkt in Ihren Posteingang.

Schließen Sie sich mehr als 12.000 Ingenieuren und Führungskräften aus der Wirtschaft an, die Praxisberichte zu SRE, DevOps und Cloud-nativer Zuverlässigkeit erhalten.

Tech-Blogs mit tiefgehenden Einblicken und Fallstudien
Neue Technologien, sorgfältig ausgewählt

Ihre geschäftliche E-Mail-Adresse

Wir gehen respektvoll mit Ihrem Posteingang um. Lesen Sie unsere Datenschutzerklärung.

Mehr Beiträge

Bei der Arbeit mit Terraform sollte das Standard-Meta-Argument zum Erstellen von Ressourcen fast immer „for_each“ lauten – insbesondere bei Infrastruktur, die voraussichtlich lange bestehen bleibt und sich weiterentwickelt...
Lesen
Die sichere Verwaltung von Geheimnissen in Kubernetes stellt eine entscheidende Herausforderung für moderne Cloud-native Umgebungen dar. Anmeldedaten für Anwendungen, Zertifikate, private Schlüssel und Passwörter müssen auf sichere und nachverfolgbare Weise verwaltet werden, ...
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.