Configurazione di un registro di immagini

Pianifica e configura un registro di immagini in modo che gli sviluppatori possano creare contenitori di applicazioni in IBM Cloud® Kubernetes Service utilizzando le immagini Docker.

Pianificazione dei registri di immagini

Le immagini normalmente vengono archiviate in un registro ed è possibile accedervi pubblicamente (registro pubblico) o configurarle con un accesso limitato a un piccolo gruppo di utenti (registro privato).

I registri pubblici, come Docker Hub possono essere utilizzati per iniziare a utilizzare Docker e Kubernetes per creare la tua prima applicazione inserita in un contenitore in un cluster. Nel caso però di applicazioni aziendali, utilizza un registro privato, come quello fornito in IBM Cloud Container Registry, per proteggere le tue immagini dall'essere utilizzate e modificate da utenti non autorizzati. I registri privati devono essere configurati dall'amministratore del cluster per assicurare che le credenziali di accesso al registro privato siano disponibili agli utenti del cluster.

Puoi utilizzare più registri con IBM Cloud Kubernetes Service per distribuire le applicazioni al tuo cluster.

Opzioni del registro delle immagini privato e pubblico
Registro Descrizione Vantaggio
IBM Cloud Container Registry Con questa opzione, puoi configurare il tuo proprio repository delle immagini Docker protetto in IBM Cloud Container Registry
dove puoi archiviare e condividere le immagini in sicurezza tra gli utenti del cluster.
  • Gestisci l'accesso alle immagini nel tuo account.
  • Utilizza IBM immagini e applicazioni di esempio fornite, come IBM Liberty, come un'immagine parent e aggiungi il tuo proprio codice applicazione.
  • Scansione automatica delle immagini per potenziali vulnerabilità da parte di Vulnerability Advisor, inclusi i consigli specifici del sistema operativo per correggerle.
Ogni altro registro privato Collega qualsiasi registro privato esistente al tuo cluster creando un segreto per il download delle immagini. Il segreto viene utilizzato
per salvare in modo sicuro le tue credenziali e il tuo URL del registro in un segreto Kubernetes. Utilizza i registri privati esistenti indipendentemente dalle loro origini (Docker Hub, registri di proprietà dell'organizzazione
o altri registri cloud privati).
Hub pubblico Docker Utilizza questa opzione per impiegare immagini pubbliche esistenti provenienti da Docker Hub direttamente nella tua distribuzione Kubernetes, qualora non siano necessarie modifiche al Dockerfile. Nota: tieni presente che questa opzione non rispetta i requisiti di sicurezza della tua organizzazione,
come la gestione dell'accesso, la scansione di vulnerabilità o la privacy dell'applicazione.

Non è necessaria alcuna configurazione aggiuntiva per il tuo cluster.

  • Include una varietà di applicazioni open source.

Dopo che hai configurato un registro immagini, gli utenti del cluster possono utilizzare le immagini per distribuire le applicazioni nel cluster.

Ulteriori informazioni sulla protezione delle tue informazioni personali quando utilizzi le immagini del contenitore.

Descrizione di come autorizzare il tuo cluster ad eseguire il pull delle immagini da un registro provato

Per eseguire il pull di immagini da un registro, il tuo cluster IBM Cloud Kubernetes Service utilizza un tipo speciale di segreto Kubernetes, un imagePullSecret. Questo segreto di pull dell'immagine archivia le credenziali per accedere a un registro del contenitore.

Il registro del contenitore può essere:

  • Uno spazio dei nomi privato nel tuo IBM Cloud Container Registry.
  • Uno spazio dei nomi privato in IBM Cloud Container Registry che appartiene a un altro account IBM Cloud.
  • Qualsiasi altro registro privato, ad esempio Docker.

Tuttavia, per impostazione predefinita, il tuo cluster è configurato per eseguire il pull delle immagini solo dagli spazi dei nomi del tuo account in IBM Cloud Container Registry e per distribuire i contenitori da queste immagini allo spazio dei nomi Kubernetes default nel tuo cluster. Se hai bisogno di eseguire il pull di immagini in altri spazi dei nomi del cluster o da altri registri del contenitore, devi configurare i tuoi propri segreti di pull dell'immagine.

Configurazione del segreto di pull dell'immagine predefinito

In generale, il tuo cluster IBM Cloud Kubernetes Service è configurato per l'esecuzione del pull di immagini da tutti i domini icr.io di IBM Cloud Container Registry solo dallo spazio dei nomi Kubernetes default. Consulta le seguenti domande frequenti per saperne di più su come scaricare immagini in altri spazi dei nomi o account di Kubernetes, limitare l'accesso al download o capire perché il tuo cluster potrebbe non disporre dei segreti predefiniti per il download delle immagini.

Come devo configurare il mio cluster per recuperare le immagini dal namespace Kubernetes di default ?
Quando crei un cluster, tale cluster dispone di un ID del servizio IBM Cloud IAM a cui viene fornita una politica di ruolo di accesso al servizio IAM Lettore per IBM Cloud Container Registry. Le credenziali dell'ID del servizio vengono rappresentate in una chiave API senza scadenza che viene memorizzata nei segreti di pull dell'immagine nel tuo cluster. I segreti di pull dell'immagine vengono aggiunti allo spazio dei nomi Kubernetes di default e all'elenco di segreti nell'account di servizio default per questo spazio dei nomi Kubernetes. Utilizzando i segreti di pull dell'immagine, le tue distribuzioni possono eseguire il pull delle immagini (accesso di sola lettura) dal registro IBM Cloud Container Registry globale e regionale per distribuire i contenitori nello spazio dei nomi Kubernetes default.
  • Il registro globale archivia in modo sicuro le immagini pubbliche fornite da IBM. Puoi fare riferimento a queste immagini pubbliche attraverso le tue distribuzioni anziché avere riferimenti diversi per le immagini archiviate in ogni registro regionale.
  • Il registro regionale archivia in modo sicuro le tue proprie immagini Docker private.
E se non avessi i secret per il download delle immagini nel namespace default Kubernetes?
Puoi controllare i segreti di pull dell'immagine accedendo al tuo cluster ed eseguendo kubectl get secrets -n default | grep "icr-io". Se non è elencato alcun segreto icr, la persona che ha creato il cluster potrebbe non aver ricevuto le autorizzazioni richieste per IBM Cloud Container Registry in IAM. Vedi Aggiornamento dei cluster esistenti per utilizzare il segreto di pull dell'immagine della chiave API.
Posso limitare l'accesso in lettura a un determinato registro regionale?
Sì, puoi modificare la politica IAM esistente dell'ID servizio che limita il ruolo di accesso al servizio Lettore a tale registro locale o a una risorsa di registro, come ad esempio uno spazio dei nomi. Prima di poter personalizzare le politiche IAM del registro, devi abilitare le politiche IBM Cloud IAM per IBM Cloud Container Registry.

Volete rendere le credenziali del registro ancora più sicure Chiedete all'amministratore del cluster di abilitare un fornitore di servizi di gestione delle chiavi nel cluster per crittografare i segreti Kubernetes nel cluster, come il segreto di estrazione dell'immagine che memorizza le credenziali del registro.

Posso recuperare immagini in uno spazio dei nomi Kubernetes diverso da default?
Non per impostazione predefinita. Utilizzando la configurazione predefinita del cluster, puoi distribuire contenitori da qualsiasi immagine archiviata nel tuo spazio dei nomi IBM Cloud Container Registry nello spazio dei nomi Kubernetes default del tuo cluster. Per usare queste immagini in qualsiasi altro spazio dei nomi Kubernetes o in altri account IBM Cloud, hai la possibilità di copiare o creare i tuoi segreti di pull dell'immagine.
Posso importare immagini da un altro account IBM Cloud?
Sì, crea una chiave API nell'account IBM Cloud che desideri utilizzare. Quindi, in ogni spazio dei nomi di ciascun cluster in cui vuoi eseguire il pull di immagini dall'account IBM Cloud, crea un segreto che contenga la chiave API. Per ulteriori informazioni, segui questo esempio che utilizza una chiave API dell'ID servizio autorizzato.

Per utilizzare un registro non IBM Cloud, come Docker, vedi Accesso alle immagini memorizzate in altri registri privati.

La chiave API deve corrispondere a un ID servizio? Cosa succede se raggiungo il limite di ID di servizio per il mio account?
La configurazione predefinita del cluster crea un ID servizio per memorizzare le credenziali della chiave API IBM Cloud IAM nel segreto di pull dell'immagine. Tuttavia, puoi anche creare una chiave API per un singolo utente e archiviare le credenziali in un segreto di pull dell'immagine. Se si raggiunge il limite IAM per gli ID di servizio, il cluster viene creato senza l'ID di servizio e il segreto per il download delle immagini e, per impostazione predefinita, non è in grado di scaricare immagini dai domini del registro icr.io. Devi creare il tuo segreto di pull dell'immagine ma utilizzando una chiave API per un singolo utente, come un ID funzionale, non un ID servizio IBM Cloud IAM.
Vedo i segreti di recupero delle immagini per i domini del registro regionale e per tutti i domini del registro. Quale devo usare?
In precedenza, IBM Cloud Kubernetes Service creava dei segreti di pull dell'immagine separati per ciascun dominio di registro icr.io pubblico e regionale. Ora, tutti i domini pubblici e privati del registro icr.io per tutte le regioni sono memorizzati in un unico segreto di pull dell'immagine all-icr-io, creato automaticamente nel namespace default Kubernetes del proprio cluster.

Per i workload in altri spazi dei nomi Kubernetes nel cluster per eseguire il pull delle immagini del contenitore da un registro privato, puoi ora copiare solo il segreto del pull dell'immagine all-icr-io in quello spazio dei nomi Kubernetes. Specifica quindi il segreto all-icr-io nel tuo account di servizio o distribuzione. Non è più necessario copiare il segreto di recupero dell'immagine corrispondente al registro regionale della propria immagine. Inoltre, tieni presente che non hai bisogno di segreti di pull dell'immagine per i registri pubblici, che non richiedono autenticazione.

Dopo aver copiato o creato un “pull secret” per un’immagine in un altro namespace di Kubernetes, ho finito?
Non proprio. I tuoi contenitori devono essere autorizzati ad eseguire il pull delle immagini utilizzando il segreto che hai creato. Puoi aggiungere il segreto di pull delle immagini all'account del servizio per lo spazio dei nomi oppure fare riferimento al segreto in ciascuna distribuzione. Per le istruzioni, vedi Utilizzo del segreto di pull dell'immagine per la distribuzione dei contenitori.

Connessione di rete privata ai registri icr.io

Quando configuri il tuo account IBM Cloud per utilizzare gli endpoint del servizio, puoi utilizzare una connessione di rete privata per eseguire il push e il pull delle immagini su IBM Cloud Container Registry.

Cosa devo fare per configurare il mio cluster in modo che utilizzi la connessione privata ai registri di icr.io ?

  1. Abilita una funzione di router virtuale(VRF) per il tuo account dell'infrastruttura IBM Cloud, in modo da poter utilizzare l'endpoint del servizio cloud privato IBM Cloud Container Registry. Per abilitare VRF, consultare Abilitazione VRF. Per controllare se una VRF è già abilitata, utilizza il comando ibmcloud account show.
  2. Abilita il tuo account IBM Cloud per l'utilizzo degli endpoint del servizio.

IBM Cloud Container Registry utilizza automaticamente l'endpoint del servizio cloud privato. Non devi abilitare l'endpoint del servizio cloud privato per i tuoi cluster IBM Cloud Kubernetes Service.

Aggiornamento dei cluster esistenti per utilizzare il segreto di pull dell'immagine della chiave API

I nuovi cluster IBM Cloud Kubernetes Service memorizzano una chiave API nei segreti di pull dell'immagine per autorizzare l'accesso a IBM Cloud Container Registry. Con questi segreti di pull dell'immagine, puoi distribuire i contenitori dalle immagini che sono memorizzate nei domini del registro icr.io. Puoi aggiungere i segreti di pull dell'immagine al tuo cluster se questo non è stato creato con i segreti. Per i cluster creati prima del 25 febbraio 2019, devi aggiornare il tuo cluster per memorizzare una chiave API anziché un token del registro nel segreto di pull dell'immagine.

Prima di iniziare

  1. Accedi al tuo account. Se applicabile, specifica il gruppo di risorse appropriato. Imposta il contesto per il tuo cluster.

  2. Assicurati di disporre delle seguenti autorizzazioni: ruolo di accesso della piattaforma IBM Cloud IAM Operatore o Amministratore per IBM Cloud Kubernetes Service. Il titolare dell'account può assegnarti il ruolo eseguendo il seguente comando.

    ibmcloud iam user-policy-create EMAIL --service-name containers-kubernetes --roles "Administrator,Operator"
    
  3. IBM Cloud Ruolo di accesso alla piattaforma IAM Administrator per IBM Cloud Container Registry, in tutte le regioni e in tutti i gruppi di risorse. La politica non può essere limitata a una regione o a un gruppo di risorse specifici. Il titolare dell'account può assegnarti il ruolo eseguendo il seguente comando.

    Verifica che il segreto sia stato creato correttamente

    ibmcloud iam user-policy-create YOUR_USER_EMAIL --service-name container-registry --roles Administrator
    
  4. Se il tuo account limita la creazione dell'ID servizio, aggiungi il ruolo Service ID creator a Identity and Access Management nella console (iam-identity nell'API o nella CLI).

  5. Se il tuo account limita la creazione della chiave API, aggiungi il ruolo di creatore della chiave API utente a Identity and Access Management nella console (iam-identity nell'API o nella CLI).

Aggiornamento del segreto di pull dell'immagine

Per aggiornare il segreto di pull dell'immagine del cluster nel namespace default Kubernetes.

  1. Ottieni il tuo ID cluster.

    ibmcloud ks cluster ls
    
  2. Esegui il seguente comando per creare un ID servizio per il cluster e assegnare a tale ID un ruolo di accesso al servizio IAM Reader per IBM Cloud Container Registry. Il comando crea anche una chiave API per rappresentare le credenziali dell'ID servizio e memorizza la chiave API in un segreto di pull dell'immagine Kubernetes nel cluster. Il segreto di pull dell'immagine si trova nello spazio dei nomi Kubernetes di default.

    ibmcloud ks cluster pull-secret apply --cluster CLUSTER_NAME_OR_ID
    

    Quando esegui questo comando, viene avviata la creazione delle credenziali IAM e dei segreti di pull dell'immagine il cui completamento potrebbe richiedere alcuni minuti. Non è possibile distribuire container che scaricano un'immagine dai domini IBM Cloud Container Registry e icr.io finché non vengono creati i segreti per il download delle immagini.

  3. Verifica che i segreti di pull dell'immagine siano stati creati nel tuo cluster.

    kubectl get secrets | grep icr-io
    

    Output di esempio

    all-icr-io           kubernetes.io/dockerconfigjson        1         16d
    
  4. Aggiorna le tue distribuzioni del contenitore per eseguire il pull delle immagini dal nome di dominio icr.io.

  5. Facoltativo: se disponi di un firewall, assicurati di consentire il traffico di rete in uscita verso le sottoreti di registro relative ai domini che utilizzi.

  6. Completare la configurazione utilizzando una delle seguenti opzioni.

Utilizzo di un "image pull secret" per accedere alle immagini presenti in registri privati esterni

Configura il segreto di pull dell'immagine nel tuo cluster per distribuire contenitori in spazi dei nomi Kubernetes diversi da default, utilizzare immagini archiviate in altri account IBM Cloud o utilizzare le immagini archiviate in registri privati esterni. Inoltre, potresti creare il tuo segreto di pull dell'immagine per applicare politiche di accesso IAM che limitano le autorizzazioni a specifici spazi dei nomi delle immagini di registro o azioni (ad esempio, push o pull).

Dopo che hai creato il segreto di pull dell'immagine, i tuoi contenitori devono utilizzare il segreto per essere autorizzati a eseguire il pull di un'immagine dal registro. Puoi aggiungere il segreto di pull delle immagini all'account del servizio per lo spazio dei nomi oppure fare riferimento al segreto in ciascuna distribuzione. Per le istruzioni, vedi Utilizzo del segreto di pull dell'immagine per la distribuzione dei contenitori.

I segreti di pull dell'immagine sono validi solo per gli spazi dei nomi Kubernetes per i quali sono stati creati. Ripeti questa procedura per ogni spazio dei nomi in cui vuoi distribuire i contenitori. Le immagini provenienti da DockerHub non richiedono segreti di estrazione delle immagini.

Prima di cominciare:

  1. Configura uno spazio dei nomi in IBM Cloud Container Registry e inserisci le immagini in questo spazio dei nomi.
  2. Crea un cluster.
  3. Accedi al tuo account. Se applicabile, specifica il gruppo di risorse appropriato. Imposta il contesto per il tuo cluster.

Per utilizzare il tuo proprio segreto di pull dell'immagine, scegli tra le seguenti opzioni:

Se nel tuo spazio dei nomi hai già creato un segreto di pull dell'immagine che desideri utilizzare nella tua distribuzione, vedi Distribuzione dei contenitori utilizzando il imagePullSecret creato.

Copia di un segreto di pull dell'immagine esistente

Puoi copiare un segreto di pull dell'immagine, come quello che viene creato automaticamente per lo spazio dei nomi Kubernetes default, in altri spazi dei nomi del tuo cluster. Se desideri utilizzare credenziali delle chiavi API IBM Cloud IAM differenti per questo spazio dei nomi, ad esempio per limitare l'accesso a spazi dei nomi specifici o eseguire il pull delle immagini da altri account IBM Cloud, crea invece un segreto di pull dell'immagine.

  1. Elenca gli spazi dei nomi Kubernetes disponibili nel tuo cluster o crea uno spazio dei nomi da utilizzare.

    kubectl get namespaces
    

    Output di esempio

    default          Active    79d
    ibm-cert-store   Active    79d
    ibm-system       Active    79d
    kube-public      Active    79d
    kube-system      Active    79d
    

    Per creare uno spazio dei nomi

    kubectl create namespace <namespace_name>
    
  2. Elenca i segreti di pull dell'immagine esistenti nello spazio dei nomi Kubernetes di default per IBM Cloud Container Registry.

    kubectl get secrets -n default | grep icr-io
    

    Output di esempio

    all-icr-io          kubernetes.io/dockerconfigjson        1         16d
    
  3. Copia il segreto di pull dell'immagine all-icr-io dallo spazio dei nomi default allo spazio dei nomi di tua scelta. I nuovi segreti per il download delle immagini sono denominati <namespace_name>-icr-<region>-io.

    kubectl get secret all-icr-io -n default -o yaml | sed 's/default/<new-namespace>/g' | kubectl create -n <new-namespace> -f -   
    
  4. Verifica che i segreti siano stati creati correttamente.

    kubectl get secrets -n <namespace_name> | grep icr-io
    
  5. Per distribuire i contenitori, aggiungi il segreto di pull dell'immagine a ciascuna distribuzione o all'account di servizio dello spazio dei nomi in modo che qualsiasi distribuzione nello spazio dei nomi possa eseguire il pull delle immagini dal registro.

Creazione di un segreto di pull immagine con credenziali della chiave API IAM differenti

Puoi assegnare politiche di accesso IBM Cloud IAM a utenti o a un ID servizio per limitare le autorizzazioni a specifici spazi dei nomi delle immagini di registro o azioni (quali push o pull). Quindi, crea una chiave API e archivia le credenziali del registro in un segreto di pull dell'immagine per il tuo cluster.

Ad esempio, per accedere alle immagini in altri account IBM Cloud, crea una chiave API per archiviare le IBM Cloud Container Registry credenziali di un utente o di un ID servizio in tale account. Quindi, nell'account del tuo cluster, salva le credenziali della chiave API in un segreto di pull dell'immagine per ciascun cluster e spazio dei nomi del cluster.

La seguente procedura crea una chiave API che archivia le credenziali di un ID servizio IBM Cloud IAM. Anziché utilizzare un ID del servizio, potresti voler creare una chiave API per un ID utente che abbia una politica di accesso al servizio IBM Cloud IAM per IBM Cloud Container Registry. Tuttavia, assicurati che l'utente sia un ID funzionale o di avere un piano nel caso in cui l'utente se ne vada, in modo che il cluster possa ancora accedere al registro.

  1. Elenca gli spazi dei nomi Kubernetes disponibili nel tuo cluster o crea uno spazio dei nomi da utilizzare dove desideri distribuire i contenitori dalle immagini del registro.

    kubectl get namespaces
    

    Output di esempio

    default          Active    79d
    ibm-cert-store   Active    79d
    ibm-system       Active    79d
    kube-public      Active    79d
    kube-system      Active    79d
    

    Per creare uno spazio dei nomi

    kubectl create namespace <namespace_name>
    
  2. Crea un ID del servizio IBM Cloud IAM per il tuo cluster che viene utilizzato per le politiche IAM e per le credenziali della chiave API nel segreto di pull dell'immagine. Assicurati di fornire all'ID del servizio una descrizione che ti aiuti a richiamare l'ID in un secondo momento, ad esempio includendo il nome del cluster e dello spazio dei nomi.

    ibmcloud iam service-id-create <cluster_name>-<namespace>-id --description "Service ID for IBM Cloud Container Registry in Kubernetes cluster <cluster_name> namespace <namespace>"
    
  3. Crea una politica IBM Cloud IAM personalizzata per l'ID del servizio cluster che conceda l'accesso a IBM Cloud Container Registry.

    ibmcloud iam service-policy-create <cluster_service_ID> --roles <service_access_role> --service-name container-registry [--region <IAM_region>] [--resource-type namespace --resource <registry_namespace>]
    
    cluster_service_ID
    Obbligatorio. Sostituiscilo con l'ID del servizio " <cluster_name>-<kube_namespace>-id " che hai creato in precedenza per il tuo cluster Kubernetes.
    --service-name container-registry
    Obbligatorio. Immetti container-registry in modo che la politica IAM venga applicata a IBM Cloud Container Registry.
    --roles <service_access_role>
    Obbligatorio. Inserisci il ruolo di accesso al servizio per IBM Cloud Container Registry a cui desideri limitare l'accesso all'ID del servizio. I valori possibili sono Reader, Writer e Manager.
    --region <IAM_region>
    Facoltativo. Se vuoi applicare la politica di accesso a determinate regioni IAM, immetti le regioni in un elenco separato da virgole. I valori possibili sono global e le regioni del registro locale.
    --resource-type namespace --resource <registry_namespace>
    Facoltativo. Se desideri limitare l'accesso alle sole immagini presenti in determinati spazi dei nomi di IBM Cloud Container Registry, inserisci namespace come tipo di risorsa e specifica <registry_namespace>. Per elencare gli spazi dei nomi del registro, esegui ibmcloud cr namespaces.
  4. Crea una chiave API per l'ID del servizio. Assegna alla chiave API un nome simile al tuo ID servizio e includi l'ID servizio che hai creato in precedenza, <cluster_name>-<kube_namespace>-id. Assicurati di fornire alla chiave API una descrizione che ti aiuti a richiamare la chiave in un secondo momento.

    ibmcloud iam service-api-key-create <cluster_name>-<namespace>-key <cluster_name>-<namespace>-id --description "API key for service ID <service_id> in Kubernetes cluster <cluster_name> namespace <namespace>"
    
  5. Richiama il valore della tua Chiave API dall'output del comando precedente.

    Please preserve the API key! It can't be retrieved after it's created.
    Name          <cluster_name>-<kube_namespace>-key   
    Description   key_for_registry_for_serviceid_for_kubernetes_cluster_multizone_namespace_test   
    Bound To      crn:v1:bluemix:public:iam-identity::a/1bb222bb2b33333ddd3d3333ee4ee444::serviceid:ServiceId-ff55555f-5fff-6666-g6g6-777777h7h7hh   
    Created At    2019-02-01T19:06+0000   
    API Key       i-8i88ii8jjjj9jjj99kkkkkkkkk_k9-llllll11mmm1   
    Locked        false   
    UUID          ApiKey-222nn2n2-o3o3-3o3o-4p44-oo444o44o4o4   
    
  6. Crea un segreto di pull dell'immagine per archiviare le credenziali della chiave API nello spazio dei nomi del cluster. Ripeti questo passo per ogni spazio dei nomi di ciascun cluster per ogni dominio icr.io da cui vuoi eseguire il pull delle immagini.

    kubectl --namespace <namespace> create secret docker-registry <secret_name> --docker-server=<registry_URL> --docker-username=iamapikey --docker-password=<api_key_value> --docker-email=<docker_email>
    
    --namespace <namespace>
    Obbligatorio. Specifica lo spazio dei nomi Kubernetes del tuo cluster utilizzato per il nome dell'ID del servizio.
    <secret_name>
    Obbligatorio. Immetti un nome per il tuo segreto di pull dell'immagine.
    --docker-server <registry_URL>
    Obbligatorio. Imposta l'URL del registro delle immagini in cui è configurato il tuo spazio dei nomi del registro. Per i domini disponibili, vedi Regioni locali.
    --docker-username iamapikey
    Obbligatorio. Immetti il nome utente per accedere al tuo registro privato. Se utilizzi IBM Cloud Container Registry, immetti iamapikey.
    --docker-password <token_value>
    Obbligatorio. Inserisci il valore del tuo API Key che hai recuperato in precedenza.
    --docker-email <docker-email>
    Obbligatorio. Se ne hai uno, immetti il tuo indirizzo e-mail Docker. In caso contrario, inserisci un indirizzo e-mail fittizio, ad esempio a@b.c. Questa e-mail è necessaria per creare un segreto Kubernetes, ma non viene utilizzata dopo la creazione.
  7. Verifica che il segreto sia stato creato correttamente. Sostituisci <namespace> con l' namespace in cui hai creato il segreto per il pull dell'immagine.

    kubectl get secrets --namespace <namespace>
    
  8. Aggiungi il segreto di pull dell'immagine a un account di servizio Kubernetes in modo che qualsiasi pod nello spazio dei nomi possa utilizzare tale segreto quando distribuisci un contenitore.

Accesso alle immagini memorizzate in altri registri privati

Se hai già un registro privato, devi memorizzare le credenziali del registro in un segreto di pull dell'immagine Kubernetes e fare riferimento a questo segreto dal tuo file di configurazione.

Prima di cominciare:

  1. Crea un cluster.
  2. Accedi al tuo account. Se applicabile, specifica il gruppo di risorse appropriato. Imposta il contesto per il tuo cluster.

Per creare un segreto di pull dell'immagine:

  1. Crea il segreto Kubernetes per memorizzare le credenziali del tuo registro privato.

    kubectl --namespace <namespace> create secret docker-registry <secret_name>  --docker-server=<registry_URL> --docker-username=<docker_username> --docker-password=<docker_password> --docker-email=<docker_email>
    
    --namespace <namespace>
    Obbligatorio. Lo spazio dei nomi Kubernetes del cluster in cui vuoi utilizzare il segreto e a cui distribuire i contenitori. Per visualizzare l'elenco degli spazi dei nomi disponibili nel proprio cluster, eseguire il comando kubectl get namespaces``.
    <secret_name>
    Obbligatorio. Il nome che vuoi utilizzare per il tuo segreto di pull dell'immagine.
    --docker-server <registry_URL>
    Obbligatorio. L'URL del registro in cui sono memorizzate le tue immagini private.
    --docker-username <docker_username>
    Obbligatorio. Il nome utente per accedere al tuo registro privato.
    --docker-password <token_value>
    Obbligatorio. La password per accedere al tuo registro privato, ad esempio un valore token.
    --docker-email <docker-email>
    Obbligatorio. Se ne hai uno, immetti il tuo indirizzo e-mail Docker. Se non ne hai uno, inserisci un indirizzo e-mail fittizio, ad esempio a@b.c. Questa e-mail è necessaria per creare un segreto Kubernetes, ma non viene utilizzata dopo la creazione.
  2. Verifica che il segreto sia stato creato correttamente. Sostituisci " <namespace> " con il nome dello spazio dei nomi in cui hai creato il segreto per il pull dell'immagine.

    kubectl get secrets --namespace <namespace>
    
  3. Crea un pod che fa riferimento al segreto di pull dell'immagine.

Utilizzo del segreto di pull dell'immagine per la distribuzione dei contenitori

È possibile definire un segreto per il recupero delle immagini nella distribuzione del pod oppure memorizzarlo nell'account di servizio " Kubernetes ", in modo che sia disponibile per tutte le distribuzioni che non specificano un account di servizio " Kubernetes " nel namespace.

Per pianificare l'utilizzo dei segreti per il download delle immagini nel proprio cluster, scegliere una delle seguenti opzioni.

  • In riferimento al segreto di pull delle immagini nella distribuzione del tuo pod: utilizza questa opzione se non desideri concedere l'accesso al tuo registro a tutti i pod nel tuo namespace per impostazione predefinita. Gli sviluppatori possono includere il segreto di pull dell'immagine in ogni distribuzione del pod che deve accedere al tuo registro.
  • Memorizzazione del segreto di pull dell'immagine nell'account di servizio Kubernetes: utilizza questa opzione per concedere l'accesso alle immagini presenti nel tuo registro per le tutte le distribuzioni negli spazi dei nomi Kubernetes selezionati. Per memorizzare un segreto di pull dell'immagine nell'account di servizio Kubernetes, utilizza la seguente procedura.

Memorizzazione del segreto di pull dell'immagine nell'account di servizio Kubernetes per lo spazio dei nomi selezionato

Ogni spazio dei nomi Kubernetes ha un account di servizio Kubernetes denominato default. All'interno dello spazio dei nomi, puoi aggiungere il segreto di pull dell'immagine a questo account di servizio per concedere l'accesso in modo che i pod possano eseguire il pull delle immagini dal tuo registro. Le distribuzioni che non specificano un account di servizio utilizzano automaticamente l'account di servizio default per questo spazio dei nomi Kubernetes.

  1. Controlla se esiste già un segreto di pull dell'immagine per il tuo account di servizio predefinito.

    kubectl describe serviceaccount default -n <namespace_name>
    

    Quando nella voce " Segreti di recupero delle immagini " viene visualizzato " <none> ", significa che non esiste alcun segreto di recupero delle immagini.

  2. Aggiungi il segreto di pull dell'immagine al tuo account di servizio predefinito.

    • Comando di esempio per aggiungere il segreto di recupero dell'immagine quando non ne è stato definito alcuno.
        kubectl patch -n <namespace_name> serviceaccount/default -p '{"imagePullSecrets":[{"name": "<image_pull_secret_name>"}]}'
        ```
    - Comando di esempio per aggiungere il segreto di recupero dell'immagine quando ne è già stato definito uno.
    
    ```sh {: pre}
        kubectl patch -n <namespace_name> serviceaccount/default --type='json' -p='[{"op":"add","path":"/imagePullSecrets/-","value":{"name":"<image_pull_secret_name>"}}]'
        ```
    
  3. Verifica che il tuo segreto di pull dell'immagine sia stato aggiunto al tuo account di servizio predefinito.

    kubectl describe serviceaccount default -n <namespace_name>
    

    Output di esempio

    Name:                default
    Namespace:           <namespace_name>
    Labels:              <none>
    Annotations:         <none>
    Image pull secrets:  <image_pull_secret_name>
    Mountable secrets:   default-token-sh2dx
    Tokens:              default-token-sh2dx
    Events:              <none>
    

    Se il segreto per il download dell'immagine riporta " <secret> (not found)", verifica che il segreto esista nello stesso namespace del tuo account di servizio eseguendo il comando " kubectl get secrets -n namespace".

  4. Crea un file di configurazione del pod denominato mypod.yaml per distribuire un contenitore da un'immagine presente nel tuo registro.

    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod
    spec:
      containers:
        - name: mypod-container
          image: <region>.icr.io/<namespace>/<image>:<tag>
    
  5. Crea il pod nel cluster applicando il file di configurazione mypod.yaml.

    kubectl apply -f mypod.yaml
    

Configurazione di un cluster per eseguire il pull del software autorizzato

Puoi configurare il tuo cluster IBM Cloud Kubernetes Service per eseguire il pull del software autorizzato, che è una raccolta di immagini contenitore protette fornite nei grafici Helm che IBM ti ha autorizzato a utilizzare. Il software autorizzato è archiviato in un dominio cp.icr.io IBM Cloud Container Registry speciale. Per accedere a questo dominio, devi creare un segreto di pull dell'immagine con una chiave di titolarità per il tuo cluster e aggiungere questo segreto di pull dell'immagine all'account di servizio Kubernetes di ogni spazio dei nomi in cui vuoi distribuire questo software autorizzato.

Prima di iniziare: Accedi al tuo account. Se applicabile, specifica il gruppo di risorse appropriato. Imposta il contesto per il tuo cluster.

  1. Ottieni la chiave di titolarità per la libreria del software autorizzato.

    1. Accedi al sito MyIBM.com e scorri fino alla sezione " Libreria software Container ". Fai clic su View library.
    2. Nella pagina “Accesso al software del container > Chiavi di autorizzazione ”, fare clic su “Copia chiave ”. Questa chiave autorizza l'accesso a tutto il software autorizzato nella tua libreria software del contenitore.
  2. Nello spazio dei nomi in cui vuoi distribuire i tuoi contenitori autorizzati, crea un segreto di pull dell'immagine in modo che tu possa accedere al registro autorizzato cp.icr.io. Utilizza la chiave di titolarità che hai richiamato in precedenza come valore --docker-password. Per ulteriori informazioni, vedi Accesso alle immagini memorizzate in altri registri privati.

    kubectl create secret docker-registry entitled-cp-icr-io --docker-server=cp.icr.io --docker-username=cp --docker-password=<entitlement_key> --docker-email=<docker_email> -n <namespace>
    
  3. Aggiungi il segreto di pull dell'immagine all'account di servizio dello spazio dei nomi in modo che qualsiasi contenitore nello spazio dei nomi possa utilizzare la chiave di titolarità per eseguire il pull delle immagini autorizzate. Per ulteriori informazioni, vedi Utilizzo del segreto di pull dell'immagine per la distribuzione dei contenitori.

    kubectl patch -n <namespace> serviceaccount/default --type='json' -p='[{"op":"add","path":"/imagePullSecrets/-","value":{"name":"entitled-cp-icr-io"}}]'
    
  4. Crea un pod nello spazio dei nomi che crea un contenitore da un'immagine nel registro autorizzato.

    kubectl run <pod_name> --image=cp.icr.io/<image_name> -n <namespace> --generator=run-pod/v1
    
  5. Controlla che il tuo contenitore sia stato in grado di eseguire correttamente la creazione dall'immagine autorizzata verificando che il pod si trovi in uno stato Running.

    kubectl get pod <pod_name> -n <namespace>
    

Ti chiedi cosa fare successivamente? Puoi configurare il repository di grafici Helm entitled, dove sono archiviati i grafici Helm che incorporano software autorizzato. Se Helm è già installato nel tuo cluster, esegui helm repo add entitled https://raw.githubusercontent.com/IBM/charts/master/repo/entitled.

Aggiornamento di una configurazione del registro personalizzato containerd IBM Cloud Kubernetes Service

Con Kubernetes versione 1.22 o successive, puoi utilizzare i file di configurazione containerd sui nodi di lavoro per configurare il pull da un registro del contenitore. Puoi utilizzare una serie di daemon per aggiornare le configurazioni su tutti i nodi in un cluster, il che impedisce la cancellazione delle configurazioni quando i nodi di lavoro vengono ricaricati o quando vengono aggiunti nuovi nodi di lavoro.

Esempio di serie di daemon per aggiornare una configurazione del registro personalizzato containerd

Utilizza il file YAML di esempio per definire un daemonset che viene eseguito su tutti i nodi di lavoro per impostare o aggiornare una configurazione host del registro containerd e montarlo nel percorso del registro containerd corrispondente.

L'esempio imposta la configurazione del seguente host di registro per dockerhub. Questa configurazione dell'host del registro è già fornita e configurata automaticamente durante la fase di provisioning del nodo di lavoro. Il contenitore init inizializza hosts.toml su ogni nodo di lavoro dopo la distribuzione e dopo il ricaricamento o il riavvio dei nodi di lavoro.

server = "https://docker.io"
[host."https://registry-1.docker.io"]
capabilities = ["pull", "resolve"]

Esempio di file YAML:

apiVersion: apps/v1
kind: DaemonSet
metadata:
labels:
    name: containerd-dockerhub-registry-config
name: containerd-dockerhub-registry-config
namespace: kube-system
spec:
selector:
    matchLabels:
    name: containerd-dockerhub-registry-config
template:
    metadata:
    labels:
        name: containerd-dockerhub-registry-config
    spec:
    initContainers:
    - image: alpine:3.13.6
        name: containerd-dockerhub-registry-config
        command:
        - /bin/sh
        - -c
        - |
            #!/bin/sh
            set -uo pipefail
            cat << EOF > /etc/containerd/certs.d/docker.io/hosts.toml
            server = "https://docker.io"
            [host."https://registry-1.docker.io"]
            capabilities = ["pull", "resolve"]
            EOF
        volumeMounts:
        - mountPath: /etc/containerd/certs.d/docker.io/
        name: dockerhub-registry-config
    containers:
    - name: pause
        image: "us.icr.io/armada-master/pause:3.5"
        imagePullPolicy: IfNotPresent
    volumes:
    - name: dockerhub-registry-config
        hostPath:
        path: /etc/containerd/certs.d/docker.io/

Per ulteriori informazioni sull'aggiornamento di una configurazione host del registro containerd, vedi la documentazione containerd.