Harbor est un registre de conteneur open source. Vous pouvez déployer l'extension TKG pour le registre Harbor en tant que magasin de registre privé pour les images de conteneur que vous souhaitez déployer sur des clusters Tanzu Kubernetes.
Dépendances de versions de l'extension Harbor
Composant | Version minimale |
---|---|
vCenter Server | 7.0.2.00400 |
Espace de noms vSphere | 0.0.10-18245956 |
Cluster superviseur | v1.20.2+vmware.1-vsc0.0.10-18245956 |
Version de Tanzu Kubernetes | v1.20.7+vmware.1-tkg.1.7fb9067 |
Configuration requise pour l'extension Harbor
- Provisionner un cluster. Reportez-vous à la section Workflow de provisionnement de clusters Tanzu Kubernetes à l'aide de TKGS v1alpha2 API.
- Connectez-vous au cluster. Reportez-vous à la section Se connecter à un cluster Tanzu Kubernetes en tant qu'utilisateur vCenter Single Sign-On.
- Télécharger le bundle d'extensions TKG 1.3.1 sur l'hôte client sur lequel vous exécutez les commandes kubectl.
- Applications requises pour l'installation des extensions TKG sur le cluster cible.
Conditions requises supplémentaires pour l'extension Harbor
- L'extension Harbor nécessite une classe de stockage PVC par défaut. Reportez-vous à la section Vérifier les exigences de stockage persistant pour les extensions TKG.
- L'extension Harbor nécessite une entrée HTTP/S. Plus précisément, les services Harbor sont exposés via un service Envoy dans l'extension Contour. Comme condition préalable, déployez l'extension Contour. Reportez-vous à la section Déployer et gérer l'extension TKG pour l'entrée Contour.
- Si vous utilisez la mise en réseau NSX-T pour le Cluster superviseur, créez un service Envoy de type LoadBalancer.
- Si vous utilisez la mise en réseau vSphere vDS pour le Cluster superviseur, créez un service Envoy de type LoadBalancer ou de type NodePort, selon votre environnement et vos exigences.
- DNS est requis pour l'extension Harbor. Après l'installation, vous devez configurer DNS pour l'extension Harbor.
- À des fins de test et de vérification, ajoutez les noms de domaine complets Harbor et Notary à votre fichier /etc/hosts local. Les instructions ci-dessous décrivent cette procédure.
- En production, Harbor nécessite une zone DNS sur un serveur DNS local (tel que BIND) ou sur un cloud public (tel qu'AWS Route 53, Azure DNS ou Google Cloud DNS). Après avoir configuré DNS, pour enregistrer automatiquement les noms de domaine complets Harbor avec un serveur DNS, installez l'extension DNS externe. Reportez-vous à la section Déployer et gérer l'extension TKG pour la découverte de services DNS externes.
Déployer l'extension Harbor
Conteneur | Type de ressource | Réplicas | Description |
---|---|---|---|
harbor-core |
Déploiement | 1 | Serveur de gestion et de configuration pour Envoy |
harbor-database |
Espace | 1 | Base de données Postgres |
harbor-jobservice |
Déploiement | 1 | Service de tâche Harbor |
harbor-notary-server |
Déploiement | 1 | Service Notary Harbor |
harbor-notary-signer |
Déploiement | 1 | Notary Harbor |
harbor-portal |
Déploiement | 1 | Interface Web Harbor |
harbor-redis |
Espace | 1 | Instance Redis Harbor |
harbor-registry |
Déploiement | 2 | Instance de registre de conteneur Harbor |
harbor-trivy |
Espace | 1 | Scanner de vulnérabilité de l'image Harbor |
- Vérifiez que vous avez rempli chacune des conditions préalables de l'extension. Reportez-vous aux sections Configuration requise pour l'extension Harbor et Conditions requises supplémentaires pour l'extension Harbor.
- Remplacez le répertoire par celui de l'extension Harbor.
cd /tkg-extensions-v1.3.1+vmware.1/extensions/registry/harbor
- Créez l'espace de noms
tanzu-system-registry
, ainsi que le compte de service et les rôles Harbor.kubectl apply -f namespace-role.yaml
- Créez un fichier de valeurs de données Harbor.
cp harbor-data-values.yaml.example harbor-data-values.yaml
- Spécifiez les mots de passe et secrets obligatoires dans
harbor-data-values.yaml
.Le registre Harbor requiert plusieurs mots de passe et secrets répertoriés et décrits dans ce tableau.Mot de passe ou secret Description harborAdminPassword
Mot de passe initial de l'administrateur Harbor. secretKey
Clé secrète utilisée pour le chiffrement. Doit être une chaîne de 16 caractères. database.password
Mot de passe initial de la base de données Postgres. core.secret
Le secret est utilisé lorsque le serveur principal communique avec un autre composant. core.xsrfKey
Clé XSRF. Doit être une chaîne de 32 caractères. jobservice.secret
Le secret est utilisé lorsque le service de tâche communique avec un autre composant. registry.secret
Le secret est utilisé pour sécuriser l'état de chargement du client et du serveur principal de stockage du registre. harbor-data-values.yaml
, exécutez la commande suivante :bash generate-passwords.sh harbor-data-values.yaml
En cas de réussite, vous devez voir le message suivant :Successfully generated random passwords and secrets in harbor-data-values.yaml
Ouvrez le fichier
harbor-data-values.yaml
et vérifiez les mots de passe et secrets obligatoires. - Si nécessaire, spécifiez d'autres valeurs de configuration Harbor dans
harbor-data-values.yaml
. Les valeurs fréquemment mises à jour peuvent inclure les éléments suivants :Champ de configuration Description hostname
Le nom d'hôte Harbor par défaut est
core.harbor.domain
.Si nécessaire, modifiez cette valeur pour qu'elle corresponde à vos besoins.
port.https
La valeur par défaut est
443
.Si vous utilisez la mise en réseau NSX-T pour le Cluster superviseur et par conséquent un service d'entrée Envoy de type LoadBalancer, laissez ce paramètre sur la valeur par défaut de
443
.Si vous utilisez la mise en réseau vDS pour le Cluster superviseur et par conséquent un service d'entrée Envoy de type NodePort, définissez cette valeur pour correspondre à celle du port de nœud Envoy.
clair.enabled
Le scanner d'images Clair a été abandonné en faveur de Trivy. Ils sont cependant tous les deux activés dans le fichier de configuration.
Désactivez Clair en définissant sa valeur sur
false
.persistence.persistentVolumeClaim. <component>.accessMode
Il existe plusieurs instances de ce paramètre.
La valeur par défaut est
ReadWriteOnce
.ReadWriteMany
est prévu pour être pris en charge dans une prochaine version.imageChartStorage.type
La valeur par défaut est
filesystem
.Modifiez si nécessaire et configurez le stockage que vous utilisez.
proxy
Si vous le souhaitez, configurez un proxy pour Harbor. Si un proxy est configuré, les valeurs par défaut de noProxy
sont requises. - Créez un secret avec les valeurs de données.
kubectl create secret generic harbor-data-values --from-file=values.yaml=harbor-data-values.yaml -n tanzu-system-registry
secret/harbor-data-values
est créé dans l'espace de nomstanzu-system-registry
. Vérifiez cela en exécutant la commande suivante :kubectl get secrets -n tanzu-system-registry
- Déployez l'extension Harbor.
kubectl apply -f harbor-extension.yaml
En cas de réussite, vous devez voir
app.kappctrl.k14s.io/harbor created
. - Vérifiez l'état de l'application Harbor.
kubectl get app harbor -n tanzu-system-registry
En cas de réussite, l'état passe deReconciling
àReconcile succeeded
.NAME DESCRIPTION SINCE-DEPLOY AGE harbor Reconciling 96s 98s
NAME DESCRIPTION SINCE-DEPLOY AGE harbor Reconcile succeeded 39s 2m29s
Si l'état estReconcile failed
, reportez-vous à la section Dépanner le déploiement du registre Harbor. - Affichez des informations détaillées sur l'extension Harbor.
kubectl get app harbor -n tanzu-system-registry -o yaml
- Affichez l'état des objets de déploiement Harbor.
kubectl get deployments -n tanzu-system-registry
En cas de réussite, vous devez voir les déploiements suivants :
NAME READY UP-TO-DATE AVAILABLE AGE harbor-core 1/1 1 1 5m16s harbor-jobservice 1/1 1 1 5m16s harbor-notary-server 1/1 1 1 5m16s harbor-notary-signer 1/1 1 1 5m16s harbor-portal 1/1 1 1 5m16s harbor-registry 1/1 1 1 5m16s
- Affichez l'état des espaces Harbor :
kubectl get pods -n tanzu-system-registry
NAME READY STATUS RESTARTS AGE harbor-core-9cbf4b79d-gxvgx 1/1 Running 0 7m11s harbor-database-0 1/1 Running 0 7m11s harbor-jobservice-6b656ccb95-lm47d 1/1 Running 0 7m11s harbor-notary-server-8494c684db-gm7jf 1/1 Running 0 7m11s harbor-notary-signer-6f96b549d4-dzcnm 1/1 Running 0 7m11s harbor-portal-5b8f4ddbd-qdnp2 1/1 Running 0 7m11s harbor-redis-0 1/1 Running 0 7m11s harbor-registry-688894c58d-72txm 2/2 Running 0 7m11s harbor-trivy-0 1/1 Running 0 7m11s
- Dépannez l'installation Harbor, si nécessaire. Reportez-vous à la section Dépanner le déploiement du registre Harbor.
Configurer DNS pour Harbor à l'aide d'un service Envoy de type LoadBalancer (mise en réseau NSX-T)
- Obtenez l'adresse
External-IP
pour le service Envoy de type LoadBalancer.kubectl get service envoy -n tanzu-system-ingress
Vous devez voir l'adresseExternal-IP
renvoyée, par exemple :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
Vous pouvez également obtenir l'adresseExternal-IP
à l'aide de la commande suivante.kubectl get svc envoy -n tanzu-system-ingress -o jsonpath='{.status.loadBalancer.ingress[0]}'
- Pour vérifier l'installation de l'extension Harbor, mettez à jour votre fichier
/etc/hosts
local avec les noms de domaine complets Harbor et Notary mappés à l'adresseExternal-IP
de l'équilibrage de charge, par exemple :127.0.0.1 localhost 127.0.1.1 ubuntu # TKGS Harbor with Envoy Load Balancer IP 10.195.141.17 core.harbor.domain 10.195.141.17 core.notary.harbor.domain
- Pour vérifier l'installation de l'extension Harbor, connectez-vous à Harbor. Reportez-vous à la section Se connecter à l'interface Web de Harbor.
- Créez deux enregistrements CNAME sur un serveur DNS qui mappent l'adresse
External-IP
de l'équilibrage de charge du service Envoy aux noms de domaine complets Harbor et Notary. - Installez l'extension DNS externe. Reportez-vous à la section Déployer et gérer l'extension TKG pour la découverte de services DNS externes.
Configurer DNS pour Harbor à l'aide d'un service Envoy de type NodePort (mise en réseau vDS)
port.https
correcte dans le fichier
harbor-data-values.yaml
.
- Changez de contexte pour utiliser l'Espace de noms vSphere où le cluster est provisionné.
kubectl config use-context VSPHERE-NAMESPACE
- Répertoriez les nœuds du cluster.
kubectl get virtualmachines
Vous devez voir les nœuds de cluster, par exemple :NAME POWERSTATE AGE tkgs-cluster-X-control-plane-6dgln poweredOn 6h7m tkgs-cluster-X-control-plane-j6hq6 poweredOn 6h10m tkgs-cluster-X-control-plane-xc25f poweredOn 6h14m tkgs-cluster-X-workers-9twdr-59bc54dc97-kt4cm poweredOn 6h12m tkgs-cluster-X-workers-9twdr-59bc54dc97-pjptr poweredOn 6h12m tkgs-cluster-X-workers-9twdr-59bc54dc97-t45mn poweredOn 6h12m
- Choisissez l'un des nœuds worker et décrivez-le à l'aide de la commande suivante.
kubectl describe virtualmachines tkgs-cluster-X-workers-9twdr-59bc54dc97-kt4cm
- Localisez l'adresse IP de la machine virtuelle, par exemple
Vm Ip: 10.115.22.43
. - Pour vérifier l'installation de l'extension Harbor, mettez à jour votre fichier
/etc/hosts
local avec les noms de domaine complets Harbor et Notary mappés à l'adresse IP du nœud worker, par exemple :127.0.0.1 localhost 127.0.1.1 ubuntu # TKGS Harbor with Envoy NodePort 10.115.22.43 core.harbor.domain 10.115.22.43 core.notary.harbor.domain
- Pour vérifier l'installation de l'extension Harbor, connectez-vous à Harbor. Reportez-vous à la section Se connecter à l'interface Web de Harbor.
- Créez deux enregistrements CNAME sur un serveur DNS qui mappent l'adresse IP du nœud worker aux noms de domaine complets Harbor et Notary.
- Installez l'extension DNS externe. Reportez-vous à la section Déployer et gérer l'extension TKG pour la découverte de services DNS externes.
Se connecter à l'interface Web de Harbor
- Accédez à l'interface Web du registre Harbor à l'adresse https://core.harbor.domain ou au nom d'hôte que vous avez utilisé.
- Connectez-vous à Harbor avec le nom d'utilisateur admin et le mot de passe généré que vous avez placé dans le fichier
harbor-data-values.yaml
. - Vérifiez que vous pouvez accéder à l'interface utilisateur de Harbor.
- Obtenez le certificat d'autorité de certification Harbor.
Dans l'interface de Harbor, sélectionnez Nouveau projet.
ou créez unCliquez sur Certificat de registre et téléchargez le certificat d'autorité de certification Harbor (ca.crt).
- Ajoutez le certificat d'autorité de certification Harbor dans le magasin d'approbations du client Docker afin de pouvoir transférer et extraire des images de conteneur vers et depuis le registre Harbor. Reportez-vous à la section Configurer un client Docker avec le certificat de Registre Harbor intégré.
- Pour plus d'informations sur l'utilisation de Harbor, reportez-vous à la documentation de Harbor.
Dépanner le déploiement du registre Harbor
En cas d'échec du déploiement ou du rapprochement, exécutez kubectl get pods -n tanzu-system-registry
pour afficher l'état de l'espace. Les espaces harbor
doivent être à l'état Running
. Si l'état de l'espace est ImagePullBackOff
ou ImageCrashLoopBackOff
, l'image de conteneur n'a pas pu être extraite. Vérifiez l'URL du registre dans les valeurs de données et les fichiers YAML de l'extension, et assurez-vous qu'elles sont correctes.
name-XXXX
est le nom d'espace unique lorsque vous exécutez
kubectl get pods -A
:
kubectl logs pod/harbor-XXXXX -c harbor -n tanzu-system-registry
Mettre à jour l'extension Harbor
Mettez à jour l'extension Contour déployée sur un cluster Tanzu Kubernetes.
- Obtenez des valeurs de données Harbor à partir du secret.
kubectl get secret harbor-data-values -n tanzu-system-registry -o 'go-template={{ index .data "values.yaml" }}' | base64 -d > harbor-data-values.yaml
- Mettez à jour les valeurs des données Harbor dans
harbor-data-values.yaml
. - Mettez à jour le secret des valeurs de données Harbor.
kubectl create secret generic harbor-data-values --from-file=values.yaml=harbor-data-values.yaml -n tanzu-system-registry -o yaml --dry-run | kubectl replace -f-
L'extension Harbor sera rapprochée des nouvelles valeurs de données.Note : Par défaut, kapp-controller synchronise les applications toutes les 5 minutes. La mise à jour doit prendre effet en 5 minutes ou moins. Si vous souhaitez que la mise à jour prenne effet immédiatement, modifiezsyncPeriod
dansharbor-extension.yaml
à une valeur inférieure et appliquez l'extension Contour à l'aide dekubectl apply -f harbor-extension.yaml
. - Vérifiez l'état de l'extension.
kubectl get app harbor -n tanzu-system-registry
L'état de l'application Contour doit être
Reconcile Succeeded
une fois que celle-ci est mise à jour. - Affichez l'état détaillé et résolvez les problèmes.
kubectl get app harbor -n tanzu-system-registry -o yaml
Supprimer l'extension Harbor
Supprimez l'extension Harbor d'un cluster Tanzu Kubernetes.
- Remplacez le répertoire par celui où vous avez téléchargé les fichiers de l'extension Harbor.
cd /extensions/registry/harbor/
- Supprimez l'application Harbor.
kubectl delete app harbor -n tanzu-system-registry
Résultat attendu :app.kappctrl.k14s.io "harbor" deleted
- Vérifiez que l'application Harbor est supprimée.
kubectl get app Harbor -n tanzu-system-registry
Résultat attendu : l'application estNot Found
.apps.kappctrl.k14s.io "harbor" not found
- Supprimez l'espace de noms du Registre.
Ce n'est qu'après avoir confirmé que l'extension et l'application Harbor sont entièrement supprimées que vous pouvez supprimer en toute sécurité l'espace de noms et les objets de rôle.
kubectl delete -f namespace-role.yaml
Résultat attendu : l'espace de noms dans lequel Harbor est déployé et les objets de contrôle d'accès basés sur les rôles associés sont supprimés.namespace "tanzu-system-registry" deleted serviceaccount "harbor-extension-sa" deleted role.rbac.authorization.k8s.io "harbor-extension-role" deleted rolebinding.rbac.authorization.k8s.io "harbor-extension-rolebinding" deleted clusterrole.rbac.authorization.k8s.io "harbor-extension-cluster-role" deleted clusterrolebinding.rbac.authorization.k8s.io "harbor-extension-cluster-rolebinding" deleted
Mettre à niveau l'extension Harbor
- Obtenez le configmap Harbor.
kubectl get configmap harbor -n tanzu-system-harbor -o 'go-template={{ index .data "harbor.yaml" }}' > harbor-configmap.yaml
- Supprimez le déploiement Harbor existant. Reportez-vous à la section Supprimer l'extension Harbor.
- Déployez l'extension Harbor. Reportez-vous à la section Déployer l'extension Harbor.