Installer Harbor pour le registre de service

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

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.

Registre Harbor et ExternalDNS

VMware recommande d'installer ExternalDNS en plus du registre Harbor sur les infrastructures avec équilibrage de charge (par exemple, vSphere avec NSX Advanced Load Balancer), 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. Par exemple :

    kubectl config use-context tkg-services-admin@tkg-services
    
  2. Si le module 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.0.

    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

Pour déployer Harbor dans un cluster de charge de travail, procédez comme suit :

  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. Générez un fichier de configuration. Ce fichier configure Harbor.

    tanzu package available get harbor.tanzu.vmware.com/PACKAGE-VERSION --default-values-file-output FILE-PATH
    

    PACKAGE-VERSION est la version du module Harbor que souhaitez installer et FILE-PATH est l'emplacement dans lequel vous souhaitez enregistrer le fichier de configuration (par exemple, harbor-data-values.yaml).

    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
        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 v2.5.3, exécutez :

        image_url=$(kubectl -n tkg-system get packages harbor.tanzu.vmware.com/2.5.3+vmware.1-tkg.1 -o jsonpath='{.spec.template.spec.fetch[0].imgpkgBundle.image}')
        imgpkg pull -b $image_url -o /tmp/harbor-package-2.5.3
        bash /tmp/harbor-package-2.5.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.
        • 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.5.3+vmware.1-tkg.1 --values-schema
      
    3. Supprimez tous les commentaires du 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, l'application du module Harbor et toutes les autres ressources Kubernetes qui décrivent le module. Par exemple, l'espace de noms my-packages ou tanzu-cli-managed-packages. Si l'indicateur --namespace n'est pas spécifié, l'interface de ligne de commande 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.
    • 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.5.3+vmware.1-tkg.1 \
    --values-file harbor-data-values.yaml \
    --namespace my-packages
    
  5. 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é.

  6. 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
    
  7. 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-regisry, 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
    [...]
    
  8. 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.5.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é.

check-circle-line exclamation-circle-line close-line
Scroll to top icon