Questo argomento spiega come distribuire Harbor in un cluster del carico di lavoro o in un cluster di servizi condivisi in Tanzu Kubernetes Grid.
NotaIn vSphere with Tanzu è possibile installare Harbor in un supervisore come descritto in Installazione e configurazione di Harbor in un supervisore o installarlo in singoli cluster del carico di lavoro come descritto di seguito.
Poiché i servizi del supervisore sono condivisi, vSphere with Tanzu non supporta la distribuzione di pacchetti in un cluster di servizi condivisi separato.Notary e Chartmuseum sono obsoleti in Harbor v2.6 e saranno rimossi in una versione futura, come indicato nelle Note di rilascio di Harbor v2.6.0. Gli utenti devono passare a Sigstore Cosign per la firma e la verifica del container.
Harbor è un registro di container open source, attendibile e nativo del cloud che archivia, firma e scansiona contenuti. Tanzu Kubernetes Grid include file binari in pacchetto firmati per Harbor, che è possibile distribuire in un cluster del carico di lavoro per fornire i servizi del registro container per tale cluster. Questo pacchetto Harbor estende la distribuzione open source di Docker aggiungendo le funzionalità solitamente richieste dagli utenti quali il controllo e la gestione della sicurezza e dell'identità.
Tanzu Kubernetes Grid include file binari firmati per Harbor, che è possibile distribuire in:
Quando viene distribuito come servizio condiviso, Harbor è disponibile per tutti i cluster del carico di lavoro gestiti dallo stesso cluster di gestione autonomo. Per implementare Harbor come servizio condiviso, distribuirlo in un cluster specifico dedicato all'esecuzione dei servizi condivisi. Ogni cluster di gestione può avere un solo cluster di servizi condivisi.
VMware consiglia di installare ExternalDNS insieme al registro Harbor in infrastrutture con bilanciamento del carico, soprattutto negli ambienti di produzione o in altri ambienti in cui la disponibilità di Harbor è importante.
Se l'indirizzo IP del bilanciamento del carico in ingresso cambia, ExternalDNS riprende automaticamente la modifica e mappa nuovamente il nuovo indirizzo al nome host Harbor. Ciò preclude la necessità di mappare manualmente l'indirizzo come descritto in Connessione all'interfaccia utente di Harbor.
kubectl
, e gli strumenti Carvel sono stati installati. Per istruzioni, vedere Installazione della CLI di Tanzu e altri strumenti per l'utilizzo con un supervisore vSphere with Tanzu o Installazione della CLI di Tanzu e altri strumenti per l'utilizzo con i cluster di gestione autonomi.tanzu login
.Per preparare un cluster per la distribuzione di Harbor:
Impostare il contesto di kubectl
sul cluster del carico di lavoro o sul cluster di servizi condivisi. Ad esempio:
kubectl config use-context tkg-services-admin@tkg-services
Se nel cluster non è già installato il repository dei pacchetti standard
, installarlo:
NotaSe si utilizza un cluster basato sul piano (legacy), ignorare questo passaggio. Per i cluster basati sul piano, il repository dei pacchetti
tanzu-standard
veniva abilitato automaticamente in ogni cluster nello spazio dei nomitanzu-package-repo-global
.
tanzu package repository add tanzu-standard --url PACKAGE-REPOSITORY-ENDPOINT --namespace tkg-system
Dove PACKAGE-REPOSITORY-ENDPOINT
è l'URL del repository del pacchetto standard
. Per questa versione, l'URL è projects.registry.vmware.com/tkg/packages/standard/repo:v2.1.1
.
Vedere Elenco dei repository dei pacchetti per ottenere questo valore dalla CLI di Tanzu oppure in Tanzu Mission Control vedere l'elenco Elementi aggiuntivi (Addons) > Repository (Repositories) nel riquadro Cluster.
Se non è già stato fatto, installare i pacchetti cert-manager e Contour. Per istruzioni, vedere Installazione di Contour per il controllo dell'ingresso.
(Facoltativo) Installare il pacchetto ExternalDNS. Per istruzioni, vedere Installazione di ExternalDNS per l'esplorazione dei servizi.
Procedere con Distribuire Harbor in un cluster di seguito.
Seguire questa procedura per distribuire Harbor in un cluster del carico di lavoro o in un cluster di servizi condivisi:
Confermare che il pacchetto Harbor sia disponibile nel cluster:
tanzu package available list -A
Recuperare la versione del pacchetto disponibile:
tanzu package available list harbor.tanzu.vmware.com -A
Scaricare il pacchetto Harbor dal repository del pacchetto standard
:
imgpkg pull -b projects.registry.vmware.com/tkg/packages/standard/harbor:PACKAGE-VERSION -o /tmp/harbor-package-PACKAGE-VERSION
Dove PACKAGE-VERSION
è la versione del pacchetto elencata nell'elenco tanzu package available list
ma con un carattere _
sostituito dal carattere +
. Deve inoltre includere il prefisso v
. Ad esempio, v2.6.3_vmware.1-tkg.1
.
Ad esempio:
imgpkg pull -b projects.registry.vmware.com/tkg/packages/standard/harbor:v2.6.3_vmware.1-tkg.1 -o /tmp/harbor-package-v2.6.3_vmware.1-tkg.1
Impostare le password e i segreti obbligatori nel file harbor-data-values.yaml
eseguendo una delle seguenti operazioni:
Per generare automaticamente password e segreti casuali, eseguire:
image_url=$(kubectl -n tkg-system get packages harbor.tanzu.vmware.com.PACKAGE-VERSION -o jsonpath='{.spec.template.spec.fetch[0].imgpkgBundle.image}')
imgpkg pull -b $image_url -o /tmp/harbor-package-PACKAGE-VERSION
cp /tmp/harbor-package-PACKAGE-VERSION/config/values.yaml harbor-data-values.yaml
bash /tmp/harbor-package-PACKAGE-VERSION/config/scripts/generate-passwords.sh harbor-data-values.yaml
Dove PACKAGE-VERSION
è la versione del pacchetto Harbor che si desidera installare.
Ad esempio, per il pacchetto Harbor v2.6.3, eseguire:
image_url=$(kubectl -n tkg-system get packages harbor.tanzu.vmware.com.2.6.3+vmware.1-tkg.1 -o jsonpath='{.spec.template.spec.fetch[0].imgpkgBundle.image}')
imgpkg pull -b $image_url -o /tmp/harbor-package-2.6.3
bash /tmp/harbor-package-2.6.3/config/scripts/generate-passwords.sh harbor-data-values.yaml
Per impostare password e segreti personalizzati, aggiornare le voci seguenti nel file harbor-data-values.yaml
:
harborAdminPassword
secretKey
database.password
core.secret
core.xsrfKey
jobservice.secret
registry.secret
Specificare altre impostazioni nel file harbor-data-values.yaml
.
hostname
sul nome host da utilizzare per accedere a Harbor. Ad esempio, harbor.yourdomain.com
.tls.crt
, tls.key
e ca.crt
con il contenuto del certificato, della chiave e del certificato CA. Il certificato può essere firmato da un'autorità attendibile o autofirmato. Se si lascia vuoto questo campo, Tanzu Kubernetes Grid genera automaticamente un certificato autofirmato.generate-passwords.sh
, aggiornare facoltativamente la password harborAdminPassword
con qualcosa di più semplice da ricordare.Per i valori seguenti il campo non può essere vuoto:
storageClass
: In persistence.persistentVolumeClaim
, per registry
, jobservice
, database
, redis
e trivy
impostare storageClass
su un profilo archivio restituito da kubectl get sc
.NotaCon la classe di storage
azure-file
non è possibile modificare le autorizzazioni del file system dopo il montaggio del disco a causa di un problema di Azure descritto in Errore "Impossibile modificare le autorizzazioni" durante l'utilizzo dei file di Azure nella documentazione di Azure.
pspNames
: Impostare pspNames
su valori PSP restituiti da kubectl get psp
, ad esempio "vmware-system-restricted,vmware-system-privileged"
.Facoltativamente, aggiornare altre impostazioni persistence
per specificare il modo in cui Harbor archivia i dati.
Se è necessario archiviare una grande quantità di immagini del container in Harbor, impostare persistence.persistentVolumeClaim.registry.size
su un numero maggiore.
Per ulteriori informazioni sui valori nel file harbor-data-values.yaml
, eseguire il comando seguente per il cluster di destinazione:
tanzu package available get harbor.tanzu.vmware.com/AVAILABLE-VERSION --values-schema
Dove AVAILABLE-VERSION
è la versione del pacchetto Harbor. Il flag --values-schema
recupera la sezione valuesSchema
dalla risorsa API Package
per il pacchetto Harbor. È possibile impostare il formato di output, --output
, per lo schema dei valori su yaml
, json
o table
.
Ad esempio:
tanzu package available get harbor.tanzu.vmware.com/2.6.3+vmware.1-tkg.1 --values-schema
Rimuovere tutti i commenti nel file harbor-data-values.yaml
:
yq -i eval '... comments=""' harbor-data-values.yaml
Installare il pacchetto:
tanzu package install harbor \
--package harbor.tanzu.vmware.com \
--version AVAILABLE-PACKAGE-VERSION \
--values-file harbor-data-values.yaml \
--namespace TARGET-NAMESPACE
In cui:
TARGET-NAMESPACE
è lo spazio dei nomi in cui si desidera installare il pacchetto Harbor. Ad esempio, lo spazio dei nomi my-packages
o tanzu-cli-managed-packages
.
--namespace
non è specificato, la CLI di Tanzu installa il pacchetto e le relative risorse nello spazio dei nomi default
. I pod Harbor e tutte le altre risorse associate al componente Harbor vengono create nello spazio dei nomi tanzu-system-registry
; non installare il pacchetto Harbor in questo spazio dei nomi.kubectl create namespace my-packages
.AVAILABLE-PACKAGE-VERSION
è la versione recuperata in precedenza.Ad esempio:
tanzu package install harbor \
--package harbor.tanzu.vmware.com \
--version 2.6.3+vmware.1-tkg.1 \
--values-file harbor-data-values.yaml \
--namespace my-packages
Se si utilizza ebs.csi.aws.com
come storageClass
, eseguire una delle operazioni seguenti:
Modificare la classe di storage VolumeBoundMode
da Immediate
a WaitForFirstConsumer
.
Applicare una patch ad Harbor Scandata Volume EmptyDir overlay come indicato di seguito. Questo overlay rende il volume dei dati di scansione una directory vuota per evitare di influire sulla funzionalità di esportazione dei dati di scansione e causare un conflitto della zona di disponibilità quando il volume jobLog
e il volume scandata
vengono montati nello stesso pod jobservice:
Creare un file scandata-empty-dir-overlay.yaml
contenente il codice Harbor Scandata Volume EmptyDir Overlay seguente.
Creare un segreto generico dall'overlay:
kubectl -n test create secret generic scandata-empty-dir-overlay -o yaml --dry-run=client --from-file=scandata-emptyDir-overlay.yaml | kubectl apply -f -
kubectl -n test annotate packageinstalls harbor ext.packaging.carvel.dev/ytt-paths-from-secret-name.0=scandata-empty-dir-overlay
isReconciling
:kubectl get pkgi harbor -n my-packages
isReconciling
, eliminare i pod Harbor esistenti in modo che vengano ricreati:kubectl delete pods --all -n my-packages
Verificare che il pacchetto harbor
sia stato installato:
tanzu package installed list -A
Per visualizzare ulteriori dettagli sul pacchetto, è inoltre possibile eseguire:
tanzu package installed get harbor --namespace PACKAGE-NAMESPACE
Dove PACKAGE-NAMESPACE
è lo spazio dei nomi in cui è installato il pacchetto harbor
.
Verificare che l'app harbor
sia stata riconciliata correttamente in PACKAGE-NAMESPACE
:
kubectl get apps -A
Se lo stato non è Reconcile Succeeded
, visualizzare i dettagli completi dello stato dell'app harbor
. La visualizzazione dello stato completo può aiutare a risolvere il problema.
kubectl get app harbor --namespace PACKAGE-NAMESPACE -o yaml
Dove PACKAGE-NAMESPACE
è lo spazio dei nomi in cui è stato installato il pacchetto. Se la risoluzione dei problemi non consente di risolvere il problema, è necessario disinstallare il pacchetto prima di installarlo di nuovo:
tanzu package installed delete harbor --namespace PACKAGE-NAMESPACE
Verificare che i servizi Harbor siano in esecuzione elencando tutti i pod nel cluster:
kubectl get pods -A
Nello spazio dei nomi tanzu-system-registry
, i servizi harbor
core
, database
, jobservice
, notary
, portal
, redis
, registry
e trivy
dovrebbero essere in esecuzione in un pod con nomi simili ai seguenti:
NAMESPACE NAME READY STATUS RESTARTS AGE
[...]
tanzu-system-ingress contour-6b568c9b88-h5s2r 1/1 Running 0 26m
tanzu-system-ingress contour-6b568c9b88-mlg2r 1/1 Running 0 26m
tanzu-system-ingress envoy-wfqdp 2/2 Running 0 26m
tanzu-system-registry harbor-core-557b58b65c-4kzhn 1/1 Running 0 23m
tanzu-system-registry harbor-database-0 1/1 Running 0 23m
tanzu-system-registry harbor-jobservice-847b5c8756-t6kfs 1/1 Running 0 23m
tanzu-system-registry harbor-notary-server-6b74b8dd56-d7swb 1/1 Running 2 23m
tanzu-system-registry harbor-notary-signer-69d4669884-dglzm 1/1 Running 2 23m
tanzu-system-registry harbor-portal-8f677757c-t4cbj 1/1 Running 0 23m
tanzu-system-registry harbor-redis-0 1/1 Running 0 23m
tanzu-system-registry harbor-registry-85b96c7777-wsdnj 2/2 Running 0 23m
tanzu-system-registry harbor-trivy-0 1/1 Running 0 23m
[...]
Ottenere il certificato CA di Harbor dal segreto harbor-tls
nello spazio dei nomi tanzu-system-registry
:
kubectl -n tanzu-system-registry get secret harbor-tls -o=jsonpath="{.data.ca\.crt}" | base64 -d
Creare una copia dell'output.
L'interfaccia utente di Harbor è esposta tramite del servizio di bilanciamento del carico del servizio Envoy in esecuzione nello spazio dei nomi tanzu-system-ingress
nel cluster. Per consentire agli utenti di connettersi all'interfaccia utente di Harbor, è necessario mappare l'indirizzo del bilanciamento del carico del servizio Envoy al nome host del servizio Harbor, ad esempio harbor.yourdomain.com
.
Ottenere l'indirizzo del bilanciamento del carico del servizio Envoy.
kubectl get svc envoy -n tanzu-system-ingress -o jsonpath='{.status.loadBalancer.ingress[0]}'
In vSphere senza NSX Advanced Load Balancer (ALB), il servizio Envoy viene esposto tramite NodePort
anziché LoadBalancer
, pertanto l'output precedente sarà vuoto ed è possibile utilizzare invece l'indirizzo IP di qualsiasi nodo worker nel cluster. In vSphere con NSX ALB, il servizio Envoy ha un indirizzo IP del bilanciamento del carico simile a 20.54.226.44
.
Mappare l'indirizzo del bilanciamento del carico del servizio Envoy con il nome host del servizio Harbor. Per i cluster in esecuzione su vSphere, è necessario aggiungere un IP per la mappatura del nome host in /etc/hosts
oppure aggiungere i record A
corrispondenti nel server DNS. Ad esempio, se l'indirizzo IP è 10.93.9.100
, aggiungere quanto segue a /etc/hosts
:
10.93.9.100 harbor.yourdomain.com notary.harbor.yourdomain.com
Sulle macchine Windows, l'equivalente di /etc/hosts/
è C:\Windows\System32\Drivers\etc\hosts
.
Gli utenti possono ora connettersi all'interfaccia utente di Harbor andando in https://harbor.yourdomain.com
in un browser Web e accedendo come utente admin
con la harborAdminPassword
configurata in harbor-data-values.yaml
.
Ora che Harbor è configurato, è possibile eseguire il push di immagini per renderle disponibili per il pull del cluster.
Se Harbor utilizza un certificato autofirmato, scaricare il certificato CA di Harbor da https://harbor.yourdomain.com/api/v2.0/systeminfo/getcert
e installarlo sulla macchina locale, in questo modo Docker può fidarsi di tale certificato.
/etc/docker/certs.d/harbor.yourdomain.com/ca.crt
.Accedere al registro Harbor con l'utente admin
. Quando richiesto, immettere la harborAdminPassword
impostata quando è stato installato il pacchetto Harbor nel cluster.
docker login harbor.yourdomain.com -u admin
Contrassegnare un'immagine esistente già estratta in locale, ad esempio nginx:1.7.9
.
docker tag nginx:1.7.9 harbor.yourdomain.com/library/nginx:1.7.9
Eseguire il push dell'immagine nel registro Harbor.
docker push harbor.yourdomain.com/library/nginx:1.7.9
Ora è possibile eseguire il pull dell'immagine dal registro Harbor su qualsiasi macchina su cui è installato il certificato CA di Harbor.
docker pull harbor.yourdomain.com/library/nginx:1.7.9
Se è necessario apportare modifiche alla configurazione del pacchetto Harbor dopo la distribuzione, seguire queste istruzioni per aggiornare il pacchetto Harbor distribuito.
Aggiornare la configurazione Harbor in harbor-data-values.yaml
. Ad esempio, è possibile aumentare la quantità di storage del registro aggiornando il valore persistence.persistentVolumeClaim.registry.size
.
Aggiornare la configurazione del pacchetto installato:
tanzu package installed update harbor \
--version INSTALLED-PACKAGE-VERSION \
--values-file harbor-data-values.yaml \
--namespace INSTALLED-PACKAGE-NAMESPACE
In cui:
INSTALLED-PACKAGE-VERSION
è la versione del pacchetto Harbor installato.INSTALLED-PACKAGE-NAMESPACE
è lo spazio dei nomi in cui è installato il pacchetto Harbor.Ad esempio:
tanzu package installed update harbor \
--version 2.6.3+vmware.1-tkg.1 \
--values-file harbor-data-values.yaml \
--namespace my-packages
Il pacchetto Harbor sarà riconciliato usando il nuovo valore o i valori aggiunti. L'applicazione delle modifiche da parte di kapp-controller
può richiedere fino a cinque minuti.
Per ulteriori informazioni sul comando tanzu package installed update
, vedere Aggiornamento di un pacchetto in Installazione e gestione di pacchetti È possibile utilizzare questo comando per aggiornare la versione e la configurazione di un pacchetto installato.
scandata-empty-dir-overlay.yaml
:
#@ load("@ytt:overlay", "overlay")
#@overlay/match by=overlay.and_op(overlay.subset({"kind": "Deployment"}), overlay.subset({"metadata": {"name": "harbor-jobservice"}}))
---
spec:
template:
spec:
volumes:
#@overlay/match by="name"
#@overlay/remove
- name: job-scandata-exports
#@overlay/append
- name: job-scandata-exports
emptyDir:
sizeLimit: 500Mi