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

Beachten Sie die folgenden Mindestversionsanforderungen für die Installation der TKG-Erweiterung für die Harbor-Registrierung in einem vom Tanzu Kubernetes Grid-Dienst bereitgestellten Tanzu Kubernetes-Cluster.
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

Beachten Sie die folgenden Voraussetzungen, bevor Sie die TKG-Erweiterung v1.3.1 für die Harbor-Registrierung bereitstellen.

Zusätzliche Anforderungen für die Harbor-Erweiterung

Für die TKG-Erweiterung v1.3.1 für die Harbor-Registrierung gelten zusätzliche Anforderungen vor und nach der Installation.
  • 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

Die TKG-Erweiterung für die Harbor-Registrierung installiert mehrere Container auf dem Cluster. Weitere Informationen finden Sie unter https://goharbor.io/.
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
Führen Sie die folgenden Schritte aus, um die Harbor-Registrierung mithilfe der TKG-Erweiterung zu installieren.
  1. Ü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.
  2. Ändern Sie das Verzeichnis in die Harbor-Erweiterung.
    cd /tkg-extensions-v1.3.1+vmware.1/extensions/registry/harbor
  3. Erstellen Sie den tanzu-system-registry-Namespace und das Harbor-Dienstkonto und die Harbor-Rollen.
    kubectl apply -f namespace-role.yaml
  4. Erstellen Sie eine Harbor-Datei mit Datenwerten.
    cp harbor-data-values.yaml.example harbor-data-values.yaml
  5. 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.
    Um automatisch zufällige Kennwörter und geheime Schlüssel zu generieren und die 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.

  6. 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.
  7. 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 Namespace tanzu-system-registry erstellt. Überprüfen Sie dies, indem Sie den folgenden Befehl ausführen:
    kubectl get secrets -n tanzu-system-registry
  8. Stellen Sie die Harbor-Erweiterung bereit.
    kubectl apply -f harbor-extension.yaml

    Bei Erfolg sollte app.kappctrl.k14s.io/harbor created angezeigt werden.

  9. Überprüfen Sie den Status der Harbor-Anwendung.
    kubectl get app harbor -n tanzu-system-registry
    Bei Erfolg ändert sich der Status von Reconciling zu Reconcile succeeded.
    NAME     DESCRIPTION   SINCE-DEPLOY   AGE
    harbor   Reconciling   96s            98s
    NAME     DESCRIPTION           SINCE-DEPLOY   AGE
    harbor   Reconcile succeeded   39s            2m29s
    Wenn der Status Reconcile failed lautet, finden Sie weitere Informationen unter Behebung von Fehlern bei der Bereitstellung der Harbor-Registrierung.
  10. Zeigen Sie detaillierte Informationen zur Harbor-Erweiterung an.
    kubectl get app harbor -n tanzu-system-registry -o yaml
  11. 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
  12. 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
  13. 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)

Wenn der erforderliche Envoy-Dienst über einen LoadBalancer verfügbar gemacht wird, rufen Sie die externe IP-Adresse des Lastausgleichsdiensts ab und erstellen Sie DNS-Datensätze für die Harbor-FQDNs.
  1. Rufen Sie die External-IP-Adresse für den Envoy-Dienst vom Typ LoadBalancer ab.
    kubectl get service envoy -n tanzu-system-ingress
    Die External-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 die External-IP-Adresse mit dem folgenden Befehl abrufen.
    kubectl get svc envoy -n tanzu-system-ingress -o jsonpath='{.status.loadBalancer.ingress[0]}'
  2. Um die Installation der Harbor-Erweiterung zu überprüfen, aktualisieren Sie Ihre lokale /etc/hosts-Datei mit den Harbor- und Notariats-FQDNs, die der External-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
    
  3. 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.
  4. 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.
  5. 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)

Wenn der erforderliche Envoy-Dienst über einen NodePort verfügbar gemacht wird, rufen Sie die IP-Adresse der virtuellen Maschine eines Worker-Knotens ab und erstellen Sie DNS-Datensätze für die Harbor-FQDNs.
Hinweis: Um NodePort zu verwenden, müssen Sie den korrekten port.https-Wert in der harbor-data-values.yaml-Datei angegeben haben.
  1. Wechseln Sie den Kontext zum vSphere-Namespace, in dem der Cluster bereitgestellt wird.
    kubectl config use-context VSPHERE-NAMESPACE
  2. 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
  3. 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
  4. Suchen Sie die IP-Adresse der virtuellen Maschine, z. B. Vm Ip: 10.115.22.43.
  5. 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
    
  6. 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.
  7. 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.
  8. 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

Sobald Harbor installiert und konfiguriert ist, melden Sie sich an und verwenden Sie es.
  1. Greifen Sie unter https://core.harbor.domain oder dem von Ihnen verwendeten Hostnamen auf die Webschnittstelle der Harbor-Registrierung zu.

    Die Weboberfläche der Harbor-Registrierung.

  2. 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.

    Die Anmeldeseite von Harbor mit dem Benutzernamen „admin“ und dem generierten Kennwort.

  3. Überprüfen Sie, ob Sie über die Harbor-Benutzeroberfläche auf den Host zugreifen können.

    Nachdem Sie sich angemeldet haben, wird die Registerkarte „Projekte“ der Harbor-Benutzeroberfläche angezeigt.

  4. Rufen Sie das Harbor-CA-Zertifikat ab.

    Klicken Sie in der Harbor-Benutzeroberfläche auf Projekte > Bibliothek, oder erstellen Sie ein Neues Projekt.

    Klicken Sie auf Registrierungszertifikat und laden Sie das Harbor-CA-Zertifikat (ca.crt) herunter.

  5. 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.
  6. 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.

Überprüfen Sie die Containerprotokolle, wobei 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.

  1. 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
    
  2. Aktualisieren Sie Harbor-Datenwerte in harbor-data-values.yaml.
  3. 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 Sie syncPeriod in harbor-extension.yaml einen niedrigeren Wert und wenden Sie die Contour-Erweiterung mit kubectl apply -f harbor-extension.yaml.
  4. Ü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.

  5. 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.

Hinweis: Führen Sie die Schritte der Reihe nach aus. Löschen Sie den Contour-Namespace und die Rollenobjekte erst, wenn die Contour-Erweiterung und -App gelöscht wurden. Durch Löschen des Contour-Namespaces und der Rollenobjekte wird das von kapp-controller verwendete Dienstkonto gelöscht. Wenn dieses Dienstkonto vor dem Löschen der App und der Erweiterung gelöscht wird, kann es zu Systemfehlern kommen.
  1. Wechseln Sie in das Verzeichnis, in das Sie die Harbor-Erweiterungsdateien heruntergeladen haben.
    cd /extensions/registry/harbor/
  2. Löschen Sie die Harbor-App.
    kubectl delete app harbor -n tanzu-system-registry
    Erwartetes Ergebnis:
    app.kappctrl.k14s.io "harbor" deleted
  3. Überprüfen Sie, ob die Harbor-App gelöscht wurde.
    kubectl get app Harbor -n tanzu-system-registry
    Erwartetes Ergebnis: Für die App wird Not Found angegeben.
    apps.kappctrl.k14s.io "harbor" not found
  4. 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

Wenn Sie eine vorhandene Harbor-Erweiterung bereitgestellt haben, können Sie sie auf die neueste Version aktualisieren.
  1. Rufen Sie die Harbor-Configmap ab.
    kubectl get configmap harbor -n tanzu-system-harbor -o 'go-template={{ index .data "harbor.yaml" }}' > harbor-configmap.yaml
    
  2. Löschen Sie die vorhandene Harbor-Bereitstellung. Weitere Informationen hierzu finden Sie unter Löschen der Harbor-Erweiterung.
  3. Stellen Sie die Harbor-Erweiterung bereit. Weitere Informationen hierzu finden Sie unter Bereitstellen der Harbor-Erweiterung.