Questa pagina spiega come creare cluster utilizzando immagini estratte da un mirror del registro anziché da un registro pubblico, come gcr.io
.
Un mirror del registro è una copia locale di un registro pubblico che
copia o esegue il mirroring della struttura dei file del registro pubblico. Ad esempio, supponiamo che il percorso del mirror del registro locale sia 172.18.0.20:5000
. Quando containerd
riceve una richiesta di pull di un'immagine, come gcr.io/kubernetes-e2e-test-images/nautilus:1.0
, containerd
tenta di eseguire il pull dell'immagine non da gcr.io
, ma dal tuo registro locale nel seguente percorso: 172.18.0.20:5000/kubernetes-e2e-test-images/nautilus:1.0
. Se l'immagine non si trova in questo percorso del registro locale, viene estratta automaticamente dal registro pubblico gcr.io
.
L'utilizzo di un mirror del registro offre i seguenti vantaggi:
- Ti protegge dalle interruzioni dei registri pubblici.
- Accelera la creazione dei pod.
- Ti consente di eseguire personalmente l'analisi delle vulnerabilità.
- Evita i limiti imposti dai registri pubblici sulla frequenza con cui puoi emettere comandi.
Prima di iniziare
- Devi aver configurato un server Container Registry nella tua rete.
- Se il server del registry esegue un certificato TLS privato, devi disporre del file dell'autorità di certificazione (CA).
- Se il server del registry richiede l'autenticazione, devi disporre delle credenziali di accesso corrette o del file di configurazione Docker.
- Per utilizzare un mirror del registro, devi impostare il runtime del container su containerd.
Scarica tutte le immagini richieste per Google Distributed Cloud
Scarica la versione più recente dello strumento bmctl
e del pacchetto di immagini dalla pagina Download.
Carica le immagini container sul server di registry
Carica le immagini dal pacchetto di immagini nel server del registry eseguendo:
[HTTPS_PROXY=http://PROXY_IP:PORT] ./bmctl push images \
--source=./bmpackages_VERSION.tar.xz \
--private-registry=REGISTRY_IP:PORT \
[--cacert=CERT_PATH] \
[--need-credential=false]
Sostituisci quanto segue:
PROXY_IP:PORT
con l'indirizzo IP e la porta del proxy se hai bisogno di un proxy per caricare le immagini dalla workstation al server del registry.VERSION
con la versione del pacchetto di immagini scaricato dalla pagina Download.REGISTRY_IP:PORT
con l'indirizzo IP e la porta del server di registro privato.CERT_PATH
con il percorso del file del certificato CA se il server del registry utilizza un certificato TLS privato.
Inserisci il tuo nome utente e la password quando richiesto o seleziona un file di configurazione Docker. Se il server del registry non richiede credenziali, specifica --need-credential=false
.
Per maggiori informazioni sul comando bmctl push images
, esegui:
bmctl push images --help
Utilizza il tuo spazio dei nomi
Se vuoi utilizzare il tuo spazio dei nomi nel server del registry anziché lo spazio dei nomi principale, containerd
può eseguire il pull da questo spazio dei nomi se fornisci l'endpoint API per il tuo registro privato in registryMirrors.endpoint
. In genere
l'endpoint è nel formato <REGISTRY_IP:PORT>/v2/<NAMESPACE>
. Per dettagli specifici, consulta la guida dell'utente del registro privato.
Ad esempio, se hai accesso solo a 172.18.0.20:5000/test-namespace/
, puoi utilizzare il seguente comando per caricare tutte le immagini nello spazio dei nomi test-namespace
:
./bmctl push images \
--source=./bmpackages_VERSION.tar.xz \
--private-registry=172.18.0.20:5000/test-namespace
--username=<USERNAME>
--password=<PASSWORD>
--cacert <path/to/cert.crt>
Quindi, nel file di configurazione del cluster, puoi aggiungere quanto segue per eseguire il pull di containerd
dallo spazio dei nomi:
registryMirrors:
- endpoint: https://172.18.0.20:5000/v2/test-namespace
crea i cluster dal mirror del registro
Il seguente file di configurazione del cluster di esempio specifica che le immagini devono essere estratte da un mirror del registro locale il cui endpoint è https://172.18.0.20:5000
.
Alcuni dei campi visualizzati all'inizio di questo file di configurazione sono descritti nelle sezioni seguenti.
# Sample cluster config with registry mirror:
---
gcrKeyPath: /bmctl/bmctl-workspace/.sa-keys/my-gcp-project-anthos-baremetal-gcr.json
sshPrivateKeyPath: /root/ssh-key/id_rsa
registryMirrors:
- endpoint: https://172.18.0.20:5000
caCertPath: /root/ca.crt
pullCredentialConfigPath: /root/.docker/config.json
hosts:
- somehost.io
- otherhost.io
---
apiVersion: v1
kind: Namespace
metadata:
name: cluster-admin1
---
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: admin1
namespace: cluster-admin1
spec:
nodeConfig:
containerRuntime: containerd
...
Campo hosts
containerd
controlla la sezione hosts
del file di configurazione del cluster per scoprire quali host vengono sottoposti a mirroring localmente. Nel file di configurazione di esempio, i registri pubblici elencati nella sezione hosts
sono somehost.io
e otherhost.io
. Poiché questi registri pubblici vengono visualizzati nella sezione hosts
,
containerd
controlla prima il mirroring del registro privato quando rileva richieste di pull
per immagini da somehost.io
o otherhost.io
.
Ad esempio, supponiamo che containerd
riceva un comando pull per
somehost.io/kubernetes-e2e-test-images/nautilus:1.0
. Poiché somehost.io
è elencato come uno degli host nella sezione hosts
del file di configurazione del cluster, containerd
cerca nel mirror del registro locale l'immagine kubernetes-e2e-test-images/nautilus:1.0
. Se somehost.io
non è elencato
nella sezione hosts
, containerd
non sa che esiste un mirror locale di somehost.io
. In questo caso, containerd
non controlla l'immagine speculare
e estrae semplicemente l'immagine dal registro pubblico somehost.io
.
Tieni presente che, per impostazione predefinita, Google Distributed Cloud esegue automaticamente il mirroring delle immagini da gcr.io
, quindi non è necessario elencare gcr.io
come host nella sezione hosts
.
Campo gcrKeyPath
Se vuoi che Google Distributed Cloud utilizzi automaticamente Container Registry (gcr.io
) per eseguire il pull delle immagini che non vengono visualizzate nel tuo registro locale, devi specificare il percorso alla chiave dell'account di servizio di Container Registry. Google Distributed Cloud non dispone di un meccanismo per fornire chiavi per altri registri pubblici.
Se non prevedi di utilizzare la funzionalità che prevede il pull delle immagini da gcr.io
quando non vengono visualizzate nel registro locale, non è necessario aggiungere gcrKeyPath
al file di configurazione del cluster.
Campo caCertPath
Se il registro richiede un certificato TLS (Private Transport Layer Security),
questo campo fornisce il percorso del file del certificato CA radice del server. Il file del certificato deve trovarsi sulla workstation di amministrazione, la macchina che esegue i comandi bmctl
. Se il registro non richiede un certificato TLS privato, puoi lasciare vuoto il campo caCertPath
.
Campo pullCredentialConfigPath
Se il server del registry non richiede un file di configurazione Docker di autenticazione, puoi lasciare vuoto il campo pullCredentialConfigPath
. Tieni presente che questo è il percorso del file di configurazione sulla macchina che esegue i comandi bmctl
.
Crea un cluster utente dal mirror del registro
I cluster utente non estraggono automaticamente le immagini da un mirroring del Registro di sistema, se il cluster di amministrazione è stato configurato.
Aggiorna endpoint di mirroring del registro, certificati e credenziali di pull
Per aggiornare endpoint di mirroring del registro, certificati o credenziali di pull:
Nel file di configurazione del cluster, aggiorna l'endpoint, il file del certificato CA e il percorso del file di configurazione delle credenziali di pull.
Applica le modifiche eseguendo:
bmctl update cluster -c CLUSTER_NAME --kubeconfig=ADMIN_KUBECONFIG
Sostituisci quanto segue:
- CLUSTER_NAME con il nome del cluster che vuoi aggiornare.
- ADMIN_KUBECONFIG con il percorso del file di configurazione del relativo cluster di amministrazione.
Verifica che le immagini vengano estratte dal mirror del registro
Questa sezione descrive due metodi che puoi utilizzare per verificare se containerd
sta eseguendo il pull delle immagini dal mirror del registro locale anziché da un registro pubblico.
Metodo 1: confronta le sintesi del repository
Questo metodo comporta il confronto delle sintesi del repository per determinare se un'immagine è stata estratta dal mirror del registro.
Tieni presente che un registro ha un identificatore univoco chiamato digest del repository e un'immagine ha un identificatore univoco chiamato digest dell'immagine container. Due immagini identiche hanno lo stesso digest di immagini container, anche se le immagini provengono da registri diversi. Se le immagini provengono da registri diversi, hanno dati digest diversi per il repository.
Accedi a un nodo del cluster mediante SSH.
Scegli un'immagine di cui vuoi verificare l'origine.
Esegui il pull dell'immagine dal registro pubblico che utilizzi eseguendo questo comando:
crictl pull PUBLIC_ENDPOINT
Sostituisci
PUBLIC_ENDPOINT
con il percorso dell'immagine nel registro pubblico. Ad esempio:gcr.io/anthos-baremetal-release/kube-rbac-proxy:v0.6.0-gke.0
.Esegui il pull della stessa immagine dal mirror del registro eseguendo questo comando:
crictl pull MIRROR_ENDPOINT
Sostituisci
MIRROR_ENDPOINT
con il percorso dell'immagine nel mirror del registro. Ad esempio:10.168.15.224:5007/test-namespace/anthos-baremetal-release/kube-rbac-proxy:v0.6.0-gke.0
.Esegui questo comando per visualizzare le sintesi del repository delle due immagini di cui hai eseguito il pull nei passaggi precedenti:
crictl inspecti PUBLIC_OR_MIRROR_ENDPOINT | grep -A 3 repoDigests
Sostituisci
PUBLIC_OR_MIRROR_ENDPOINT
con l'endpoint pubblico dell'immagine o con l'endpoint di mirroring del registro dell'immagine. Entrambe le opzioni sono corrette perché il comandocrictl inspecti
esamina il digest dell'immagine container dell'argomento passato. Poiché l'immagine del registro pubblico è identica all'immagine del mirror del registro, entrambi hanno lo stesso digest dell'immagine container.L'output del comando potrebbe essere simile al seguente:
"repoDigests": [ "gcr.io/anthos-baremetal-release/kube-rbac-proxy@sha256:27be66fb9140d83c4af8794a234b998c90e844e3414108ce72db603f4f6ea0b3", "10.168.15.224:5007/test-namespace/anthos-baremetal-release/kube-rbac-proxy@sha256:27be66fb9140d83c4af8794a234b998c90e844e3414108ce72db603f4f6ea0b3" ],
Confronta le sintesi del repository visualizzate in grassetto nell'output del passaggio precedente. Se i digest sono identici, i nodi nel tuo cluster vengono estratti dal mirror del registro. Altrimenti, i nodi del cluster estrazione di immagini da un registro pubblico.
Metodo 2: esamina il file config.toml
Puoi determinare se containerd
sta eseguendo il pull delle immagini dal tuo registro locale esaminando i contenuti di un file config.toml
come mostrato nei passaggi seguenti:
Accedi a un nodo ed esamina il contenuto del seguente file:
/etc/containerd/config.toml
Controlla la sezione
plugins."io.containerd.grpc.v1.cri".registry.mirrors
del fileconfig.toml
per verificare se il tuo server del registry è elencato nel campoendpoint
. Ecco un estratto di un fileconfig.toml
di esempio in cui il campoendpoint
viene visualizzato in grassetto:
version = 2
root = "/var/lib/containerd"
state = "/run/containerd"
...
[plugins."io.containerd.grpc.v1.cri".registry]
[plugins."io.containerd.grpc.v1.cri".registry.configs]
[plugins."io.containerd.grpc.v1.cri".registry.configs."gcr.io"]
[plugins."io.containerd.grpc.v1.cri".registry.configs."privateregistry2.io".tls]
ca_file = '/etc/containerd/certs.d/privateregistry2.io/ca.crt'
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."gcr.io"]
endpoint = ["http://privateregistry.io", "http://privateregistry2.io"]
...
Se il mirror del registro viene visualizzato nel campo endpoint
, significa che il nodo sta eseguendo il pull delle immagini dal mirror del registro anziché da un registro pubblico.