Harbor è un registro di contenitore open source. È possibile distribuire l'estensione TKG per il registro Harbor come archivio registro privato per le immagini del contenitore che si desidera distribuire ai cluster Tanzu Kubernetes.
Dipendenze della versione dell'estensione Harbor
Componente | Versione minima |
---|---|
vCenter Server | 7.0.2.00400 |
Spazio dei nomi vSphere | 0.0.10-18245956 |
Cluster supervisore | v1.20.2+vmware.1-vsc0.0.10-18245956 |
Release di Tanzu Kubernetes | v1.20.7+vmware.1-tkg.1.7fb9067 |
Prerequisiti per l'estensione Harbor
- Eseguire il provisioning di un cluster. Vedere Workflow per il provisioning di cluster di Tanzu Kubernetes.
- Connettersi al cluster. Vedere Connessione a un cluster Tanzu Kubernetes come utente vCenter Single Sign-On.
- Download del bundle delle estensioni TKG v1.3.1 nell'host client in cui vengono eseguiti i comandi kubectl.
- Installare i prerequisiti delle estensioni TKG nel cluster di destinazione.
Requisiti aggiuntivi dell'estensione Harbor
- L'estensione Harbor richiede una classe di storage PVC predefinita. Vedere Rivedere i requisiti di storage permanente per le estensioni TKG.
- L'estensione Harbor richiede l'ingresso HTTP/S. In particolare, i servizi Harbor sono esposti tramite un servizio Envoy nell'estensione Contour. Come prerequisito, distribuire l'estensione Contour. Vedere Distribuzione e gestione dell'estensione TKG per Contour Ingress.
- Se si utilizza la rete NSX-T per il Cluster supervisore, creare un servizio Envoy di tipo LoadBalancer.
- Se si utilizza la rete vDS vSphere per il l'Cluster supervisore, creare un servizio Envoy di tipo LoadBalancer o di tipo NodePort, in base all'ambiente e ai requisiti.
- L'estensione Harbor richiede DNS. Dopo l'installazione dell'estensione Harbor è necessario configurare il 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, Azure DNS o Google CloudDNS. Una volta impostato il DNS, per registrare automaticamente FQDN Harbor con un server DNS, installare l'estensione DNS esterno. Vedere Distribuzione e gestione dell'estensione TKG per l'esplorazione dei servizi DNS esterni.
Distribuzione dell'estensione Harbor
Container | Tipo di risorsa | Repliche | Descrizione |
---|---|---|---|
harbor-core |
Distribuzione | 1 | Server di gestione e configurazione per Envoy. |
harbor-database |
Pod | 1 | Database Postgres |
harbor-jobservice |
Distribuzione | 1 | Servizio di lavoro Harbor |
harbor-notary-server |
Distribuzione | 1 | Servizio Harbor Notary |
harbor-notary-signer |
Distribuzione | 1 | Harbor Notary |
harbor-portal |
Distribuzione | 1 | Interfaccia web di Harbor |
harbor-redis |
Pod | 1 | Istanza di Harbor Redis |
harbor-registry |
Distribuzione | 2 | Istanza del registro del contenitore Harbor |
harbor-trivy |
Pod | 1 | Scanner vulnerabilità delle immagini Harbor |
- Verificare che tutti i prerequisiti dell'estensione siano soddisfatti. Vedere Prerequisiti per l'estensione Harbor e Requisiti aggiuntivi dell'estensione Harbor.
- Passare alla directory con l'estensione Harbor.
cd /tkg-extensions-v1.3.1+vmware.1/extensions/registry/harbor
- Creare lo spazio dei nomi
tanzu-system-registry
e l'account e ruoli del servizio Harbor.kubectl apply -f namespace-role.yaml
- Creare un file dei valori dei dati di Harbor.
cp harbor-data-values.yaml.example harbor-data-values.yaml
- Specificare le password e i segreti obbligatori in
harbor-data-values.yaml
.Il registro Harbor richiede diverse password e segreti elencati e descritti nella tabella.Password o segreto Descrizione harborAdminPassword
La password iniziale per l'amministratore di Harbor. secretKey
Chiave segreta utilizzata per la crittografia. Deve essere una stringa di 16 caratteri. database.password
Password iniziale per il database Postgres. core.secret
Il segreto viene utilizzato quando il server core comunica con altri componenti. core.xsrfKey
Chiave XSRF. Deve essere una stringa di 32 caratteri. jobservice.secret
Il segreto viene utilizzato quando il servizio dei processi comunica con altri componenti. registry.secret
Il segreto viene utilizzato per proteggere lo stato di caricamento dal back-end del client e dello storage del registro. harbor-data-values.yaml
, eseguire il comando seguente:bash generate-passwords.sh harbor-data-values.yaml
Al completamento, dovrebbe essere visualizzato il messaggio seguente:Successfully generated random passwords and secrets in harbor-data-values.yaml
Aprire il file
harbor-data-values.yaml
e verificare le password e i segreti obbligatori. - Specificare altri valori di configurazione di Harbor in
harbor-data-values.yaml
, se necessario. I valori comunemente aggiornati possono includere quanto segue:Campo di configurazione Descrizione hostname
Il nome host Harbor predefinito è
core.harbor.domain
.Se necessario, modificare questo valore in modo che soddisfi i propri requisiti.
port.https
Il valore predefinito è
443
.Se si utilizza la rete NSX-T per il Cluster supervisore, e quindi un servizio di ingresso Envoy di tipo LoadBalancer, lasciare questa impostazione come
443
predefinito.Se si utilizza la rete vDS per il Cluster supervisore, e quindi un servizio di ingresso Envoy di tipo NodePort, impostare questo valore su quello corrispondente alla porta del nodo Envoy.
clair.enabled
Lo scanner dell'immagine Clair è stato sostituito da Trivy. Entrambi sono abilitati nel file di configurazione.
Disabilitare Clair impostandone il valore su
false
.persistence.persistentVolumeClaim. <component>.accessMode
Esistono diverse istanze di questa impostazione.
Il valore predefinito è
ReadWriteOnce
.ReadWriteMany
in programma sarà supportato in una prossima versione.imageChartStorage.type
Il valore predefinito è
filesystem
.Modificare se necessario e configurare lo storage in uso.
proxy
Se desiderato, configurare un proxy per Harbor. Se è configurato un proxy, i valori noProxy
predefiniti sono obbligatori. - Creare un segreto con i valori dei dati.
kubectl create secret generic harbor-data-values --from-file=values.yaml=harbor-data-values.yaml -n tanzu-system-registry
secret/harbor-data-values
viene creato nello spazio dei nomitanzu-system-registry
. Verificarlo eseguendo il comando seguente:kubectl get secrets -n tanzu-system-registry
- Distribuire l'estensione Harbor.
kubectl apply -f harbor-extension.yaml
Al completamento, viene visualizzato il messaggio
app.kappctrl.k14s.io/harbor created
. - Controllare lo stato dell'applicazione Harbor.
kubectl get app harbor -n tanzu-system-registry
Al completamento, lo stato passa daReconciling
aReconcile succeeded
.NAME DESCRIPTION SINCE-DEPLOY AGE harbor Reconciling 96s 98s
NAME DESCRIPTION SINCE-DEPLOY AGE harbor Reconcile succeeded 39s 2m29s
Se lo stato èReconcile failed
, vedere Risoluzione dei problemi relativi alla distribuzione del registro Harbor. - Visualizzare informazioni dettagliate sull'estensione Harbor.
kubectl get app harbor -n tanzu-system-registry -o yaml
- Visualizzare lo stato degli oggetti di distribuzione Harbor.
kubectl get deployments -n tanzu-system-registry
Al completamento, dovrebbero essere presenti le seguenti distribuzioni:
NAME READY UP-TO-DATE AVAILABLE AGE harbor-core 1/1 1 1 5m16s harbor-jobservice 1/1 1 1 5m16s harbor-notary-server 1/1 1 1 5m16s harbor-notary-signer 1/1 1 1 5m16s harbor-portal 1/1 1 1 5m16s harbor-registry 1/1 1 1 5m16s
- Visualizzare lo stato dei pod Harbor:
kubectl get pods -n tanzu-system-registry
NAME READY STATUS RESTARTS AGE harbor-core-9cbf4b79d-gxvgx 1/1 Running 0 7m11s harbor-database-0 1/1 Running 0 7m11s harbor-jobservice-6b656ccb95-lm47d 1/1 Running 0 7m11s harbor-notary-server-8494c684db-gm7jf 1/1 Running 0 7m11s harbor-notary-signer-6f96b549d4-dzcnm 1/1 Running 0 7m11s harbor-portal-5b8f4ddbd-qdnp2 1/1 Running 0 7m11s harbor-redis-0 1/1 Running 0 7m11s harbor-registry-688894c58d-72txm 2/2 Running 0 7m11s harbor-trivy-0 1/1 Running 0 7m11s
- Risolvere i problemi relativi all'installazione di Harbor, se necessario. Vedere Risoluzione dei problemi relativi alla distribuzione del registro Harbor.
Configurazione di DNS per Harbor utilizzando un servizio Envoy di tipo LoadBalancer (NSX-T Networking)
- Ottenere l'indirizzo
External-IP
per il servizio Envoy di tipo LoadBalancer.kubectl get service envoy -n tanzu-system-ingress
Dovrebbe essere visualizzato l'indirizzoExternal-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'indirizzoExternal-IP
utilizzando il comando seguente.kubectl get svc envoy -n tanzu-system-ingress -o jsonpath='{.status.loadBalancer.ingress[0]}'
- Per verificare l'installazione dell'estensione Harbor, aggiornare il file
/etc/hosts
locale con i FQDN Harbor e Notary mappati all'indirizzoExternal-IP
del bilanciamento del carico, ad esempio:127.0.0.1 localhost 127.0.1.1 ubuntu # TKGS Harbor with Envoy Load Balancer IP 10.195.141.17 core.harbor.domain 10.195.141.17 core.notary.harbor.domain
- Per verificare l'installazione dell'estensione Harbor, accedere a Harbor. Vedere Accedere all'interfaccia Web di Harbor.
- 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. - Installare l'estensione DNS esterno. Vedere Distribuzione e gestione dell'estensione TKG per l'esplorazione dei servizi DNS esterni.
Configurazione del DNS per Harbor utilizzando un servizio Envoy di tipo NodePort (rete vDS)
port.https
corretto nel file
harbor-data-values.yaml
.
- Passare al contesto dello Spazio dei nomi vSphere in cui viene eseguito il provisioning del cluster.
kubectl config use-context VSPHERE-NAMESPACE
- Elencare i nodi nel cluster.
kubectl get virtualmachines
Dovrebbero essere presenti i nodi del cluster, ad esempio:NAME POWERSTATE AGE tkgs-cluster-X-control-plane-6dgln poweredOn 6h7m tkgs-cluster-X-control-plane-j6hq6 poweredOn 6h10m tkgs-cluster-X-control-plane-xc25f poweredOn 6h14m tkgs-cluster-X-workers-9twdr-59bc54dc97-kt4cm poweredOn 6h12m tkgs-cluster-X-workers-9twdr-59bc54dc97-pjptr poweredOn 6h12m tkgs-cluster-X-workers-9twdr-59bc54dc97-t45mn poweredOn 6h12m
- Scegliere uno dei nodi di lavoro e descriverlo utilizzando il comando seguente.
kubectl describe virtualmachines tkgs-cluster-X-workers-9twdr-59bc54dc97-kt4cm
- Individuare l'indirizzo IP della macchina virtuale, ad esempio
Vm Ip: 10.115.22.43
. - 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 # TKGS Harbor with Envoy NodePort 10.115.22.43 core.harbor.domain 10.115.22.43 core.notary.harbor.domain
- Per verificare l'installazione dell'estensione Harbor, accedere a Harbor. Vedere Accedere all'interfaccia Web di Harbor.
- Creare due record CNAME su un server DNS che mappano l'indirizzo IP del nodo di lavoro ai FQDN Harbor e Notary.
- Installare l'estensione DNS esterno. Vedere Distribuzione e gestione dell'estensione TKG per l'esplorazione dei servizi DNS esterni.
Accedere all'interfaccia Web di Harbor
- Accedere all'interfaccia web del registro Harbor a https://core.harbor.domain o al nome host usato.
- Acceda a Harbor con il nome utente admin e la password generata che è stata inserita nel file del
harbor-data-values.yaml
. - Assicurarsi di poter accedere all'interfaccia utente di Harbor.
- Ottenere il certificato CA di Harbor.
Nell'interfaccia di Harbor, selezionare Nuovo progetto.
oppure creare unFare clic su Certificato di registro e scaricare il certificato CA di Harbor (ca.crt).
- 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 Configurazione di un client Docker con il certificato Registro Harbor incorporato.
- Fai riferimento alla documentazione di Harbor per i dettagli su come utilizzare Harbor.
Risoluzione dei problemi relativi alla distribuzione del registro Harbor
Se la distribuzione o la riconciliazione non riesce, eseguire kubectl get pods -n tanzu-system-registry
per visualizzare lo stato del pod. I pod di harbor
devono essere Running
. Se lo stato di un pod è ImagePullBackOff
o ImageCrashLoopBackOff
, non è possibile estrarre l'immagine del container. Controllare l'URL del registro nei valori dei dati e nei file YAML dell'estensione e assicurarsi che sia corretto.
name-XXXX
è il nome univoco del pod quando si esegue
kubectl get pods -A
:
kubectl logs pod/harbor-XXXXX -c harbor -n tanzu-system-registry
Aggiornare l'estensione Harbor
Aggiornare l'estensione Contour che viene distribuita in un cluster di Tanzu Kubernetes.
- Recupera i valori dei dati di Harbor dal segreto.
kubectl get secret harbor-data-values -n tanzu-system-registry -o 'go-template={{ index .data "values.yaml" }}' | base64 -d > harbor-data-values.yaml
- Aggiornare i valori dei dati di Harbor in
harbor-data-values.yaml
. - Aggiornare il segreto dei valori dei dati di Harbor.
kubectl create secret generic harbor-data-values --from-file=values.yaml=harbor-data-values.yaml -n tanzu-system-registry -o yaml --dry-run | kubectl replace -f-
L'estensione di Harbor sarà riconciliata con i nuovi valori dei dati.Nota: Per impostazione predefinita, kapp-controller sincronizzerà le app ogni 5 minuti. L'aggiornamento dovrebbe essere applicato in 5 minuti al massimo. Se si desidera che l'aggiornamento venga applicato immediatamente, impostaresyncPeriod
inharbor-extension.yaml
su un valore inferiore e applicare l'estensione Contour mediantekubectl apply -f harbor-extension.yaml
. - Controllare lo stato dell'estensione.
kubectl get app harbor -n tanzu-system-registry
Lo stato dell'app Contour dovrebbe cambiare in
Reconcile Succeeded
dopo l'aggiornamento di Contour. - Visualizzare lo stato dettagliato e risolvere i problemi.
kubectl get app harbor -n tanzu-system-registry -o yaml
Eliminazione dell'estensione Harbor
Eliminare l'estensione Harbor da un cluster Tanzu Kubernetes.
- Passare alla directory in cui sono stati scaricati i file di estensione Harbor.
cd /extensions/registry/harbor/
- Eliminare l'app Harbor.
kubectl delete app harbor -n tanzu-system-registry
Risultato previsto:app.kappctrl.k14s.io "harbor" deleted
- Verificare che l'app Harbor sia eliminata.
kubectl get app Harbor -n tanzu-system-registry
Risultato previsto: l'app èNot Found
.apps.kappctrl.k14s.io "harbor" not found
- Eliminare lo spazio dei nomi del registro.
Solo dopo aver confermato che l'estensione e l'app di Harbor sono state completamente eliminate è possibile eliminare lo spazio dei nomi e gli oggetti ruolo.
kubectl delete -f namespace-role.yaml
Risultato previsto: lo spazio dei nomi in cui viene distribuito Harbor e i relativi oggetti di controllo degli accessi in base al ruolo vengono eliminati.namespace "tanzu-system-registry" deleted serviceaccount "harbor-extension-sa" deleted role.rbac.authorization.k8s.io "harbor-extension-role" deleted rolebinding.rbac.authorization.k8s.io "harbor-extension-rolebinding" deleted clusterrole.rbac.authorization.k8s.io "harbor-extension-cluster-role" deleted clusterrolebinding.rbac.authorization.k8s.io "harbor-extension-cluster-rolebinding" deleted
Upgrade dell'estensione Harbor
- Accedere alla mappa di configurazione di Harbor.
kubectl get configmap harbor -n tanzu-system-harbor -o 'go-template={{ index .data "harbor.yaml" }}' > harbor-configmap.yaml
- Eliminare la distribuzione di Harbor esistente. Vedere Eliminazione dell'estensione Harbor.
- Distribuire l'estensione Harbor. Vedere Distribuzione dell'estensione Harbor.