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.
Herausforderung: DockerHub Ratenbegrenzung
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.
Die Lösung: Harbor-Proxy-Cache in Kubernetes
Harbor bietet eine Proxy-Cache-Funktion, die Remote-Registry-Images lokal zwischenspeichert. Durch die Bereitstellung von Harbor in Kubernetes waren wir in der Lage,:
- Zwischenspeichern häufig abgerufener Images unter Umgehung von DockerHub-Ratenbeschränkungen
- Verbessern Sie die Geschwindigkeit des Bildzugriffs, indem Sie externe Netzwerkanrufe vermeiden.
- Zentralisierte Bildverwaltung mit zuverlässigen Sicherheitsfunktionen

Schritt-für-Schritt-Einrichtung des Harbor Proxy Cache in Kubernetes
1. Voraussetzungen
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).
2. Bereitstellung von Harbor in Kubernetes
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
3. Konfigurieren Sie den Harbor Proxy Cache für DockerHub
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
- Öffnen Sie die Harbor-Weboberfläche
- Melden Sie sich mit den Admin-Anmeldedaten an:
- Benutzername: admin
- Passwort: (aus values.yaml, in diesem Beispiel HarborAdmin12345)
b. Hinzufügen eines Proxy-Cache-Endpunkts für DockerHub
- Gehen Sie zu Verwaltung > Registrierungen.
- Klicken Sie auf + Neuer Endpunkt
- Konfigurieren Sie den Endpunkt wie folgt:
- Registry-Typ: Docker-Hub
- Name: dockerhub-proxy
- Registrierungs-URL: https://registry-1.docker.io
- Zugangskennung und Geheimnis: (Optional, für authentifizierte Abrufe)
- Speichern Sie die Konfiguration
c. Aktivieren Sie den Proxy-Cache für ein Projekt
- Zu Projekten in der Harbor UI navigieren
- Ein Projekt erstellen oder bearbeiten
- Aktivieren Sie den Proxy-Cache für das Projekt und verknüpfen Sie es mit dem DockerHub-Proxy-Endpunkt.
4. Konfigurieren von Kubernetes-Knoten für die Verwendung von Harbor
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
5. Testen Sie die Einrichtung
Ziehen Sie ein DockerHub-Image über Harbor:
- 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
Zusätzliche Tipps für Kubernetes-Bereitstellungen
ImagePullSecrets für die Authentifizierung verwenden
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
Proxy-Cache-Bereinigung automatisieren
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.
Ergebnisse nach der Umsetzung
Nach dem Einsatz von Harbor als Proxy-Cache in Kubernetes haben wir Folgendes erreicht:
- Umgehung der DockerHub-Ratenbegrenzungen: Zwischengespeicherte Bilder reduzierten externe Anfragen an DockerHub erheblich
- Schnellere Image Pulls: Lokale Zwischenspeicherung verbessert die Geschwindigkeit, insbesondere in CI/CD-Pipelines
- Zentralisierte Bildverwaltung: Entwickler können über eine einzige, sichere Schnittstelle auf Bilder zugreifen und diese verwalten