Harbor-Projekte erstellen

In Harbor dient ein Projekt als logische Einheit zum Organisieren und Verwalten einer Sammlung von Container-Images. Damit können Sie zusammengehörige Artefakte gruppieren und bestimmte Richtlinien, Zugriffssteuerungen und Replikationsregeln auf die gesamte Sammlung anwenden. Images können erst per Push oder Pull an Harbor übertragen werden, wenn ein Projekt erstellt wurde.

Hinweis

Bevor Sie beginnen, müssen Sie Ihre Identität bei der Harbor-Registry initialisieren. Melden Sie sich dazu mindestens einmal in der Harbor-Benutzeroberfläche an.

Erforderliche IAM-Rolle

Wenn Sie Harbor-Projekte erstellen und Image-Namespaces verwalten möchten, wenden Sie sich an Ihren IAM-Projektadministrator, um die Rolle Harbor Project Creator (harbor-project-creator) anzufordern. Mit dieser Rolle können Sie Harbor-Projekte im Projekt-Namespace erstellen, abrufen und beobachten. Diese Rolle enthält die erforderlichen Berechtigungen zum Definieren neuer Image-Namespaces, damit Sie Sicherheitsgrenzen für Ihre containerisierten Anwendungen festlegen können.

Harbor-Projekt erstellen

Erstellen Sie ein Harbor-Projekt mit der GDC-Konsole, der gdcloud CLI oder der API.

Console

Führen Sie in der GDC-Konsole die folgenden Schritte aus:

  1. Klicken Sie im Navigationsmenü im Abschnitt CI/CD auf den Link Harbor Container Registry.
  2. Klicken Sie auf Harbor-Projekt erstellen.
  3. Geben Sie den Namen des Projekts ein.
  4. Optional: Das Scannen auf Sicherheitslücken ist standardmäßig aktiviert. Wenn Sie das automatische Scannen auf Sicherheitslücken für Harbor-Projekte deaktivieren möchten, klicken Sie auf den Ein/Aus-Button Scannen auf Sicherheitslücken für das Projekt aktivieren. Weitere Informationen finden Sie unter Auf Sicherheitslücken prüfen.
  5. Klicken Sie auf Erstellen.
  6. Es wird eine Bestätigungsmeldung angezeigt, dass Ihr Projekt erfolgreich erstellt wurde.
  7. Nachdem Ihr Harbor-Projekt erstellt wurde, melden Sie sich in der Harbor-UI an, um zu prüfen, ob Sie das Harbor-Projekt sehen können.

gdcloud

Erstellen Sie das Harbor-Projekt:

  gdcloud harbor harbor-projects create HARBOR_PROJECT \
    --project=PROJECT \
    --instance=INSTANCE

Ersetzen Sie Folgendes:

  • HARBOR_PROJECT: der Name des zu erstellenden Harbor-Projekts.
  • PROJECT: der Name des GDC-Projekts.
  • INSTANCE: der Name der Instanz.

API

Die GDC-Konsole und die gdcloud CLI legen Ihr Nutzerkonto als Ersteller des Harbor-Projekts fest. Wenn Sie die API verwenden, müssen Sie das Feld spec.creatorSubject selbst festlegen.

  1. Erstellen Sie eine benutzerdefinierte HarborInstanceProject-Ressource auf dem zonalen Verwaltungs-API-Server. Sie können das Feld creatorSubject oder autoScan nach dem Erstellen der Ressource nicht mehr ändern. Prüfen Sie daher beide Werte, bevor Sie die Ressource erstellen.

    kubectl --kubeconfig MANAGEMENT_API_SERVER create -f - <<EOF
    apiVersion: artifactregistry.gdc.goog/v1
    kind: HarborInstanceProject
    metadata:
      name: INSTANCE-HARBOR_PROJECT
      namespace: PROJECT
    spec:
      projectName: HARBOR_PROJECT
      harborInstanceRef:
        name: INSTANCE
      creatorSubject:
        apiGroup: rbac.authorization.k8s.io
        kind: User
        name: HARBOR_USERNAME
      autoScan: true
    EOF
    

    Ersetzen Sie Folgendes:

    • MANAGEMENT_API_SERVER: der Pfad zur kubeconfig-Datei für den zonalen Verwaltungs-API-Server. Weitere Informationen finden Sie unter Zu einem zonalen Kontext wechseln.
    • INSTANCE: der Name der Harbor-Registry-Instanz.
    • HARBOR_PROJECT: der Name des zu erstellenden Harbor-Projekts.
    • PROJECT: der Name des GDC-Projekts, das die Harbor-Registry-Instanz enthält.
    • HARBOR_USERNAME: Ihr Harbor-Nutzername, genau wie im Harbor-UI-Nutzermenü nach der Anmeldung angezeigt. Dieser Nutzer wird zum Harbor-Projektadministrator des Harbor-Projekts. Verwenden Sie den Nutzernamen einer Person, nicht ein Dienstkonto. Weitere Informationen finden Sie unter Vorbereitung.

    Das Feld autoScan ermöglicht das automatische Scannen auf Sicherheitslücken für Images, die per Push an das Projekt übertragen werden. Wenn Sie das automatische Scannen deaktivieren möchten, legen Sie den Wert auf false fest. Weitere Informationen finden Sie unter Auf Sicherheitslücken prüfen.

  2. Prüfen Sie, ob das Harbor-Projekt erstellt und der Ersteller zugewiesen wurde:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      get harborinstanceproject INSTANCE-HARBOR_PROJECT \
      -n PROJECT
    

    In der Spalte PROJECTCREATEDSTATUS wird Created und in der Spalte PROJECTSUBJECTASSIGNEDSTATUS wird SubjectAssigned angezeigt.

    Wenn in der Spalte PROJECTSUBJECTASSIGNEDSTATUS der Wert SubjectAssignError angezeigt wird, prüfen Sie die Bedingungsmeldung:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      describe harborinstanceproject INSTANCE-HARBOR_PROJECT \
      -n PROJECT
    

    Eine user ... not found-Nachricht bedeutet, dass sich der im Feld creatorSubject angegebene Nutzer noch nicht in der Harbor-Benutzeroberfläche angemeldet hat. Der Harbor-Dienst versucht es alle 30 Sekunden noch einmal. Der Status ändert sich also in SubjectAssigned, nachdem sich der Nutzer angemeldet hat.

Harbor-Projekt korrigieren, das ohne Ersteller erstellt wurde

Wenn für eine HarborInstanceProject-Ressource in einem Projekt Ihrer Organisation das Feld spec.creatorSubject nicht festgelegt ist, beendet der Harbor-Dienst die Verarbeitung von Änderungen an Harbor-Ressourcen in Ihrer Organisation. Zu den Symptomen gehören Harbor-Instanzen, die nicht bereit sind, neue Harbor-Projekte, die ohne Status bleiben, und Image-Abrufe, die mit x509: certificate signed by unknown authority-Fehlern fehlschlagen.

Um dieses Problem zu beheben, benötigen Sie die Rolle Harbor-Instanzadministrator (harbor-instance-admin) in dem Projekt, das die betroffene Ressource enthält. Wenn Sie diese Rolle nicht haben, bitten Sie einen Nutzer, der sie hat, diese Schritte auszuführen. Wenn Sie nicht wissen, welche Ressource betroffen ist, wenden Sie sich an Ihren Infrastrukturbetreiber (IO). Dieser kann die Ressource in den Harbor-Dienstprotokollen finden.

  1. Prüfen Sie, ob die betroffene HarborInstanceProject-Ressource das Feld spec.creatorSubject festlegt:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      get harborinstanceproject HARBOR_INSTANCE_PROJECT \
      -n PROJECT -o jsonpath='{.spec.creatorSubject}'
    

    Ersetzen Sie Folgendes:

    • MANAGEMENT_API_SERVER: der Pfad zur kubeconfig-Datei für den zonalen Verwaltungs-API-Server. Weitere Informationen finden Sie unter Zu einem zonalen Kontext wechseln.
    • HARBOR_INSTANCE_PROJECT: der Name der HarborInstanceProject-Ressource. Ressourcen, die Sie auf dieser Seite auf dem Tab API erstellen, heißen INSTANCE-HARBOR_PROJECT.
    • PROJECT: der Name des GDC-Projekts, das die Ressource enthält.

    Eine leere Ausgabe bedeutet, dass das Feld nicht festgelegt ist.

  2. Bestätigen Sie den Harbor-Nutzernamen, der als Harbor-Projektadministrator zugewiesen werden soll, mit dem Inhaber des GDC-Projekts. Da Sie das Feld spec.creatorSubject nach dem Festlegen nicht mehr ändern können, sollten Sie den Nutzernamen prüfen, bevor Sie das Feld den einzelnen betroffenen Ressourcen hinzufügen:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      patch harborinstanceproject HARBOR_INSTANCE_PROJECT \
      -n PROJECT --type merge \
      -p '{"spec":{"creatorSubject":{"apiGroup":"rbac.authorization.k8s.io","kind":"User","name":"HARBOR_USERNAME"}}}'
    

    Ersetzen Sie HARBOR_USERNAME durch den Harbor-Nutzernamen des Nutzers, der als Harbor-Projektadministrator zugewiesen werden soll. Mit dieser Rolle können Images gelöscht und Projektmitglieder verwaltet werden. Der Nutzer muss sich mindestens einmal in der Harbor-Benutzeroberfläche angemeldet haben und der Nutzername muss genau mit dem Namen im Harbor-Benutzeroberflächen-Nutzermenü übereinstimmen.

  3. Prüfen Sie, ob der Ersteller zugewiesen ist:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      get harborinstanceproject HARBOR_INSTANCE_PROJECT \
      -n PROJECT
    

    Nachdem alle betroffenen Ressourcen korrigiert wurden, wird der Harbor-Dienst neu gestartet und die Verarbeitung von Änderungen wird innerhalb von etwa 10 Minuten fortgesetzt. In der Spalte PROJECTSUBJECTASSIGNEDSTATUS wird SubjectAssigned angezeigt. Wenn das Abrufen von Images aus Harbor nach 15 Minuten immer noch fehlschlägt, wenden Sie sich an Ihren IO. Geben Sie dem IO die Namen und Projekte der Ressourcen, die Sie korrigiert haben, damit der IO nach anderen betroffenen Ressourcen suchen und den Harbor-Dienst bei Bedarf neu starten kann.

Nächste Schritte

Nachdem Sie ein Harbor-Projekt erstellt haben, konfigurieren Sie Ihre Docker- und Helm-Clients so, dass sie eine Verbindung zu Ihrer Harbor-Registry herstellen: