Harbor ist eine Open-Source-Containerregistrierung. Sie können die TKG-Erweiterung für die Harbor-Registrierung als privaten Registrierungsspeicher für die Container-Images bereitstellen, die Sie für Tanzu Kubernetes-Cluster bereitstellen möchten.
Versionsabhängigkeiten der Harbor-Erweiterung
Komponente | Mindestversion |
---|---|
vCenter Server | 7.0.2.00400 |
vSphere-Namespace | 0.0.10-18245956 |
Supervisor-Cluster | v1.20.2 + vmware.1-vsc0.0.10-18245956 |
Tanzu Kubernetes-Version | v1.20.7+vmware.1-tkg.1.7fb9067 |
Voraussetzungen für die Harbor-Erweiterung
- Stellen Sie einen Cluster bereit. Weitere Informationen hierzu finden Sie unter Workflow zu Bereitstellung von Tanzu Kubernetes-Clustern mithilfe der TKGS-v1alpha2-API.
- Stellen Sie eine Verbindung zum Cluster her. Weitere Informationen hierzu finden Sie unter Herstellen einer Verbindung mit einem Tanzu Kubernetes-Cluster als vCenter Single Sign-On-Benutzer.
- Herunterladen des TKG-Erweiterungspakets v1.3.1 auf den Clienthost, auf dem Sie kubectl-Befehle ausführen.
- Voraussetzungen für die Installation von TKG-Erweiterungen auf dem Zielcluster.
Zusätzliche Anforderungen für die Harbor-Erweiterung
- Die Harbor-Erweiterung erfordert eine PVC-Standardspeicherklasse. Weitere Informationen finden Sie unter Überprüfen der Anforderungen an persistenten Speicher für die TKG-Erweiterungen.
- Die Harbor-Erweiterung erfordert eingehenden HTTP/S-Datenverkehr. Insbesondere werden Harbor-Dienste über einen Envoy-Dienst in der Contour-Erweiterung verfügbar gemacht. Stellen Sie als Voraussetzung die Contour-Erweiterung bereit. Weitere Informationen finden Sie unter Bereitstellen und Verwalten der TKG-Erweiterung für Contour Ingress.
- Wenn Sie ein NSX-T-Netzwerk für den Supervisor-Cluster verwenden, erstellen Sie einen Envoy-Dienst vom Typ LoadBalancer.
- Wenn Sie ein vSphere vDS-Netzwerk für den Supervisor-Cluster verwenden, erstellen Sie je nach Umgebung und Anforderungen einen Envoy-Dienst vom Typ LoadBalancer oder vom Typ NodePort.
- Die Harbor-Erweiterung erfordert DNS. Nach der Installation der Harbor-Erweiterung müssen Sie DNS konfigurieren.
- Fügen Sie zu Test- und Prüfzwecken die Harbor- und Notar-FQDNs zu Ihrer lokalen /etc/hosts-Datei hinzu. Die folgenden Anweisungen beschreiben, wie Sie dies tun.
- In der Produktion erfordert Harbor eine DNS-Zone entweder auf einem lokalen DNS-Server, wie z. B. BIND, oder in einer Public Cloud, wie z. B. AWS Route 53, Azure DNS oder Google CloudDNS. Nachdem Sie DNS eingerichtet haben, installieren Sie die externe DNS-Erweiterung, um die Harbor-FQDNs automatisch bei einem DNS-Server zu registrieren. Weitere Informationen finden Sie unter Bereitstellen und Verwalten der TKG-Erweiterung für die Erkennung externer DNS-Dienste.
Bereitstellen der Harbor-Erweiterung
Container | Ressourcentyp | Replikate | Beschreibung |
---|---|---|---|
harbor-core |
Bereitstellung | 1 | Verwaltungs- und Konfigurationsserver für Envoy |
harbor-database |
Pod | 1 | Postgres-Datenbank |
harbor-jobservice |
Bereitstellung | 1 | Harbor-Auftragsdienst |
harbor-notary-server |
Bereitstellung | 1 | Harbor-Notariatsdienst |
harbor-notary-signer |
Bereitstellung | 1 | Harbor-Notariat |
harbor-portal |
Bereitstellung | 1 | Harbor-Webschnittstelle |
harbor-redis |
Pod | 1 | Harbor-Redis-Instanz |
harbor-registry |
Bereitstellung | 2 | Harbor-Containerregistrierungsinstanz |
harbor-trivy |
Pod | 1 | Schwachstellen-Scanner für Harbor-Image |
- Überprüfen Sie, ob die Voraussetzungen für die Erweiterung erfüllt sind. Weitere Informationen finden Sie unter Voraussetzungen für die Harbor-Erweiterung und Zusätzliche Anforderungen für die Harbor-Erweiterung.
- Ändern Sie das Verzeichnis in die Harbor-Erweiterung.
cd /tkg-extensions-v1.3.1+vmware.1/extensions/registry/harbor
- Erstellen Sie den
tanzu-system-registry
-Namespace und das Harbor-Dienstkonto und die Harbor-Rollen.kubectl apply -f namespace-role.yaml
- Erstellen Sie eine Harbor-Datei mit Datenwerten.
cp harbor-data-values.yaml.example harbor-data-values.yaml
- Geben Sie die obligatorischen Kennwörter und geheimen Schlüssel in
harbor-data-values.yaml
an.Die Harbor-Registrierung erfordert mehrere Kennwörter und geheime Schlüssel, die in der Tabelle aufgeführt und beschrieben sind.Kennwort oder geheimer Schlüssel Beschreibung harborAdminPassword
Das anfängliche Kennwort für den Harbor-Administrator. secretKey
Der für die Verschlüsselung verwendete geheime Schlüssel. Muss eine Zeichenfolge aus 16 Zeichen sein. database.password
Das anfängliche Kennwort für die Postgres-Datenbank. core.secret
Der geheime Schlüssel wird verwendet, wenn der Kernserver mit einer anderen Komponente kommuniziert. core.xsrfKey
Der XSRF-Schlüssel. Muss eine Zeichenfolge aus 32 Zeichen sein. jobservice.secret
Der geheime Schlüssel wird verwendet, wenn der Auftragsdienst mit einer anderen Komponente kommuniziert. registry.secret
Der geheime Schlüssel wird verwendet, um den Upload-Status vom Client- und Registrierungsspeicher-Backend zu sichern. harbor-data-values.yaml
-Datei aufzufüllen, führen Sie den folgenden Befehl aus:bash generate-passwords.sh harbor-data-values.yaml
Bei Erfolg sollten Sie die folgende Meldung sehen:Successfully generated random passwords and secrets in harbor-data-values.yaml
Öffnen Sie die
harbor-data-values.yaml
-Datei und überprüfen Sie die obligatorischen Kennwörter und geheimen Schlüssel. - Geben Sie bei Bedarf weitere Werte für die Harbor-Konfiguration in
harbor-data-values.yaml
an. Zu den häufig aktualisierten Werten können unter anderem gehören:Konfigurationsfeld Beschreibung hostname
Der standardmäßige Harbor-Hostname lautet
core.harbor.domain
.Ändern Sie diesen Wert bei Bedarf Ihren Anforderungen entsprechend.
port.https
Die Standardeinstellung ist
443
.Wenn Sie ein NSX-T-Netzwerk für den Supervisor-Cluster und damit einen Envoy-Ingress-Dienst vom Typ LoadBalancer verwenden, behalten Sie für diese Einstellung den Standardwert
443
bei.Wenn Sie ein vDS-Netzwerk für den Supervisor-Cluster und damit einen Envoy Ingress-Dienst vom Typ NodePort verwenden, setzen Sie diesen Wert auf den passenden Envoy-Knotenport.
clair.enabled
Clair Image Scanner ist zugunsten von Trivy veraltet. Beide sind in der Konfigurationsdatei aktiviert.
Deaktivieren Sie Clair, indem Sie als Wert
false
festlegen.persistence.persistentVolumeClaim. <component>.accessMode
Es gibt mehrere Instanzen dieser Einstellung.
Die Standardeinstellung ist
ReadWriteOnce
.Es ist geplant, dass
ReadWriteMany
in einer kommenden Version unterstützt wird.imageChartStorage.type
Die Standardeinstellung ist
filesystem
.Ändern Sie die Einstellung bei Bedarf und konfigurieren Sie den verwendeten Speicher.
proxy
Konfigurieren Sie bei Bedarf einen Proxy für Harbor. Wenn ein Proxy konfiguriert ist, sind die noProxy
-Standardwerte erforderlich. - Erstellen Sie einen geheimen Schlüssel mit den Datenwerten.
kubectl create secret generic harbor-data-values --from-file=values.yaml=harbor-data-values.yaml -n tanzu-system-registry
secret/harbor-data-values
wird im Namespacetanzu-system-registry
erstellt. Überprüfen Sie dies, indem Sie den folgenden Befehl ausführen:kubectl get secrets -n tanzu-system-registry
- Stellen Sie die Harbor-Erweiterung bereit.
kubectl apply -f harbor-extension.yaml
Bei Erfolg sollte
app.kappctrl.k14s.io/harbor created
angezeigt werden. - Überprüfen Sie den Status der Harbor-Anwendung.
kubectl get app harbor -n tanzu-system-registry
Bei Erfolg ändert sich der Status vonReconciling
zuReconcile succeeded
.NAME DESCRIPTION SINCE-DEPLOY AGE harbor Reconciling 96s 98s
NAME DESCRIPTION SINCE-DEPLOY AGE harbor Reconcile succeeded 39s 2m29s
Wenn der StatusReconcile failed
lautet, finden Sie weitere Informationen unter Behebung von Fehlern bei der Bereitstellung der Harbor-Registrierung. - Zeigen Sie detaillierte Informationen zur Harbor-Erweiterung an.
kubectl get app harbor -n tanzu-system-registry -o yaml
- Zeigen Sie den Status der Harbor-Bereitstellungsobjekte an.
kubectl get deployments -n tanzu-system-registry
Bei Erfolg sollten die folgenden Bereitstellungen angezeigt werden:
NAME READY UP-TO-DATE AVAILABLE AGE harbor-core 1/1 1 1 5m16s harbor-jobservice 1/1 1 1 5m16s harbor-notary-server 1/1 1 1 5m16s harbor-notary-signer 1/1 1 1 5m16s harbor-portal 1/1 1 1 5m16s harbor-registry 1/1 1 1 5m16s
- Zeigen Sie den Status der Harbor-Pods an:
kubectl get pods -n tanzu-system-registry
NAME READY STATUS RESTARTS AGE harbor-core-9cbf4b79d-gxvgx 1/1 Running 0 7m11s harbor-database-0 1/1 Running 0 7m11s harbor-jobservice-6b656ccb95-lm47d 1/1 Running 0 7m11s harbor-notary-server-8494c684db-gm7jf 1/1 Running 0 7m11s harbor-notary-signer-6f96b549d4-dzcnm 1/1 Running 0 7m11s harbor-portal-5b8f4ddbd-qdnp2 1/1 Running 0 7m11s harbor-redis-0 1/1 Running 0 7m11s harbor-registry-688894c58d-72txm 2/2 Running 0 7m11s harbor-trivy-0 1/1 Running 0 7m11s
- Beheben Sie bei Bedarf etwaige Fehler bei der Harbor-Installation. Weitere Informationen finden Sie unter Behebung von Fehlern bei der Bereitstellung der Harbor-Registrierung.
Konfigurieren von DNS für Harbor mithilfe eines Envoy-Diensts vom Typ LoadBalancer (NSX-T-Netzwerk)
- Rufen Sie die
External-IP
-Adresse für den Envoy-Dienst vom Typ LoadBalancer ab.kubectl get service envoy -n tanzu-system-ingress
DieExternal-IP
-Adresse sollte angezeigt werden, z. B.:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE envoy LoadBalancer 10.99.25.220 10.195.141.17 80:30437/TCP,443:30589/TCP 3h27m
Alternativ können Sie dieExternal-IP
-Adresse mit dem folgenden Befehl abrufen.kubectl get svc envoy -n tanzu-system-ingress -o jsonpath='{.status.loadBalancer.ingress[0]}'
- Um die Installation der Harbor-Erweiterung zu überprüfen, aktualisieren Sie Ihre lokale
/etc/hosts
-Datei mit den Harbor- und Notariats-FQDNs, die derExternal-IP
-Adresse des Lastausgleichsdiensts zugeordnet sind. Beispiel:127.0.0.1 localhost 127.0.1.1 ubuntu # TKGS Harbor with Envoy Load Balancer IP 10.195.141.17 core.harbor.domain 10.195.141.17 core.notary.harbor.domain
- Um die Installation der Harbor-Erweiterung zu überprüfen, melden Sie sich bei Harbor an. Weitere Informationen finden Sie unter Anmelden bei der Harbor-Webschnittstelle.
- Erstellen Sie zwei CNAME-Datensätze auf einem DNS-Server, die die
External-IP
-Adresse des Lastausgleichsdiensts für den Envoy-Dienst dem Harbor-FQDN und dem Notariats-FQDN zuordnen. - Installieren Sie die externe DNS-Erweiterung. Weitere Informationen finden Sie unter Bereitstellen und Verwalten der TKG-Erweiterung für die Erkennung externer DNS-Dienste.
Konfigurieren von DNS für Harbor mithilfe eines Envoy-Diensts vom Typ NodePort (vDS-Netzwerk)
port.https
-Wert in der
harbor-data-values.yaml
-Datei angegeben haben.
- Wechseln Sie den Kontext zum vSphere-Namespace, in dem der Cluster bereitgestellt wird.
kubectl config use-context VSPHERE-NAMESPACE
- Listet die Knoten im Cluster auf.
kubectl get virtualmachines
Sie sollten die Clusterknoten sehen, z. B.:NAME POWERSTATE AGE tkgs-cluster-X-control-plane-6dgln poweredOn 6h7m tkgs-cluster-X-control-plane-j6hq6 poweredOn 6h10m tkgs-cluster-X-control-plane-xc25f poweredOn 6h14m tkgs-cluster-X-workers-9twdr-59bc54dc97-kt4cm poweredOn 6h12m tkgs-cluster-X-workers-9twdr-59bc54dc97-pjptr poweredOn 6h12m tkgs-cluster-X-workers-9twdr-59bc54dc97-t45mn poweredOn 6h12m
- Wählen Sie einen der Worker-Knoten aus und beschreiben Sie ihn mit dem folgenden Befehl.
kubectl describe virtualmachines tkgs-cluster-X-workers-9twdr-59bc54dc97-kt4cm
- Suchen Sie die IP-Adresse der virtuellen Maschine, z. B.
Vm Ip: 10.115.22.43
. - Um die Installation der Harbor-Erweiterung zu überprüfen, aktualisieren Sie Ihre lokale
/etc/hosts
-Datei mit den Harbor- und Notariats-FQDNs, die der IP-Adresse des Worker-Knotens zugeordnet sind. Beispiel:127.0.0.1 localhost 127.0.1.1 ubuntu # TKGS Harbor with Envoy NodePort 10.115.22.43 core.harbor.domain 10.115.22.43 core.notary.harbor.domain
- Um die Installation der Harbor-Erweiterung zu überprüfen, melden Sie sich bei Harbor an. Weitere Informationen finden Sie unter Anmelden bei der Harbor-Webschnittstelle.
- Erstellen Sie zwei CNAME-Datensätze auf einem DNS-Server, die die IP-Adresse des Worker-Knotens für den Envoy-Dienst dem Harbor-FQDN und dem Notariats-FQDN zuordnen.
- Installieren Sie die externe DNS-Erweiterung. Weitere Informationen finden Sie unter Bereitstellen und Verwalten der TKG-Erweiterung für die Erkennung externer DNS-Dienste.
Anmelden bei der Harbor-Webschnittstelle
- Greifen Sie unter https://core.harbor.domain oder dem von Ihnen verwendeten Hostnamen auf die Webschnittstelle der Harbor-Registrierung zu.
- Melden Sie sich bei Harbor mit dem Benutzernamen admin und dem generierten Kennwort an, das Sie in die
harbor-data-values.yaml
-Datei eingegeben haben. - Überprüfen Sie, ob Sie über die Harbor-Benutzeroberfläche auf den Host zugreifen können.
- Rufen Sie das Harbor-CA-Zertifikat ab.
Klicken Sie in der Harbor-Benutzeroberfläche auf Neues Projekt.
, oder erstellen Sie einKlicken Sie auf Registrierungszertifikat und laden Sie das Harbor-CA-Zertifikat (ca.crt) herunter.
- Fügen Sie das Harbor-CA-Zertifikat zum Trust Store des Docker-Clients hinzu, damit Sie Container-Images in die Harbor-Registrierung verschieben und von dort abrufen können. Weitere Informationen finden Sie unter Konfigurieren eines Docker-Clients mit dem eingebetteten Harbor-Registrierung-Zertifikat.
- Weitere Informationen zur Verwendung von Harbor finden Sie in der Harbor-Dokumentation.
Behebung von Fehlern bei der Bereitstellung der Harbor-Registrierung
Wenn die Bereitstellung oder der Abgleich fehlschlägt, führen Sie kubectl get pods -n tanzu-system-registry
aus, um den Pod-Status anzuzeigen. Die harbor
-Pods sollten den Status Running
aufweisen. Wenn der Pod-Status ImagePullBackOff
oder ImageCrashLoopBackOff
lautet, konnte das Container-Image nicht abgerufen werden. Überprüfen Sie die Registrierungs-URL in den Datenwerten und den YAML-Dateien der Erweiterung und achten Sie darauf, dass sie korrekt sind.
name-XXXX
der eindeutige Pod-Name ist, wenn Sie
kubectl get pods -A
ausführen:
kubectl logs pod/harbor-XXXXX -c harbor -n tanzu-system-registry
Aktualisieren der Harbor-Erweiterung
Aktualisieren Sie die Contour-Erweiterung, die einem Tanzu Kubernetes-Cluster bereitgestellt wird.
- Rufen Sie Harbor-Datenwerte aus dem geheimen Schlüssel ab.
kubectl get secret harbor-data-values -n tanzu-system-registry -o 'go-template={{ index .data "values.yaml" }}' | base64 -d > harbor-data-values.yaml
- Aktualisieren Sie Harbor-Datenwerte in
harbor-data-values.yaml
. - Aktualisieren Sie den geheimen Schlüssel mit den Harbor-Datenwerten.
kubectl create secret generic harbor-data-values --from-file=values.yaml=harbor-data-values.yaml -n tanzu-system-registry -o yaml --dry-run | kubectl replace -f-
Die Harbor-Erweiterung wird mit den neuen Datenwerten abgeglichen.Hinweis: Standardmäßig synchronisiert kapp-controller die Apps alle 5 Minuten. Das Update sollte in 5 Minuten oder weniger wirksam werden. Wenn die Aktualisierung sofort wirksam werden soll, ändern SiesyncPeriod
inharbor-extension.yaml
einen niedrigeren Wert und wenden Sie die Contour-Erweiterung mitkubectl apply -f harbor-extension.yaml
. - Überprüfen Sie den Zustand der Erweiterung.
kubectl get app harbor -n tanzu-system-registry
Der Zustand der Contour-App sollte sich in
Reconcile Succeeded
ändern, sobald Contour aktualisiert wurde. - Zeigen Sie den detaillierten Zustand an und führen Sie eine Fehlerbehebung durch.
kubectl get app harbor -n tanzu-system-registry -o yaml
Löschen der Harbor-Erweiterung
Löschen Sie die Harbor-Erweiterung aus einem Tanzu Kubernetes-Cluster.
- Wechseln Sie in das Verzeichnis, in das Sie die Harbor-Erweiterungsdateien heruntergeladen haben.
cd /extensions/registry/harbor/
- Löschen Sie die Harbor-App.
kubectl delete app harbor -n tanzu-system-registry
Erwartetes Ergebnis:app.kappctrl.k14s.io "harbor" deleted
- Überprüfen Sie, ob die Harbor-App gelöscht wurde.
kubectl get app Harbor -n tanzu-system-registry
Erwartetes Ergebnis: Für die App wirdNot Found
angegeben.apps.kappctrl.k14s.io "harbor" not found
- Löschen Sie den Registrierungs-Namespace.
Erst nachdem Sie bestätigt haben, dass die Harbor-Erweiterung und die App vollständig gelöscht wurden, können Sie den Namespace und die Rollenobjekte sicher löschen.
kubectl delete -f namespace-role.yaml
Erwartetes Ergebnis: Der Namespace, in dem Harbor bereitgestellt wird, und die zugeordneten rollenbasierten Zugriffssteuerungsobjekte werden gelöscht.namespace "tanzu-system-registry" deleted serviceaccount "harbor-extension-sa" deleted role.rbac.authorization.k8s.io "harbor-extension-role" deleted rolebinding.rbac.authorization.k8s.io "harbor-extension-rolebinding" deleted clusterrole.rbac.authorization.k8s.io "harbor-extension-cluster-role" deleted clusterrolebinding.rbac.authorization.k8s.io "harbor-extension-cluster-rolebinding" deleted
Upgrade der Harbor-Erweiterung
- Rufen Sie die Harbor-Configmap ab.
kubectl get configmap harbor -n tanzu-system-harbor -o 'go-template={{ index .data "harbor.yaml" }}' > harbor-configmap.yaml
- Löschen Sie die vorhandene Harbor-Bereitstellung. Weitere Informationen hierzu finden Sie unter Löschen der Harbor-Erweiterung.
- Stellen Sie die Harbor-Erweiterung bereit. Weitere Informationen hierzu finden Sie unter Bereitstellen der Harbor-Erweiterung.