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.
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.

  1. Créez la spécification harbor.yaml.
    Reportez-vous à l'exemple suivant. Remplacez les valeurs de la partie harbor-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"]
  2. 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.
  1. Obtenez l'adresse External-IP pour le service Envoy de type LoadBalancer.
    kubectl get service envoy -n tanzu-system-ingress
    Vous devez voir l'adresse External-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'adresse External-IP à l'aide de la commande suivante.
    kubectl get svc envoy -n tanzu-system-ingress -o jsonpath='{.status.loadBalancer.ingress[0]}'
  2. 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 External-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
    
  3. Pour vérifier l'installation de l'extension Harbor, connectez-vous à Harbor.
  4. 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.
  5. 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.
  1. Changez de contexte pour utiliser l'Espace de noms vSphere où le cluster est provisionné.
    kubectl config use-context VSPHERE-NAMESPACE
  2. Répertoriez les nœuds du cluster.
    kubectl get virtualmachines
  3. 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
  4. Localisez l'adresse IP de la machine virtuelle, par exemple Vm Ip: 10.115.22.43.
  5. 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
    
  6. Pour vérifier l'installation de l'extension Harbor, connectez-vous à Harbor.
  7. 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.
  8. Installez l'extension DNS externe.

Se connecter à l'interface Web de Harbor

Une fois Harbor installé et configuré, connectez-vous et commencez à l'utiliser.
  1. Accédez à l'interface Web du registre Harbor à l'adresse https://core.harbor.domain ou au nom d'hôte que vous avez utilisé.

    Interface Web du registre Harbor.

  2. 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.

    Page de connexion Harbor avec le nom d'utilisateur admin et le mot de passe généré.

  3. Vérifiez que vous pouvez accéder à l'interface utilisateur de Harbor.

    L'onglet Projets de l'interface utilisateur de Harbor s'affiche une fois que vous êtes connecté.

  4. Obtenez le certificat d'autorité de certification Harbor.

    Dans l'interface de Harbor, sélectionnez Projets > Bibliothèque ou créez un Nouveau projet.

    Cliquez sur Certificat de registre et téléchargez le certificat d'autorité de certification Harbor (ca.crt).

  5. 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.
  6. Pour plus d'informations sur l'utilisation de Harbor, reportez-vous à la documentation de Harbor.