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.
RemarqueSur 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.
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 :
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.
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.
kubectl
. Pour obtenir des instructions, reportez-vous aux sections Installer la CLI Tanzu et la CLI Kubernetes à utiliser avec un superviseur vSphere with Tanzu ou Installer la CLI Tanzu et la CLI Kubernetes à utiliser avec les clusters de gestion autonomes.tanzu context use
.imgpkg
, reportez-vous à la section Installer les outils Carvel.RemarqueVous ne pouvez pas utiliser la fonctionnalité de cache de proxy de Harbor pour exécuter Tanzu Kubernetes Grid v2.3 dans un environnement à accès restreint à Internet. Vous pouvez toujours utiliser un cache de proxy Harbor pour transmettre par proxy des images de versions antérieures de Tanzu Kubernetes Grid et des images non-Tanzu, telles que des images d'application.
Pour préparer un cluster pour le déploiement Harbor :
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
Si le cluster ne dispose pas d'un référentiel de modules avec le module Harbor installé, tel que le référentiel tanzu-standard
, installez-en un :
tanzu package repository add PACKAGE-REPO-NAME --url PACKAGE-REPO-ENDPOINT --namespace tkg-system
Où :
PACKAGE-REPO-NAME
est le nom du référentiel de modules, tel que tanzu-standard
ou le nom d'un registre d'images privé configuré avec des variables ADDITIONAL_IMAGE_REGISTRY
.PACKAGE-REPO-ENDPOINT
est l'URL du référentiel de modules.
tanzu-standard
est projects.registry.vmware.com/tkg/packages/standard/repo:v2023.10.16
. 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.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.
(Facultatif) Installez le module ExternalDNS. Pour obtenir des instructions, reportez-vous à la section Installer ExternalDNS pour la détection de services.
Passez à la section Déployer Harbor dans un cluster ci-dessous.
Suivez cette procédure pour déployer Harbor dans un cluster de charge de travail ou de services partagés :
Vérifiez que le module Harbor est disponible dans le cluster :
tanzu package available list -A
Récupérez la version du module disponible :
tanzu package available list harbor.tanzu.vmware.com -A
Créez un fichier de configuration pour le module Harbor en récupérant la configuration par défaut du module :
tanzu package available get harbor.tanzu.vmware.com/PACKAGE-VERSION --default-values-file-output FILE-PATH
Où 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.8.4_vmware.1-tkg.1
.
RemarqueLa méthode ci-dessus utilisant
--default-values-file-output
ne génère qu'une partie de la configuration. Pour obtenir un fichier de configuration complet pour le module Harbor, utilisezimgpkg
pour le récupérer à partir du bundle. Par exemple :imgpkg pull -b projects.registry.vmware.com/tkg/packages/standard/harbor:PACKAGE-VERSION -o /tmp/harbor-package-PACKAGE-VERSION
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
Où PACKAGE-VERSION
est la version du module Harbor que vous souhaitez installer.
Par exemple, pour le module Harbor v2.8.4, exécutez :
image_url=$(kubectl -n tkg-system get packages harbor.tanzu.vmware.com.2.8.4+vmware.1-tkg.1 -o jsonpath='{.spec.template.spec.fetch[0].imgpkgBundle.image}')
imgpkg pull -b $image_url -o /tmp/harbor-package-2.8.4
bash /tmp/harbor-package-2.8.4/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
Spécifiez d'autres paramètres dans le fichier harbor-data-values.yaml
.
hostname
sur le nom d'hôte que vous souhaitez utiliser pour accéder à Harbor. Par exemple, harbor.yourdomain.com
.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é.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
.RemarqueAvec 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
Où 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.8.4+vmware.1-tkg.1 --values-schema
Supprimez tous les commentaires dans le fichier harbor-data-values.yaml
:
yq -i eval '... comments=""' harbor-data-values.yaml
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
.
--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.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.8.4+vmware.1-tkg.1 \
--values-file harbor-data-values.yaml \
--namespace my-packages
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
Où PACKAGE-NAMESPACE
est l'espace de noms dans lequel le module harbor
est installé.
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
Où 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
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
[...]
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
Enregistrez la sortie pour l'étape suivante
Si le registre Harbor utilise une autorité de certification auto-signée, ajoutez-la aux clusters de charge de travail à l'aide de la procédure applicable en fonction du déploiement du cluster :
Déployé par le superviseur :
Déployé par un cluster de gestion autonome :
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
).
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
.
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
.
Maintenant que Harbor est configuré, vous pouvez lui transférer des images afin de les rendre disponibles pour une extraction par votre cluster.
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.
/etc/docker/certs.d/harbor.yourdomain.com/ca.crt
.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
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
Transférez de nouveau l'image vers le registre Harbor.
docker push harbor.yourdomain.com/library/nginx:1.7.9
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
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é.
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
.
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.8.4+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é.