Configurazione di un Container Registry privato

Questa pagina spiega come configurare un server registry dei container esistente per Google Distributed Cloud (solo software) per VMware.

Questa pagina è rivolta ad amministratori, architetti e operatori che configurano, monitorano e gestiscono l'infrastruttura tecnologica. Per scoprire di più sui ruoli comuni e sugli esempi di attività a cui facciamo riferimento nei contenuti di Google Cloud , consulta Ruoli e attività comuni degli utenti GKE.

Panoramica

Per impostazione predefinita, durante la creazione o l'upgrade del cluster, Google Distributed Cloud esegue il pull delle immagini di sistema da gcr.io/gke-on-prem-release utilizzando il service account di accesso ai componenti. Se vuoi, puoi fornire il tuo server del registry dei container in modo che le immagini di sistema vengano estratte dal tuo server del registry privato.

Google Distributed Cloud non supporta i registry dei container non protetti. Quando avvii il server del registry dei container, devi fornire un certificato e una chiave. Il certificato può essere firmato da un'autorità di certificazione (CA) pubblica o può essere autofirmato.

Crea un server Container Registry

Per scoprire come creare un server Container Registry, consulta Esegui un registry accessibile esternamente nella documentazione di Docker.

Configura il registry

Per utilizzare un container registry privato, puoi utilizzare lo strumento a riga di comando gkectl o Terraform.

gkectl

  1. Aggiungi la sezione privateRegistry al file di configurazione del cluster di amministrazione prima di creare il cluster.

    Quando questa sezione è compilata:

    • Quando esegui il comando gkectl prepare prima della creazione o dell'upgrade del cluster, il comando estrae le immagini dal file tar specificato nel campo bundlePath nel file di configurazione del cluster di amministrazione ed esegue il push delle immagini al server del registry privato.

    • Durante la creazione o l'upgrade del cluster, viene eseguito il pull delle immagini di sistema dal server del registry privato.

  2. Se la tua rete si trova dietro un server proxy, compila la sezione proxy.

Terraform

  1. Segui i passaggi nella scheda Terraform in Crea un cluster di amministrazione per compilare il file di configurazione del cluster di amministrazione.

  1. Aggiungi quanto segue al file di configurazione del cluster di amministrazione:

    private_registry_config {
      address = "ADDRESS"
      ca_cert = "CA_CERT"
    }
    

    Sostituisci quanto segue:

    • ADDRESS: l'indirizzo IP o il nome di dominio completo (FQDN) della macchina che esegue il registro privato.

    • CA_CERT: i dati del certificato CA della chiave pubblica, ma con tutte le nuove righe sostituite dalla stringa \n.

    1. Esegui questo comando per sostituire i ritorni a capo con \n:

      awk 'ORS="\\n" {print}' PUBLIC_KEY_PATH
      

      Sostituisci PUBLIC_KEY_PATH con il percorso della chiave pubblica.

    2. Copia l'output del comando precedente e incollalo nella variabile segnaposto CA_CERT.

  2. Se la tua rete è protetta da un server proxy, aggiungi quanto segue:

    proxy {
      url: "PROXY_SERVER_ADDRESS"
      no_proxy: "BYPASS_LIST"
    }
    

    Sostituisci quanto segue:

    • PROXY_SERVER_ADDRESS: l'indirizzo HTTP del tuo server proxy. Includi il numero di porta anche se è lo stesso della porta predefinita dello schema.

    • BYPASS_LIST: un elenco separato da virgole di indirizzi IP, intervalli di indirizzi IP, nomi host e nomi di dominio che non devono passare attraverso il server proxy.

    Esempio:

    url: "http://my-proxy.example.local:80"
    no_proxy: "192.0.2.0/24,my-host.example.local,198.51.100.0"
    

    Quando Google Distributed Cloud invia una richiesta a uno di questi indirizzi, host o domini, la richiesta bypassa il server proxy e viene inviata direttamente alla destinazione.

  1. Continua con i passaggi nella scheda Terraform in Crea un cluster di amministrazione per verificare il file di configurazione e il piano Terraform, quindi crea il cluster di bootstrap.

  2. Quando esegui il comando gkectl register bootstrap, gkectl ti chiede di inserire il nome utente e poi la password per il registry privato.

Durante la creazione del cluster, le immagini di sistema vengono estratte dal server del registry privato.

Limitazioni con i cluster avanzati e il bundle completo

Sono disponibili due bundle Google Distributed Cloud: completo e standard. Per determinare quale bundle si trova sulla tua workstation di amministrazione, controlla il campo bundlePath nel file di configurazione del cluster di amministrazione. Se il nome file termina con -full, il bundle completo si trova sulla tua workstation di amministrazione. Se il nome file non termina con -full, il bundle normale si trova sulla tua workstation di amministrazione.

Se hai creato la workstation di amministrazione utilizzando il comando gkeadm, il comando crea la VM della workstation di amministrazione con il bundle completo e configura il campo bundlePath nel file di configurazione del cluster di amministrazione.

Se il cluster avanzato è abilitato, esistono limitazioni all'utilizzo del bundle completo con un registry privato, come segue:

  • Versione 1.31: il bundle completo non è supportato con un registry privato. Per utilizzare un registry privato su un cluster avanzato:

    1. Scarica il bundle di dimensioni normali sulla tua workstation di amministrazione.
    2. Aggiorna il nome file nel campo bundlePath nel file di configurazione del cluster di amministrazione.
  • Versione 1.32: è supportato l'utilizzo del bundle completo, ma il comando gkectl prepare esegue il pull delle immagini da gcr.io/gke-on-prem-release anziché dal file tar. Tuttavia, il comando esegue il push delle immagini nel tuo registry privato in modo che le immagini di sistema vengano estratte dal tuo registry privato durante la creazione o l'upgrade del cluster.

Differenze tra cluster normali e cluster avanzati

Un cluster Advanced presenta diverse differenze chiave rispetto ai cluster standard:

  • Quando utilizzi un registry privato, le immagini sembrano essere estratte da gcr.io, non dal nome host del tuo registry privato. Questa modifica è prevista, anche se le immagini vengono effettivamente estratte dal server del registry privato.
  • I pull delle immagini utilizzano le credenziali del file /etc/containerd/config.toml in ogni macchina che si connette al registry privato, anziché dal secret private-registry-creds all'interno del cluster.
  • Per tutte le immagini gcr.io, il cluster tenta innanzitutto di eseguire il pull dal registry privato. Se l'immagine non si trova nel registry privato, il sistema la estrae da gcr.io tramite internet. Per interrompere questo comportamento di riserva, configura noProxy o utilizza le regole firewall per bloccare il traffico gcr.io.

Per verificare che le immagini vengano estratte dall'origine corretta, consulta Verifica che le immagini vengano estratte dal server del registry.

Verifica che il pull delle immagini venga eseguito dal server del registry

La modalità di verifica dell'estrazione delle immagini dal server del registry dipende dall'attivazione o meno del cluster avanzato.

  • Se il cluster avanzato non è abilitato, esegui questo comando:

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get pods \
        --all-namespaces -o jsonpath="{.items[*].spec['initContainers', 'containers'][*].image}"
    

    Sostituisci ADMIN_CLUSTER_KUBECONFIG con il percorso del file kubeconfig del tuo cluster di amministrazione.

    L'output di questo comando mostra tutte le immagini nel cluster. Puoi verificare che tutte le immagini Google Distributed Cloud provengano dal tuo server del registry.

  • Se il cluster avanzato è abilitato, segui questi passaggi:

    Puoi determinare se containerd sta eseguendo il pull delle immagini dal tuo registry locale esaminando i contenuti di un file denominato config.toml, come mostrato nei passaggi seguenti:

    1. Accedi a un nodo ed esamina i contenuti del file /etc/containerd/config.toml.
    2. Controlla il campo plugins."io.containerd.grpc.v1.cri".registry.mirrors del file config.toml per verificare se il server del registry è elencato nel campo endpoint.

      Di seguito è riportato un estratto di un file config.toml di esempio.

      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"]
      ...
      
    3. Se il mirror del registry viene visualizzato nel campo endpoint, il nodo sta eseguendo il pull delle immagini dal mirror del registry anziché da Artifact Registry.