Suivez ces instructions pour installer Harbor sur un cluster TKG provisionné avec une TKr pour vSphere 7.x.

Conditions requises

Reportez-vous à la section Workflow d'installation de modules standard sur TKr pour vSphere 7.x.

Harbor nécessite une entrée HTTP/S. Les services Harbor sont exposés via un service Envoy dans le module Contour. Comme condition préalable, déployez le module Contour. Reportez-vous à la section Installer Contour sur TKr pour vSphere 7.x.
  • Si vous utilisez la mise en réseau NSX 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 NodePort, selon votre environnement et vos exigences.
DNS est requis 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 ou Azure 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 Installer ExternalDNS sur TKr pour vSphere 7.x.

Installer Harbor

Pour installer le registre Harbor à l'aide du module standard, procédez comme suit.

  1. Répertoriez les versions de Harbor disponibles dans le référentiel.
    kubectl get packages -n tkg-system | grep harbor
  2. Créez la spécification harbor.yaml.
    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.7.1+vmware.1-tkg.1 #PKG-VERSION
      values:
      - secretRef:
          name: harbor-data-values
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: harbor-data-values
      namespace: harbor-registry
    stringData:
      values.yml: |
        namespace: tanzu-system-registry
        hostname: <ENTER-HARBOR-FQDN>
        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>
        trivy:
          enabled: true
          replicas: 1
          gitHubToken: ""
          skipUpdate: false
        persistence:
          persistentVolumeClaim:
            registry:
              existingClaim: ""
              storageClass: "<ENTER-STORAGE-CLASS>"
              subPath: ""
              accessMode: ReadWriteOnce
              size: 50Gi
            jobservice:
              existingClaim: ""
              storageClass: "<ENTER-STORAGE-CLASS>"
              subPath: ""
              accessMode: ReadWriteOnce
              size: 10Gi
            database:
              existingClaim: ""
              storageClass: "<ENTER-STORAGE-CLASS>"
              subPath: ""
              accessMode: ReadWriteOnce
              size: 10Gi
            redis:
              existingClaim: ""
              storageClass: "<ENTER-STORAGE-CLASS>"
              subPath: ""
              accessMode: ReadWriteOnce
              size: 10Gi
            trivy:
              existingClaim: ""
              storageClass: "<ENTER-STORAGE-CLASS>"
              subPath: ""
              accessMode: ReadWriteOnce
              size: 10Gi
        proxy:
          httpProxy:
          httpsProxy:
          noProxy: 127.0.0.1,localhost,.local,.internal
        pspNames: vmware-system-restricted
        network:
          ipFamilies: ["IPv4", "IPv6"]
  3. Personnalisez le secret harbor-data-values dans la spécification de harbor.yaml avec les valeurs appropriées pour votre environnement, notamment le nom d'hôte, les mots de passe, les secrets et la classe de stockage.

    Pour obtenir des conseils, reportez-vous à la section Référence du module Harbor.

  4. Installez Harbor.
    kubectl apply -f harbor.yaml
  5. Vérifiez l'installation de Harbor.
    kubectl get all -n harbor-registry

Configurer DNS pour Harbor à l'aide d'un service Envoy LoadBalancer (mise en réseau NSX)

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
    #TKG 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 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
    #TKG 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 privés avec des clusters Service TKG.
  6. Pour plus d'informations sur l'utilisation de Harbor, reportez-vous à la documentation de Harbor.