È possibile utilizzare un registro di container esterno con pod di cluster di Tanzu Kubernetes. Questa è un'alternativa all'utilizzo del Registro Harbor incorporato.
Caso d'uso del registro privato esterno
I registri di container forniscono una funzione essenziale per le distribuzioni Kubernetes, che funge da repository centralizzato per lo storage e la condivisione delle immagini dei container. Il registro di container pubblico più comunemente utilizzato è DockerHub. Esistono molti registri di container privati. VMware Harbor è un registro di container privato open source nativo del cloud. vSphere with Tanzu integra un'istanza di Harbor che può essere utilizzata come registro di container privato per Pod vSphere e per i pod in esecuzione in cluster di Tanzu Kubernetes. Per ulteriori informazioni, vedere Abilitazione del Registro Harbor incorporato nel Cluster supervisore.
Il Registro Harbor incorporato fornito con vSphere with Tanzu richiede la rete NSX-T. Se è in uso la rete di vSphere, non è possibile utilizzarla. È inoltre possibile che sia già in esecuzione il registro di container privato che si desidera integrare con i cluster di Tanzu Kubernetes. In questo caso, è possibile configurare Servizio Tanzu Kubernetes Grid in modo che consideri attendibili i registri privati con certificati autofirmati, consentendo così ai pod Kubernetes in esecuzione nei cluster di Tanzu Kubernetes di utilizzare il registro esterno.
Requisiti del registro privato esterno
Per utilizzare un registro privato esterno con cluster di Tanzu Kubernetes, è necessario usare vSphere with Tanzu versione 7 U2 o successiva.
È possibile utilizzare il proprio registro privato solo con pod Kubernetes eseguiti in cluster di Tanzu Kubernetes e nelle macchine virtuali dei nodi di Release di Tanzu Kubernetes. Non è possibile utilizzare il proprio registro privato con Pod vSphere eseguiti in modo nativo in host ESXi. Il registro supportato per i Pod vSphere è il Registro Harbor incorporato nella piattaforma vSphere with Tanzu.
Una volta configurato Servizio Tanzu Kubernetes Grid per un registro privato, tutti i nuovi cluster sottoposti a provisioning supporteranno il registro privato. Affinché i cluster esistenti supportino il registro privato, è necessario un aggiornamento in sequenza per applicare TkgServiceConfiguration
. Vedere Aggiornamento dei cluster di Tanzu Kubernetes. Inoltre, la prima volta che si crea un TkgServiceConfiguration
personalizzato, il sistema avvierà un aggiornamento in sequenza.
Configurazione del registro privato esterno
Per utilizzare il proprio registro privato con cluster di Tanzu Kubernetes, configurare il Servizio Tanzu Kubernetes Grid con uno o più certificati autofirmati per il contenuto del registro privato su HTTPS.
TkgServiceConfiguration
viene aggiornata per supportare i certificati autofirmati per il registro privato. In particolare, viene aggiunta una nuova sezione trust
con il campo additionalTrustedCAs
, che consente di definire un numero qualsiasi di certificati autofirmati che i cluster di Tanzu Kubernetes devono considerare attendibili. Questa funzionalità consente di definire facilmente un elenco di certificati e di aggiornarli nel caso debbano essere ruotati.
Una volta aggiornata e applicata TkgServiceConfiguration
, i certificati TLS verranno applicati ai nuovi cluster creati da quel momento in poi. In altre parole, l'applicazione di un aggiornamento a TkgServiceConfiguration.trust.additionalTrustedCAs
non attiva un aggiornamento in sequenza automatico dei cluster di Tanzu Kubernetes.
apiVersion: run.tanzu.vmware.com/v1alpha1 kind: TkgServiceConfiguration metadata: name: tkg-service-configuration spec: defaultCNI: antrea trust: additionalTrustedCAs: - name: first-cert-name data: base64-encoded string of a PEM encoded public cert 1 - name: second-cert-name data: base64-encoded string of a PEM encoded public cert 2
kubectl apply -f tkgserviceconfiguration.yaml
Poiché la specifica di Servizio Tanzu Kubernetes Grid viene aggiornata con i certificati del registro privato, non è necessario aggiungere la chiave pubblica al kubeconfig del cluster di Tanzu Kubernetes come quando si utilizza Registro Harbor incorporato con i cluster di Tanzu Kubernetes.
Configurazione di un carico di lavoro di Tanzu Kubernetes per il pull di immagini da un registro ddi container privato
Per eseguire il pull di immagini da un registro di container privato per un carico di lavoro del cluster di Tanzu Kubernetes, configurare il file YAML del carico di lavoro con i dettagli del registro privato.
- Creare una specifica di pod di esempio con i dettagli relativi al registro privato.
apiVersion: v1 kind: Pod metadata: name: <workload-name> namespace: <kubernetes-namespace> spec: containers: - name: private-reg-container image: <Registry-IP-Address>/<vsphere-namespace>/<image-name>:<version> imagePullSecrets: - name: <registry-secret-name>
- Sostituire
<workload-name>
con il nome del carico di lavoro del pod. - Sostituire
<kubernetes-namespace>
con lo spazio dei nomi di Kubernetes nel cluster in cui verrà creato il pod. Deve essere lo stesso spazio dei nomi di Kubernetes in cui il segreto di pull delle immagini del servizio di registro è archiviato nel cluster di Tanzu Kubernetes (ad esempio lo spazio dei nomi predefinito). - Sostituire
<Registry-IP-Address>
con l'indirizzo IP dell'istanza di Registro Harbor incorporata in esecuzione nel Cluster supervisore. - Sostituire <vsphere-namespace> con lo Spazio dei nomi vSphere in cui viene eseguito il provisioning del Tanzu Kubernetes di destinazione.
- Sostituire
<image-name>
con il nome dell'immagine desiderata. - Sostituire
<version>
con una versione appropriata dell'immagine, ad esempio "la più recente". - Sostituire
<registry-secret-name>
con il nome del segreto del pull delle immagini del servizio di registro creato in precedenza.
- Sostituire
- Creare un carico di lavoro nel cluster di Tanzu Kubernetes in base alla specifica del pod definita.
kubectl --kubeconfig=<path>/cluster-kubeconfig apply -f <pod.yaml>
Il pod deve essere creato dall'immagine di cui è stato eseguito il pull dal registro.
Campi di attendibilità per i registri privati esterni
Aggiungere una voce del certificato (stringa con codifica base64 di un certificato pubblico con codifica PEM) nella sezione additionalTrustedCAs
di TkgServiceConfiguration
. I dati sono certificati pubblici archiviati in testo normale in TkgServiceConfiguration.
Campo | Descrizione |
---|---|
trust |
Marcatore di sezione. Non accetta alcun dato. |
additionalTrustedCAs |
Marcatore di sezione. Include un array di certificati con nome e dati per ciascuno. |
name |
Nome del certificato TLS. |
data |
Stringa codificata in base64 di un certificato pubblico con codifica PEM. |
Rimozione dei certificati del registro privato esterno
Rimuovere un certificato dall'elenco di certificati nella sezione additionalTrustedCAs
di TkgServiceConfiguration
e applicare TkgServiceConfiguration
al Servizio Tanzu Kubernetes Grid.
Rotazione dei certificati del registro privato esterno
Per ruotare un certificato, l'amministratore di VI o il tecnico di DevOps deve modificare il contenuto del certificato in TkgServiceConfiguration
o nella specifica del cluster di Tanzu Kubernetes e applicare tale configurazione per attivare un aggiornamento in sequenza di tale TKC.
Risoluzione dei problemi relativi ai certificati del registro privato esterno
Se si configura Servizio Tanzu Kubernetes Grid con i certificati da considerare attendibili e si aggiunge il certificato autofirmato al kubeconfig del cluster, è possibile eseguire correttamente il pull di un'immagine di container da un registro privato che utilizza tale certificato autofirmato.
Il comando seguente consente di stabilire se il pull dell'immagine del container è stato effettuato correttamente per un carico di lavoro del pod:
kubectl describe pod PODNAME
Questo comando mostra in dettaglio lo stato e i messaggi di errore di un determinato pod. Esempio di tentativo di effettuare il pull di un'immagine prima di aggiungere certificati personalizzati al cluster:
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 33s default-scheduler ... Normal Image 32s image-controller ... Normal Image 15s image-controller ... Normal SuccessfulRealizeNSXResource 7s (x4 over 31s) nsx-container-ncp ... Normal Pulling 7s kubelet Waiting test-gc-e2e-demo-ns/testimage-8862e32f68d66f727d1baf13f7eddef5a5e64bbd-v10612 Warning Failed 4s kubelet failed to get images: ... Error: ... x509: certificate signed by unknown authority
kubectl get pods
ErrImagePull
è visibile anche nella vista dello stato generale del pod:
NAME READY STATUS RESTARTS AGE testimage-nginx-deployment-89d4fcff8-2d9pz 0/1 Pending 0 17s testimage-nginx-deployment-89d4fcff8-7kp9d 0/1 ErrImagePull 0 79s testimage-nginx-deployment-89d4fcff8-7mpkj 0/1 Pending 0 21s testimage-nginx-deployment-89d4fcff8-fszth 0/1 ErrImagePull 0 50s testimage-nginx-deployment-89d4fcff8-sjnjw 0/1 ErrImagePull 0 48s testimage-nginx-deployment-89d4fcff8-xr5kg 0/1 ErrImagePull 0 79sGli errori "x509: certificato firmato da autorità sconosciuta" e "ErrImagePull" indicano che il cluster non è configurato con il certificato corretto per la connessione al registro di container privato. Il certificato manca oppure non è configurato correttamente.
Se si verificano errori durante la connessione a un registro privato dopo la configurazione dei certificati, è possibile verificare se i certificati applicati nella configurazione sono applicati al cluster. È possibile verificare se i certificati sono stati applicati correttamente nella loro configurazione utilizzando SSH.
- Controllare nella cartella
/etc/ssl/certs/
la presenza di file denominatitkg-<cert_name>.pem
, dove<cert_name>
è la proprietà "name" del certificato aggiunto inTkgServiceConfiguration
. Se i certificati corrispondono a ciò che si trova inTkgServiceConfiguration
e l'utilizzo di un registro privato continua a non funzionare, procedere ulteriormente con la diagnosi eseguendo il passaggio successivo. - Eseguire il test della connessione openssl seguente nel server di destinazione utilizzando certificati autofirmati eseguendo il comando
openssl s_client -connect hostname:port_num
, dove hostname è il nome host o il nome DNS del registro privato che utilizza certificati autofirmati e port_num è il numero della porta in cui è in esecuzione il servizio (in genere 443 per HTTPS). È possibile controllare esattamente l'errore restituito da openssl quando si tenta di connettersi all'endpoint che utilizza certificati autofirmati e risolvere la situazione da tale posizione, ad esempio aggiungendo i certificati corretti aTkgServiceConfiguration
. Se il cluster di Tanzu Kubernetes è incorporato con un certificato errato, sarà necessario aggiornare la configurazione di Servizio Tanzu Kubernetes Grid con i certificati corretti, eliminare il cluster di Tanzu Kubernetes e quindi ricrearlo utilizzando la configurazione che contiene i certificati corretti.