Seguire queste istruzioni per installare Harbor in un cluster TKG sottoposto a provisioning con TKr per vSphere 7.x.

Prerequisiti

Vedere Workflow per l'installazione di pacchetti standard in una TKr per vSphere 7.x.

Harbor richiede l'ingresso HTTP/S. I servizi Harbor sono esposti tramite un servizio Envoy nel pacchetto Contour. Come prerequisito, distribuire il pacchetto Contour. Vedere Installazione di Contour in TKr per vSphere 7.x.
  • Se si utilizza la rete NSX per il Supervisore, creare un servizio Envoy di tipo LoadBalancer.
  • Se si utilizza la rete vDS vSphere per il l'Supervisore, creare un servizio Envoy di tipo LoadBalancer o di tipo NodePort, in base all'ambiente e ai requisiti.
L'estensione Harbor richiede DNS. A scopo di test e verifica, aggiungere FQDN Harbor e Notary al file /etc/hosts locale locale. Le istruzioni seguenti descrivono come eseguire questa operazione.

In produzione Harbor richiede una zona DNS su un server DNS locale, come BIND, o su un cloud pubblico, come AWS Route53 o Azure DNS. Una volta impostato DNS, per registrare automaticamente i nomi di dominio completo di Harbor con un server DNS, installare l'estensione ExternalDNS. Vedere Installazione di ExternalDNS in TKr per vSphere 7.x.

Installazione di Harbor

Per installare il registro Harbor utilizzando il pacchetto standard, completare i passaggi seguenti.

  1. Visualizzare l'elenco delle versioni di Harbor disponibili nel repository.
    kubectl get packages -n tkg-system | grep harbor
  2. Creare la specifica 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. Personalizzare il segreto harbor-data-values nella specifica harbor.yaml con i valori appropriati per l'ambiente, inclusi nome host, password, segreti e classe di storage.

    Per istruzioni, fare riferimento alla Informazioni di riferimento sul pacchetto Harbor.

  4. Installare Harbor.
    kubectl apply -f harbor.yaml
  5. Verificare l'installazione di Harbor.
    kubectl get all -n harbor-registry

Configurazione di DNS per Harbor tramite un LoadBalancer di Envoy (rete NSX)

Se è stato esposto il servizio Envoy prerequisito tramite un LoadBalancer, ottenere l'indirizzo IP esterno del bilanciamento del carico e creare record DNS per FQDN Harbor.
  1. Ottenere l'indirizzo External-IP per il servizio Envoy di tipo LoadBalancer.
    kubectl get service envoy -n tanzu-system-ingress
    Dovrebbe essere visualizzato l'indirizzo External-IP restituito, ad esempio:
    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
    In alternativa, è possibile ottenere l'indirizzo External-IP utilizzando il comando seguente.
    kubectl get svc envoy -n tanzu-system-ingress -o jsonpath='{.status.loadBalancer.ingress[0]}'
  2. Per verificare l'installazione dell'estensione Harbor, aggiornare il file /etc/hosts locale con i FQDN Harbor e Notary mappati all'indirizzo External-IP del bilanciamento del carico, ad esempio:
    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. Per verificare l'installazione dell'estensione Harbor, accedere a Harbor.
  4. Creare due record CNAME su un server DNS che mappa l'indirizzo External-IP del bilanciamento del carico del servizio Envoy al FQDN Harbor e Notary.
  5. Installare l'estensione DNS esterno.

Configurazione di DNS per Harbor tramite un NodePort di Envoy (rete vDS)

Se è stato esposto il servizio Envoy prerequisito tramite NodePort, ottenere l'indirizzo IP della macchina virtuale di un nodo di lavoro e creare record DNS per i FQDN Harbor.
Nota: Per utilizzare NodePort, è necessario aver specificato il valore port.https corretto nel file harbor-data-values.yaml.
  1. Passare al contesto dello Spazio dei nomi vSphere in cui viene eseguito il provisioning del cluster.
    kubectl config use-context VSPHERE-NAMESPACE
  2. Elencare i nodi nel cluster.
    kubectl get virtualmachines
  3. Scegliere uno dei nodi di lavoro e descriverlo utilizzando il comando seguente.
    kubectl describe virtualmachines tkg2-cluster-X-workers-9twdr-59bc54dc97-kt4cm
  4. Individuare l'indirizzo IP della macchina virtuale, ad esempio Vm Ip: 10.115.22.43.
  5. Per verificare l'installazione dell'estensione Harbor, aggiornare il file /etc/hosts locale con i FQDN Harbor e Notary mappati all'indirizzo IP del nodo di lavoro, ad esempio:
    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. Per verificare l'installazione dell'estensione Harbor, accedere a Harbor.
  7. Creare due record CNAME su un server DNS che mappano l'indirizzo IP del nodo di lavoro ai FQDN Harbor e Notary.
  8. Installare l'estensione DNS esterno.

Accedere all'interfaccia Web di Harbor

Una volta installato e configurato Harbor, accedere e iniziare a utilizzarlo.
  1. Accedere all'interfaccia web del registro Harbor a https://core.harbor.domain o al nome host usato.

    Interfaccia Web del registro Harbor.

  2. Acceda a Harbor con il nome utente admin e la password generata che è stata inserita nel file del harbor-data-values.yaml.

    Pagina di accesso di Harbor con il nome utente admin e la password generata.

  3. Assicurarsi di poter accedere all'interfaccia utente di Harbor.

    La scheda Progetti dell'interfaccia utente di Harbor viene visualizzata dopo avere effettuato l'accesso.

  4. Ottenere il certificato CA di Harbor.

    Nell'interfaccia di Harbor, selezionare Progetti > libreria oppure creare un Nuovo progetto.

    Fare clic su Certificato di registro e scaricare il certificato CA di Harbor (ca.crt).

  5. Aggiungere il certificato CA di Harbor nel trust store del client Docker così da poter inviare ed estrarre immagini del contenitore verso e dal registro Harbor. Vedere Utilizzo di registri privati con cluster Servizio TKG.
  6. Fai riferimento alla documentazione di Harbor per i dettagli su come utilizzare Harbor.