Befolgen Sie diese Anweisungen zum Installieren von Harbor auf einem TKG-Cluster, der mit einer TKr für vSphere 7.x bereitgestellt wurde.

Voraussetzungen

Weitere Informationen hierzu finden Sie unter Workflow zum Installieren von Standardpaketen auf TKr für vSphere 7.x.

Harbor erfordert eingehenden HTTP/S-Datenverkehr. Harbor-Dienste werden über einen Envoy-Dienst im Contour-Paket zur Verfügung gestellt. Stellen Sie als Voraussetzung das Contour-Paket bereit. Weitere Informationen finden Sie unter Installieren von Contour auf TKr für vSphere 7.x.
  • Wenn Sie ein NSX-Netzwerk für den Supervisor verwenden, erstellen Sie einen Envoy-Dienst vom Typ „LoadBalancer“.
  • Wenn Sie ein vSphere vDS-Netzwerk für den Supervisor verwenden, erstellen Sie je nach Umgebung und Anforderungen einen Envoy-Dienst vom Typ „LoadBalancer“ oder „NodePort“.
Die Harbor-Erweiterung erfordert DNS. 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 oder Azure DNS. Nachdem Sie DNS eingerichtet haben, installieren Sie die ExternalDNS-Erweiterung, um die Harbor-FQDNs automatisch bei einem DNS-Server zu registrieren. Weitere Informationen finden Sie unter Installieren von ExternalDNS auf TKr für vSphere 7.x.

Installieren von Harbor

Führen Sie die folgenden Schritte aus, um die Harbor-Registrierung mithilfe des Standardpakets zu installieren.

  1. Listen Sie die verfügbaren Harbor-Versionen im Repository auf.
    kubectl get packages -n tkg-system | grep harbor
  2. Erstellen Sie eine harbor.yaml-Spezifikation.
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: harbor-sa
      namespace: tkg-system
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: habor-role-binding
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: cluster-admin
    subjects:
      - kind: ServiceAccount
        name: harbor-sa
        namespace: tkg-system
    ---
    apiVersion: packaging.carvel.dev/v1alpha1
    kind: PackageInstall
    metadata:
      name: harbor
      namespace: tkg-system
    spec:
      serviceAccountName: harbor-sa
      packageRef:
        refName: harbor.tanzu.vmware.com
        versionSelection:
          constraints: 2.7.1+vmware.1-tkg.1 #PKG-VERSION
      values:
      - secretRef:
          name: harbor-data-values
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: harbor-data-values
      namespace: harbor-registry
    stringData:
      values.yml: |
        namespace: tanzu-system-registry
        hostname: <ENTER-HARBOR-FQDN>
        port:
          https: 443
        logLevel: info
        tlsCertificate:
          tls.crt: ""
          tls.key: ""
          ca.crt:
        tlsCertificateSecretName:
        enableContourHttpProxy: true
        harborAdminPassword: <ENTER-STRONG-PASSWORD-HERE>
        secretKey: <ENTER-SECRET-KEY>
        database:
          password: <ENTER-STRONG-PASSWORD-HERE>
          shmSizeLimit:
          maxIdleConns:
          maxOpenConns:
        exporter:
          cacheDuration:
        core:
          replicas: 1
          secret: <ENTER-SECRET>
          xsrfKey: <ENTER-XSRF-KEY-WHICH-IS-AN-ALPHANUMERIC-STRING-WITH-32-CHARS>
        jobservice:
          replicas: 1
          secret: <ENTER-SECRET>
        registry:
          replicas: 1
          secret: <ENTER-SECRET>
        trivy:
          enabled: true
          replicas: 1
          gitHubToken: ""
          skipUpdate: false
        persistence:
          persistentVolumeClaim:
            registry:
              existingClaim: ""
              storageClass: "<ENTER-STORAGE-CLASS>"
              subPath: ""
              accessMode: ReadWriteOnce
              size: 50Gi
            jobservice:
              existingClaim: ""
              storageClass: "<ENTER-STORAGE-CLASS>"
              subPath: ""
              accessMode: ReadWriteOnce
              size: 10Gi
            database:
              existingClaim: ""
              storageClass: "<ENTER-STORAGE-CLASS>"
              subPath: ""
              accessMode: ReadWriteOnce
              size: 10Gi
            redis:
              existingClaim: ""
              storageClass: "<ENTER-STORAGE-CLASS>"
              subPath: ""
              accessMode: ReadWriteOnce
              size: 10Gi
            trivy:
              existingClaim: ""
              storageClass: "<ENTER-STORAGE-CLASS>"
              subPath: ""
              accessMode: ReadWriteOnce
              size: 10Gi
        proxy:
          httpProxy:
          httpsProxy:
          noProxy: 127.0.0.1,localhost,.local,.internal
        pspNames: vmware-system-restricted
        network:
          ipFamilies: ["IPv4", "IPv6"]
  3. Passen Sie den geheimen harbor-data-values-Schlüssel in der harbor.yaml-Spezifikation mit entsprechenden Werten für Ihre Umgebung an, einschließlich Hostname, Kennwörter, geheimer Schlüssel und Speicherklasse.

    Weitere Informationen finden Sie unter Referenz zum Harbor-Paket.

  4. Installieren Sie Harbor.
    kubectl apply -f harbor.yaml
  5. Überprüfen Sie die Harbor-Installation.
    kubectl get all -n harbor-registry

Konfigurieren von DNS für Harbor mithilfe von Envoy LoadBalancer (NSX-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
    #TKG 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.
  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.

Konfigurieren von DNS für Harbor mithilfe von Envoy 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
  3. Wählen Sie einen der Worker-Knoten aus und beschreiben Sie ihn mit dem folgenden Befehl.
    kubectl describe virtualmachines tkg2-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
    #TKG 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.
  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.

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 Verwenden privater Registrierungen mit TKG-Dienstclustern.
  6. Weitere Informationen zur Verwendung von Harbor finden Sie in der Harbor-Dokumentation.