This site will be decommissioned on January 30th 2025. After that date content will be available at techdocs.broadcom.com.

Installer Harbor pour le registre de service

Cette rubrique explique comment déployer Harbor dans un cluster de charge de travail ou un cluster de services partagés dans Tanzu Kubernetes Grid.

Remarque

Sur vSphere with Tanzu, vous pouvez installer Harbor sur un superviseur, comme décrit dans la section Installation et configuration de Harbor sur un superviseur ou l'installer dans des clusters de charge de travail individuels, comme décrit ci-dessous.
Étant donné que les services de superviseur sont partagés, vSphere with Tanzu ne prend pas en charge le déploiement de modules sur un cluster de services partagés distinct.

Notary et Chartmuseum sont déconseillés dans Harbor 2.6 et leur suppression est prévue dans une version ultérieure, comme indiqué dans les Notes de mise à jour de Harbor 2.6.0. Les utilisateurs doivent passer à Sigstore Cosign pour la signature et la vérification du conteneur.

Port

Harbor est un registre de conteneur open source, approuvé et cloud natif qui stocke, signe et analyse le contenu. Tanzu Kubernetes Grid inclut des fichiers binaires en module signés pour Harbor, que vous pouvez déployer dans un cluster de charge de travail pour fournir des services de registre de conteneur pour ce cluster. Ce module Harbor étend la distribution Docker open source en ajoutant des fonctionnalités généralement requises par les utilisateurs, telles que la sécurité, le contrôle d'identité et la gestion.

Tanzu Kubernetes Grid inclut des fichiers binaires signés pour Harbor, que vous pouvez déployer dans :

  • Un cluster de charge de travail pour fournir des services de registre de conteneur pour ces clusters
  • Un cluster de services partagés pour fournir des services de registre de conteneur pour d'autres clusters de charge de travail dans un déploiement avec un cluster de gestion autonome.

Lorsqu'il est déployé en tant que service partagé, Harbor est disponible pour tous les clusters de charge de travail gérés par le même cluster de gestion autonome. Pour mettre en œuvre Harbor en tant que service partagé, déployez-le dans un cluster spécial dédié à l'exécution de services partagés. Chaque cluster de gestion ne peut disposer que d'un seul cluster de services partagés.

Registre Harbor et ExternalDNS

VMware recommande d'installer ExternalDNS en plus du registre Harbor sur les infrastructures avec équilibrage de charge, en particulier dans les environnements de production ou d'autres environnements dans lesquels la disponibilité Harbor est importante.

Si l'adresse IP de l'équilibrage de charge d'entrée est modifiée, ExternalDNS récupère automatiquement cette modification et remappe la nouvelle adresse au nom d'hôte Harbor. Cela annule la nécessité de remapper manuellement l'adresse comme décrit dans Connexion à l'interface utilisateur Harbor.

Conditions requises

Préparer un cluster pour le déploiement Harbor

Pour préparer un cluster pour le déploiement Harbor :

  1. Définissez le contexte de kubectl sur le cluster de charge de travail ou le cluster de services partagés. Par exemple :

    kubectl config use-context tkg-services-admin@tkg-services
    
  2. Si le référentiel de modules standard n'est pas déjà installé sur le cluster, installez-le :

    Remarque

    Si vous ciblez un cluster basé sur un plan (hérité), ignorez cette étape. Pour les clusters basés sur un plan, le référentiel de modules tanzu-standard est automatiquement activé dans chaque cluster, dans l'espace de noms tanzu-package-repo-global.

    tanzu package repository add tanzu-standard --url PACKAGE-REPOSITORY-ENDPOINT --namespace tkg-system
    

    PACKAGE-REPOSITORY-ENDPOINT est l'URL du référentiel de modules standard. Pour cette version, l'URL est projects.registry.vmware.com/tkg/packages/standard/repo:v2.1.1.

    Reportez-vous à la section Répertorier les référentiels de modules (List Package Repositories) pour obtenir cette valeur depuis la CLI Tanzu ou, dans Tanzu Mission Control, consultez la liste Modules complémentaires (Addons) > Référentiels (Repositories) dans le volet Cluster.

  3. Si vous ne l'avez pas encore fait, installez les modules Gestionnaire de certificats et Contour. Pour obtenir des instructions, reportez-vous à la section Installer Contour pour le contrôle d'entrée.

  4. (Facultatif) Installez le module ExternalDNS. Pour obtenir des instructions, reportez-vous à la section Installer ExternalDNS pour la détection de services.

  5. Passez à la section Déployer Harbor dans un cluster ci-dessous.

Déployer Harbor dans un cluster

Suivez cette procédure pour déployer Harbor dans un cluster de charge de travail ou de services partagés :

  1. Vérifiez que le module Harbor est disponible dans le cluster :

    tanzu package available list -A
    
  2. Récupérez la version du module disponible :

    tanzu package available list harbor.tanzu.vmware.com -A
    
  3. Téléchargez le module Harbor à partir du référentiel de modules standard :

    imgpkg pull -b projects.registry.vmware.com/tkg/packages/standard/harbor:PACKAGE-VERSION -o /tmp/harbor-package-PACKAGE-VERSION
    

    PACKAGE-VERSION est la version du module telle que répertoriée par tanzu package available list, mais avec un caractère _ remplacé par le caractère +. Elle doit également inclure le préfixe v. Par exemple, v2.6.3_vmware.1-tkg.1.

    Par exemple :

    imgpkg pull -b projects.registry.vmware.com/tkg/packages/standard/harbor:v2.6.3_vmware.1-tkg.1 -o /tmp/harbor-package-v2.6.3_vmware.1-tkg.1
    
    1. Définissez les mots de passe et secrets obligatoires dans le fichier harbor-data-values.yaml en procédant de l'une des manières suivantes :

      • Pour générer automatiquement des mots de passe et des secrets aléatoires, exécutez :

        image_url=$(kubectl -n tkg-system get packages harbor.tanzu.vmware.com.PACKAGE-VERSION -o jsonpath='{.spec.template.spec.fetch[0].imgpkgBundle.image}')
        imgpkg pull -b $image_url -o /tmp/harbor-package-PACKAGE-VERSION
        
        cp /tmp/harbor-package-PACKAGE-VERSION/config/values.yaml harbor-data-values.yaml
        
        bash /tmp/harbor-package-PACKAGE-VERSION/config/scripts/generate-passwords.sh harbor-data-values.yaml
        

        PACKAGE-VERSION est la version du module Harbor que vous souhaitez installer.

        Par exemple, pour le module Harbor 2.6.3, exécutez la commande suivante :

        image_url=$(kubectl -n tkg-system get packages harbor.tanzu.vmware.com.2.6.3+vmware.1-tkg.1 -o jsonpath='{.spec.template.spec.fetch[0].imgpkgBundle.image}')
        imgpkg pull -b $image_url -o /tmp/harbor-package-2.6.3
        bash /tmp/harbor-package-2.6.3/config/scripts/generate-passwords.sh harbor-data-values.yaml
        
      • Pour définir vos propres mots de passe et secrets, mettez à jour les entrées suivantes dans le fichier harbor-data-values.yaml :

        • harborAdminPassword
        • secretKey
        • database.password
        • core.secret
        • core.xsrfKey
        • jobservice.secret
        • registry.secret
    2. Spécifiez d'autres paramètres dans le fichier harbor-data-values.yaml.

      • Définissez le paramètre hostname sur le nom d'hôte que vous souhaitez utiliser pour accéder à Harbor. Par exemple, harbor.yourdomain.com.
      • Pour utiliser vos propres certificats, mettez à jour les paramètres tls.crt, tls.key et ca.crt avec le contenu de votre certificat, de votre clé et de votre certificat d'autorité de certification. Le certificat peut être signé par une autorité approuvée ou être autosigné. Si vous laissez ces champs vides, Tanzu Kubernetes Grid génère automatiquement un certificat autosigné.
      • Si vous avez utilisé le script generate-passwords.sh, vous pouvez mettre à jour le harborAdminPassword avec un élément plus facile à mémoriser, le cas échéant.
      • Des valeurs non vides sont requises pour les éléments suivants :

        • storageClass: Sous persistence.persistentVolumeClaim, pour registry, jobservice, database, redis et trivy, définissez storageClass sur un profil de stockage renvoyé par kubectl get sc.
        Remarque

        Avec la classe de stockage azure-file vous ne pouvez pas modifier les autorisations de système de fichiers après le montage du disque, en raison d'un problème Azure décrit dans la section « Impossible de modifier les autorisations » lors de l'utilisation de fichiers Azure de la documentation Azure.

        • pspNames: Définissez pspNames sur les valeurs de PSP renvoyées par kubectl get psp (par exemple, "vmware-system-restricted,vmware-system-privileged").
      • Le cas échéant, vous pouvez mettre à jour d'autres paramètres persistence pour spécifier comment Harbor stocke les données.

        Si vous devez stocker une grande quantité d'images de conteneur dans Harbor, définissez persistence.persistentVolumeClaim.registry.size sur un nombre supérieur.

      Pour afficher plus d'informations sur les valeurs dans le fichier harbor-data-values.yaml, exécutez la commande ci-dessous sur votre cluster cible :

      tanzu package available get harbor.tanzu.vmware.com/AVAILABLE-VERSION --values-schema
      

      AVAILABLE-VERSION est la version du module Harbor. L'indicateur --values-schema récupère la section valuesSchema de la ressource d'API Package du module Harbor. Vous pouvez définir le format de sortie (--output) pour le schéma de valeurs sur yaml, json ou table.

      Par exemple :

      tanzu package available get harbor.tanzu.vmware.com/2.6.3+vmware.1-tkg.1 --values-schema
      
    3. Supprimez tous les commentaires dans le fichier harbor-data-values.yaml :

      yq -i eval '... comments=""' harbor-data-values.yaml
      
  4. Installez le module :

    tanzu package install harbor \
    --package harbor.tanzu.vmware.com \
    --version AVAILABLE-PACKAGE-VERSION \
    --values-file harbor-data-values.yaml \
    --namespace TARGET-NAMESPACE
    

    Où :

    • TARGET-NAMESPACE est l'espace de noms dans lequel vous souhaitez installer le module Harbor. Par exemple, l'espace de noms my-packages ou tanzu-cli-managed-packages.

      • Si l'indicateur --namespace n'est pas spécifié, la CLI Tanzu installe le module et ses ressources dans l'espace de noms default. Les espaces Harbor et toutes les autres ressources associées au composant Harbor sont créés dans l'espace de noms tanzu-system-registry. N'installez pas le module Harbor dans cet espace de noms.
      • L'espace de noms spécifié doit déjà exister, par exemple en exécutant kubectl create namespace my-packages.
    • AVAILABLE-PACKAGE-VERSION est la version que vous avez récupérée ci-dessus.

    Par exemple :

    tanzu package install harbor \
    --package harbor.tanzu.vmware.com \
    --version 2.6.3+vmware.1-tkg.1 \
    --values-file harbor-data-values.yaml \
    --namespace my-packages
    
  5. Si vous utilisez ebs.csi.aws.com comme storageClass, procédez comme suit :

    • Modifiez la classe de stockage VolumeBoundMode de Immediate à WaitForFirstConsumer.

      • Notez qu'il s'agit d'une opération à l'échelle du cluster qui peut affecter les services en plus de Harbor.
    • Corrigez Harbor Scandata Volume EmptyDir Overlay comme suit. Cette superposition fait du volume scandata un répertoire vide pour éviter d'affecter la fonctionnalité d'exportation de scandata et de provoquer un conflit de zone de disponibilité lorsque le volume jobLog et le volume scandata sont montés dans le même espace jobservice :

      1. Créez un fichier scandata-empty-dir-overlay.yaml contenant le code Harbor Scandata Volume EmptyDir Overlay ci-dessous.

      2. Créez un secret générique avec la superposition :

        kubectl -n test  create secret generic scandata-empty-dir-overlay -o yaml --dry-run=client --from-file=scandata-emptyDir-overlay.yaml | kubectl apply -f -
        
      3. Corrigez le module Harbor avec le secret :
        kubectl -n test annotate packageinstalls harbor ext.packaging.carvel.dev/ytt-paths-from-secret-name.0=scandata-empty-dir-overlay
        
      4. Vérifiez si l'état du module est isReconciling:
        kubectl get pkgi harbor -n my-packages
        
      5. Si l'état du module n'est pas isReconciling, supprimez les espaces Harbor existants afin qu'ils se recréent :
        kubectl delete pods --all -n my-packages
        
  6. Vérifiez que le module harbor a été installé :

    tanzu package installed list -A
    

    Pour afficher plus de détails sur le module, vous pouvez également exécuter :

    tanzu package installed get harbor --namespace PACKAGE-NAMESPACE
    

    PACKAGE-NAMESPACE est l'espace de noms dans lequel le module harbor est installé.

  7. Vérifiez que l'application harbor a été rapprochée de votre espace PACKAGE-NAMESPACE :

    kubectl get apps -A
    

    Si l'état n'est pas Reconcile Succeeded, affichez les détails de l'état complet de l'application harbor. L'affichage de l'état complet peut vous aider à résoudre le problème.

    kubectl get app harbor --namespace PACKAGE-NAMESPACE -o yaml
    

    PACKAGE-NAMESPACE est l'espace de noms dans lequel vous avez installé le module. Si le dépannage ne vous aide pas à résoudre le problème, vous devez désinstaller le module avant de le réinstaller :

    tanzu package installed delete harbor --namespace PACKAGE-NAMESPACE
    
  8. Vérifiez que les services Harbor sont en cours d'exécution en répertoriant tous les espaces dans le cluster :

    kubectl get pods -A
    

    Dans l'espace de noms tanzu-system-registry, vous devez voir les services harbor core database, jobservice, notary, portal, redis, registry et trivy qui s'exécutent dans un espace portant des noms semblables aux noms suivants :

    NAMESPACE               NAME                                    READY   STATUS    RESTARTS   AGE
    [...]
    tanzu-system-ingress    contour-6b568c9b88-h5s2r                1/1     Running   0          26m
    tanzu-system-ingress    contour-6b568c9b88-mlg2r                1/1     Running   0          26m
    tanzu-system-ingress    envoy-wfqdp                             2/2     Running   0          26m
    tanzu-system-registry   harbor-core-557b58b65c-4kzhn            1/1     Running   0          23m
    tanzu-system-registry   harbor-database-0                       1/1     Running   0          23m
    tanzu-system-registry   harbor-jobservice-847b5c8756-t6kfs      1/1     Running   0          23m
    tanzu-system-registry   harbor-notary-server-6b74b8dd56-d7swb   1/1     Running   2          23m
    tanzu-system-registry   harbor-notary-signer-69d4669884-dglzm   1/1     Running   2          23m
    tanzu-system-registry   harbor-portal-8f677757c-t4cbj           1/1     Running   0          23m
    tanzu-system-registry   harbor-redis-0                          1/1     Running   0          23m
    tanzu-system-registry   harbor-registry-85b96c7777-wsdnj        2/2     Running   0          23m
    tanzu-system-registry   harbor-trivy-0                          1/1     Running   0          23m
    [...]
    
  9. Obtenez le certificat d'autorité de certification Harbor à partir du secret harbor-tls dans l'espace de noms tanzu-system-registry :

    kubectl -n tanzu-system-registry get secret harbor-tls -o=jsonpath="{.data.ca\.crt}" | base64 -d
    

    Faites une copie de la sortie.

Connexion à l'interface utilisateur Harbor

L'interface utilisateur Harbor est exposée via l'équilibrage de charge du service Envoy qui s'exécute dans l'espace de noms tanzu-system-ingress du cluster. Pour permettre aux utilisateurs de se connecter à l'interface utilisateur Harbor, vous devez mapper l'adresse de l'équilibrage de charge du service Envoy au nom d'hôte du service Harbor (par exemple, harbor.yourdomain.com).

  1. Obtenez l'adresse de l'équilibrage de charge du service Envoy.

    kubectl get svc envoy -n tanzu-system-ingress -o jsonpath='{.status.loadBalancer.ingress[0]}'
    

    Sur vSphere sans NSX Advanced Load Balancer (ALB), le service Envoy est exposé via NodePort au lieu de LoadBalancer. La sortie ci-dessus est donc vide et vous pouvez utiliser l'adresse IP de n'importe quel nœud worker du cluster à la place. Sur vSphere avec NSX ALB, le service Envoy a une adresse IP d'équilibrage de charge semblable à 20.54.226.44.

  2. Mappez l'adresse de l'équilibrage de charge du service Envoy au nom d'hôte du service Harbor. Pour les clusters qui s'exécutent sur vSphere, vous devez ajouter un mappage d'adresse IP au nom d'hôte dans /etc/hosts ou ajouter les enregistrements A correspondants dans votre serveur DNS. Par exemple, si l'adresse IP est 10.93.9.100, ajoutez ce qui suit à /etc/hosts :

    10.93.9.100 harbor.yourdomain.com notary.harbor.yourdomain.com
    

    Sur les machines Windows, l'équivalent de /etc/hosts/ est C:\Windows\System32\Drivers\etc\hosts.

Les utilisateurs peuvent désormais se connecter à l'interface utilisateur Harbor en accédant à https://harbor.yourdomain.com dans un navigateur Web et se connecter en tant qu'utilisateur admin avec le harborAdminPassword que vous avez configuré dans harbor-data-values.yaml.

Transférer et extraire des images vers et depuis Harbor

Maintenant que Harbor est configuré, vous pouvez lui transférer des images afin de les rendre disponibles pour une extraction par votre cluster.

  1. Si Harbor utilise un certificat autosigné, téléchargez le certificat d'autorité de certification Harbor à partir de https://harbor.yourdomain.com/api/v2.0/systeminfo/getcert et installez-le sur votre machine locale, afin que Docker puisse approuver ce certificat d'autorité de certification.

    • Sous Linux, enregistrez le certificat sous /etc/docker/certs.d/harbor.yourdomain.com/ca.crt.
    • Sur macOS, suivez cette procédure.
    • Sur Windows, cliquez avec le bouton droit sur le fichier de certificat et sélectionnez Installer le certificat (Install Certificate).
  2. Connectez-vous au registre Harbor avec l'utilisateur admin. Lorsque vous y êtes invité, entrez le harborAdminPassword que vous avez défini lors de l'installation du module Harbor dans le cluster.

    docker login harbor.yourdomain.com -u admin
    
  3. Balisez une image existante que vous avez déjà extraite localement (par exemple, nginx:1.7.9).

    docker tag nginx:1.7.9 harbor.yourdomain.com/library/nginx:1.7.9
    
  4. Transférez de nouveau l'image vers le registre Harbor.

    docker push harbor.yourdomain.com/library/nginx:1.7.9
    
  5. Vous pouvez désormais extraire l'image du registre Harbor sur n'importe quelle machine sur laquelle le certificat d'autorité de certification Harbor est installé.

    docker pull harbor.yourdomain.com/library/nginx:1.7.9
    

Mettre à jour un déploiement Harbor en cours d'exécution

Si vous devez apporter des modifications à la configuration du module Harbor après le déploiement, suivez ces étapes pour mettre à jour votre module Harbor déployé.

  1. Mettez à jour la configuration Harbor dans harbor-data-values.yaml. Par exemple, vous pouvez augmenter la quantité de stockage du registre en mettant à jour la valeur persistence.persistentVolumeClaim.registry.size.

  2. Mettez à jour la configuration du module installé :

    tanzu package installed update harbor \
    --version INSTALLED-PACKAGE-VERSION \
    --values-file harbor-data-values.yaml \
    --namespace INSTALLED-PACKAGE-NAMESPACE
    

    Où :

    • INSTALLED-PACKAGE-VERSION est la version du module Harbor installé.
    • INSTALLED-PACKAGE-NAMESPACE est l'espace de noms dans lequel le module Harbor est installé.

    Par exemple :

    tanzu package installed update harbor \
    --version 2.6.3+vmware.1-tkg.1 \
    --values-file harbor-data-values.yaml \
    --namespace my-packages
    

Le module Harbor sera rapproché à l'aide de la nouvelle valeur ou des nouvelles valeurs que vous avez ajoutées. L'application des modifications pour kapp-controller peut prendre jusqu'à cinq minutes.

Pour plus d'informations sur la commande tanzu package installed update, reportez-vous à la section Mettre à jour un module dans Installer et gérer des modules. Vous pouvez utiliser cette commande pour mettre à jour la version et la configuration d'un module installé.

Harbor Scandata Volume EmptyDir Overlay

scandata-empty-dir-overlay.yaml :

#@ load("@ytt:overlay", "overlay")
​
#@overlay/match by=overlay.and_op(overlay.subset({"kind": "Deployment"}), overlay.subset({"metadata": {"name": "harbor-jobservice"}}))
---
spec:
  template:
    spec:
      volumes:
        #@overlay/match by="name"
        #@overlay/remove
        - name: job-scandata-exports
        #@overlay/append
        - name: job-scandata-exports
          emptyDir:
            sizeLimit: 500Mi
check-circle-line exclamation-circle-line close-line
Scroll to top icon