Harbor est un registre de conteneur open source. Vous pouvez déployer le module Tanzu pour le registre Harbor en tant que magasin de registre privé pour les images de conteneur que vous souhaitez déployer sur des clusters TKG 2.
Conditions requises pour les modules
Respectez les exigences suivantes avant d'installer le module Tanzu pour le registre Harbor.
- Provisionnez un cluster TKG 2 avec une classe de stockage par défaut. Reportez-vous à la section Provisionnement de clusters TKG 2 sur le Superviseur.
Note : Harbor requiert une classe de stockage persistant par défaut. Si vous disposez d’un cluster TKG 2 sans classe de stockage par défaut, vous pouvez le corriger. Reportez-vous à la section Configuration de stockage persistant requise par défaut pour les modules Tanzu.
- Connectez-vous au cluster TKG 2. Reportez-vous à la section Gestion des identités et des accès pour les clusters TKG 2 sur le Superviseur.
- Conditions préalables à l'installation du module Tanzu. Reportez-vous à la section Installer les conditions préalables du module Tanzu à l'aide de Kubectl.
En outre, le registre Harbor a des conditions requises supplémentaires à remplir avant et après l'installation.
- 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 le module Contour. Reportez-vous à la section Installer le module Tanzu pour l'entrée Contour à l'aide de Kubectl.
- Si vous utilisez la mise en réseau NSX-T pour le Superviseur, créez un service Envoy de type LoadBalancer.
- Si vous utilisez la mise en réseau vSphere vDS pour le 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.
Composant Harbor
Le registre Tanzu Package for Harbor installe plusieurs conteneurs sur le cluster. Pour plus d'informations, consultez
https://goharbor.io/.
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 |
Installer le module Harbor
Pour installer le registre Harbor à l'aide du module Tanzu, procédez comme suit.
- Créez la spécification
harbor.yaml
.Reportez-vous à l'exemple suivant. Remplacez les valeurs de la partieharbor-data-values
par les valeurs appropriées de votre environnement, notamment le nom d'hôte, la classe de stockage, les clés TLS et les mots de passe.apiVersion: v1 kind: ServiceAccount metadata: name: harbor-sa namespace: tkg-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: habor-role-binding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: harbor-sa namespace: tkg-system --- apiVersion: packaging.carvel.dev/v1alpha1 kind: PackageInstall metadata: name: harbor namespace: tkg-system spec: serviceAccountName: harbor-sa packageRef: refName: harbor.tanzu.vmware.com versionSelection: constraints: 2.5.3+vmware.1-tkg.1 values: - secretRef: name: harbor-data-values --- apiVersion: v1 kind: Secret metadata: name: harbor-data-values namespace: tkg-system stringData: values.yml: | namespace: tanzu-system-registry hostname: harbor.example.com port: https: 443 logLevel: info tlsCertificate: tls.crt: "" tls.key: "" ca.crt: tlsCertificateSecretName: enableContourHttpProxy: true harborAdminPassword: <ENTER-STRONG-PASSWORD-HERE> secretKey: <ENTER-SECRET-KEY> database: password: <ENTER-STRONG-PASSWORD-HERE> shmSizeLimit: maxIdleConns: maxOpenConns: exporter: cacheDuration: core: replicas: 1 secret: <ENTER-SECRET> xsrfKey: <ENTER-XSRF-KEY-WHICH-IS-AN-ALPHANUMERIC-STRING-WITH-32-CHARS> jobservice: replicas: 1 secret: <ENTER-SECRET> registry: replicas: 1 secret: <ENTER-SECRET> notary: enabled: true trivy: enabled: true replicas: 1 gitHubToken: "" skipUpdate: false persistence: persistentVolumeClaim: registry: existingClaim: "" storageClass: "tkg2-storage-profile" subPath: "" accessMode: ReadWriteOnce size: 50Gi jobservice: existingClaim: "" storageClass: "tkg2-storage-profile" subPath: "" accessMode: ReadWriteOnce size: 10Gi database: existingClaim: "" storageClass: "tkg2-storage-profile" subPath: "" accessMode: ReadWriteOnce size: 10Gi redis: existingClaim: "" storageClass: "tkg2-storage-profile" subPath: "" accessMode: ReadWriteOnce size: 10Gi trivy: existingClaim: "" storageClass: "tkg2-storage-profile" subPath: "" accessMode: ReadWriteOnce size: 10Gi proxy: httpProxy: httpsProxy: noProxy: 127.0.0.1,localhost,.local,.internal pspNames: vmware-system-restricted network: ipFamilies: ["IPv4", "IPv6"]
- Installez Harbor.
kubectl apply -f harbor.yaml
Configurer DNS pour Harbor à l'aide d'un service Envoy de type LoadBalancer (mise en réseau NSX-T)
Si le service Envoy requis est exposé via un LoadBalancer, obtenez l'adresse IP externe de l'équilibrage de charge et créez des enregistrements DNS pour les noms de domaine complets Harbor.
- 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 #TKG2 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.
- 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.
Configurer DNS pour Harbor à l'aide d'un service Envoy de type NodePort (mise en réseau vDS)
Si le service Envoy requis est exposé via un NodePort, obtenez l'adresse IP de machine virtuelle d'un nœud worker et créez des enregistrements DNS pour les noms de domaine complets Harbor.
Note : Pour utiliser NodePort, vous devez avoir spécifié la valeur
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
- Choisissez l'un des nœuds worker et décrivez-le à l'aide de la commande suivante.
kubectl describe virtualmachines tkg2-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 #TKG2 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.
- 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.
Se connecter à l'interface Web de Harbor
Une fois Harbor installé et configuré, connectez-vous et commencez à l'utiliser.
- 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 Utilisation de registres de conteneur avec les clusters TKG 2 sur Superviseur.
- Pour plus d'informations sur l'utilisation de Harbor, reportez-vous à la documentation de Harbor.