Accesso ai registri dei contenitori
Le immagini utilizzate da IBM Cloud® Code Engine sono tipicamente memorizzate in un registro che può essere accessibile al pubblico (registro pubblico) o impostato con accesso limitato a un piccolo gruppo di utenti (registro privato).
Un registro del contenitore, o registro, è un servizio che memorizza le immagini del contenitore. Ad esempio, IBM Cloud Container Registry e Docker Hub sono registri del contenitore. Un registro del contenitore può essere pubblico o privato. Un registro del contenitore pubblico non richiede credenziali per accedere. Al contrario, l'accesso a un registro privato richiede le credenziali.
Code Engine richiede l'accesso ai registri del contenitore per completare le seguenti azioni:
- Per richiamare (o "estrarre") un'immagine del contenitore per eseguire un'applicazione o un lavoro
- Per memorizzare un'immagine del contenitore appena creata come output di una creazione di immagine
- Per memorizzare e richiamare i file locali quando viene eseguito un build dall'origine locale
Code Engine gestisce molti dei dettagli sottostanti delle interazioni tra il sistema e il registro.
Per eseguire il pull delle immagini da un registro, Code Engine utilizza un tipo speciale di segreto Kubernetes denominato imagePullSecret. Questo segreto di pull dell'immagine archivia le credenziali per accedere a un registro del
contenitore. Quando aggiungi l'accesso a un registro del contenitore con Code Engine per eseguire il pull delle immagini, stai creando un segreto di pull dell'immagine. Per ulteriori informazioni sui segreti di pull dell'immagine, vedi la
documentazione diKubernetes.
Tipi di 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 l'hub pubblico Docker, possono essere utilizzati per iniziare a utilizzare Docker e Code Engine per creare la tua prima applicazione o lavoro. Ma quando si tratta di carichi di lavoro aziendali, utilizzate un registro privato, come quello fornito da IBM Cloud Container Registry, per proteggere le immagini dall'uso da parte di utenti non autorizzati. Per i registri privati, utilizzare i segreti del Registro di sistema per assicurarsi che le credenziali siano disponibili per ottenere l'accesso al registro privato.
| Registro | Descrizione |
|---|---|
| IBM Cloud Container Registry |
Con questo tipo di registro, puoi configurare il tuo repository di immagine protetto in IBM Cloud Container Registry dove puoi archiviare e condividere in modo sicuro le immagini tra gli utenti.
|
| Ogni altro registro privato |
Connetti qualsiasi registro privato esistente a Code Engine aggiungendo l'accesso. L'aggiunta di un accesso sicuro salva il registro URL e le credenziali in un segreto Kubernetes.
|
| Docker Hub pubblico |
Usare questo tipo di registro per estrarre le immagini pubbliche esistenti da Docker Hub direttamente nelle applicazioni o nei lavori Code Engine. Importante:
Con Docker Hub pubblico, è possibile:
|
Tipi di segreti di registro
Per accedere alle immagini in un registro, Code Engine utilizza uno dei seguenti tipi di segreti di registro.
- Code Engine segreto gestito - Se il tuo registro utilizza uno spazio dei nomi IBM Cloud Container Registry presente nel tuo account, puoi consentire a Code Engine di creare e gestire il segreto del registro per te. Nella console, questo segreto
di registro creato automaticamente viene chiamato
Code Engine managed secret. Nella CLI, il nome di un segreto di registro creato automaticamente è nel formatoce-auto-icr-private-<region>. - Segreto gestito dall'utente - Questo è un segreto che si crea e si gestisce. Puoi accedere alle immagini dal tuo account con una chiave API o utilizzare un token di accesso per il registro del contenitore di tua scelta; ad esempio, Docker Hub. Per questo caso, il segreto di registro elencato nella console è il nome del tuo segreto di registro.
Se il tuo registro è pubblico e non richiede credenziali; ad esempio, immagini di esempio Code Engine in icr.io/codeengine o Docker Hub pubblico, non hai bisogno di un segreto di registro. Per questo caso, il segreto di registro
elencato nella console è None.
Accesso alle immagini da un account pubblico
Se la tua immagine è archiviata in un repository pubblico, come un hub Docker pubblico, puoi semplicemente fare riferimento all'immagine direttamente quando distribuisci la tua applicazione o esegui il tuo lavoro. Tieni presente che durante la memorizzazione delle immagini in un registro pubblico è utile per iniziare a utilizzare le applicazioni e i lavori, memorizza le immagini aziendali in un registro privato.
Accesso alle immagini nel proprio account dalla console
Se stai accedendo a Code Engine da un account che possiedi o gestisci, lo spazio dei nomi Code Engine può eseguire automaticamente il push e il pull delle immagini da e verso uno spazio dei nomi IBM Cloud Container Registry nel tuo account quando crei o aggiorni le applicazioni, i lavori o le build dalla console. Code Engine può anche creare uno spazio dei nomi per te quando esegui il push di un'immagine. Per ulteriori informazioni, consulta i seguenti argomenti.
- Distribuzione di una applicazione che fa riferimento a un'immagine in IBM Cloud Container Registry con la console.
- Distribuzione della tua applicazione dal codice sorgente.
- Creazione di un lavoro dalle immagini in IBM Cloud Container Registry con la console.
- Creazione di un lavoro dal codice di origine.
Accesso alle immagini dal tuo account con una chiave API
Se accedi a Code Engine con la CLI, devi prima creare una chiave API IAM e quindi salvare la chiave API IAM come accesso al Registro di sistema in Code Engine.
I passaggi seguenti creano una chiave API che memorizza le credenziali di un ID utente. Invece di usare un ID utente, si potrebbe creare una chiave API per un ID servizio che ha un criterio di accesso al servizio IBM Cloud IAM a IBM Cloud Container Registry. Se scegli di autenticare un ID utente, assicurati che l'utente sia un ID funzionale o un piano per i casi in cui l'utente se ne va in modo che Code Engine possa ancora accedere al registro.
Creare una chiave API dalla console
Per creare una IBM Cloud IAM dalla console,
-
Avvia Panoramica di accesso(IAM).
-
Seleziona API keys.
-
Fai clic su Crea una chiave API IBM Cloud.
-
Inserire un nome e una descrizione opzionale per la chiave API e fare clic su Crea.
-
Copia la chiave API o fai clic su Scarica per salvarla.
Non sarà più possibile visualizzare questa chiave API, quindi assicurati di registrarla in un luogo sicuro.
Ora che hai creato la tua chiave API, salvala come accesso al registro.
Creare una chiave API con la CLI
Per creare una IBM Cloud Con la CLI, eseguire il comando 'iam api-key-create. Ad esempio, per creare una chiave API chiamata
'cliapikey con una descrizione di 'My CLI API key e salvarla in un file chiamato 'key_file, eseguire il seguente comando:
ibmcloud iam api-key-create cliapikey -d "My CLI API key" --file key_file
Se si sceglie di non salvare la chiave in un file, è necessario registrare la chiave API visualizzata quando la si crea. Non puoi richiamarla successivamente.
Ora che hai creato la tua chiave API, salvala come accesso al registro.
Accesso alle immagini in un account diverso
È possibile assegnare i criteri di accesso IAM di IBM Cloud agli utenti o a un ID servizio per limitare le autorizzazioni a specifici spazi dei nomi delle immagini del registro o ad azioni (come push o pull). Crea quindi una chiave API e memorizza queste credenziali del registro in Code Engine.
Ad esempio, per accedere alle immagini di altri account IBM Cloud, creare una chiave API che memorizzi le credenziali IBM Cloud Container Registry di un utente o di un ID servizio di quell'account. Quindi, in Code Engine, utilizza questa chiave per creare accesso nel tuo account.
Accesso alle immagini in un account hub Docker privato
Per accedere alle immagini in un account Hub Docker privato, crea l'accesso al registro fornendo la tua password o un token di accesso. Utilizzando un token di accesso, puoi concedere e revocare più facilmente l'accesso al tuo account hub Docker senza richiedere una modifica della password. Per ulteriori informazioni sui token di accesso e su Docker Hub, vedere Creare e gestire i token di accesso.
Dopo aver deciso se utilizzare direttamente la password o creare un token di accesso, crea il tuo accesso al registro.
Aggiungi accesso al registro a Code Engine
Per impostare l'accesso a un account IBM Cloud Container Registry diverso IBM Cloud, per eseguire il pull delle immagini da un account Hub Docker privato o per eseguire il pull o il push delle immagini utilizzando la CLI Code Engine, Puoi utilizzare la chiave APIIBM o il Docker Hub per creare l'accesso al registro tramite Code Engine per memorizzare la tua chiave di autenticazione o il tuo token.
Aggiunta dell'accesso al Registro dalla console
Prima di iniziare, creare un progetto.
- Dopo che il tuo progetto è nello stato Attivo, fai clic sul nome del tuo progetto nella pagina dei progettiCode Engine.
- Dalla pagina Componenti, fare clic su Segreti e mappe di configurazione.
- Dalla pagina Segreti e mappe di configurazione, fare clic su Crea per creare il segreto.
- Dalla pagina Crea segreto o configmap, completare la seguente procedura:
- Selezionare Segreto registro e fare clic su Avanti.
- Fornire un nome, ad esempio
mysecret-registry. - Specifica il registro di destinazione per questo segreto, come IBM Cloud Container Registry o Docker Hub.
- Specificare la posizione del registro.
- Specificare un nome utente. Se questo segreto è per IBM Cloud Container Registry, il nome utente è
iamapikey. Se questo segreto è per Docker Hub, è il tuo ID Docker. - Immettere le credenziali per il nome utente. Per IBM Cloud Container Registry, utilizza la chiave API IAM. Per Docker Hub, puoi utilizzare la tua password Docker Hub o un token di accesso . Per altri registri di destinazione, specificare la parola d'ordine o la chiave API per il nome utente.
- Fare clic su Crea per creare il segreto.
Ora che il tuo segreto è stato creato dalla console, vai alla pagina Secrets and configmaps per visualizzare un elenco di segreti e configmap definiti. È possibile applicare filtri per personalizzare l'elenco in base alle proprie esigenze.
Puoi aggiungere l'accesso a un registro del contenitore quando crei un'applicazione o un lavoro o quando crei un'immagine. Fai clic su Configura immagine e specifica l'immagine del contenitore da eseguire, incluso il registro in cui è memorizzata l'immagine e l'accesso al registro da utilizzare per richiamare l'immagine.
Aggiunta dell'accesso al registro con la CLI
A partire dalla versione della CLI 1.42.0, la definizione e l'utilizzo dei segreti nella CLI sono unificati nel gruppo di comandi secret del gruppo di comandi. Consultare i comandi ibmcloud ce secret.
Utilizzare l'opzione --format per specificare la categoria del segreto, ad esempio basic_auth, generic, hmac, ssh, tls, o registry. Sebbene sia possibile
continuare a utilizzare il gruppo di comando registry gruppo di comando, è possibile sfruttare il gruppo di comando unificato secret gruppo di comando unificato. Per creare un segreto
per accedere al registro di un contenitore, usare il comando ibmcloud ce secret create --format registry il comando. Per saperne di più su
come lavorare con i segreti in Code Engine, vedere Lavorare con i segreti.
Per aggiungere IBM Cloud Container Registry o l'accesso Docker Hub con la CLI, utilizza il comando secret create --format registry. Questo comando richiede il nome del segreto del registro, l'indirizzo URL del
server del registro, il nome utente e la password per accedere al server del registro e consente altri argomenti opzionali. Per un elenco completo delle opzioni, consultare il comando ibmcloud ce secret create.
Ad esempio, il seguente comando crea l'accesso al Registro di sistema a un'istanza IBM Cloud Container Registry denominata myregistry che si trova nel server di registro di us.icr.io:
ibmcloud ce secret create --format registry --name myregistry --server us.icr.io --username iamapikey --password API_KEY
Output di esempio
Creating registry secret 'myregistry'...
OK
La seguente tabella riepiloga le opzioni utilizzate con il comando secret create --format registry in questo esempio. Per ulteriori informazioni sul comando e le sue opzioni, consultare il comando ibmcloud ce secret create.
| Opzione | Descrizione |
|---|---|
--name |
Il nome del segreto di registro. Utilizzare un nome univoco all'interno del progetto. Questo valore è obbligatorio.
|
--server |
Inserire l'indirizzo URL del server di registro. Per Container Registry, il nome del server è <region>.icr.io. Ad esempio, us.icr.io. Per Docker Hub, il valore è https://index.docker.io/v1/. |
--username |
Inserire il nome utente per accedere al server di registro. Per Container Registry, è iamapikey. Per Docker Hub, è il tuo ID Docker. |
--password |
Immettere la password. Per Container Registry, la parola d'ordine è la chiave API. Per Docker Hub, puoi utilizzare la tua password Docker Hub o un token di accesso . |
Controllo dell'accesso a Container Registry per i workload Code Engine
Supponi di voler controllare l'accesso a IBM Cloud Container Registry quando Code Engine estrae le immagini. Ad esempio, vuoi controllare l'accesso a Container Registry a specifici indirizzi IP. Considerare i seguenti approcci.
-
Utilizzare una restrizione basata sul contesto. Utilizzando una limitazione basata sul contesto, se gli indirizzi IP per il progetto Code Engine vengono modificati, non è necessario modificare l'accesso. Puoi limitare l'accesso a Container Registry a una zona di rete, dove la tua zona di rete include Code Engine e tutto ciò che richiede l'accesso al registro.
-
Disabilita l'accesso pubblico a IBM Cloud Container Registry e assicurati che Code Engine utilizzi gli endpoint privati invece degli endpoint pubblici. Vedi Protezione della tua connessione a Container Registry.
-
Per controllare l'accesso da un intervallo IP specifico, utilizza un endpoint API per recuperare gli indirizzi IP per il tuo particolare progetto Code Engine. È importante notare che questi indirizzi IP sono soggetti a modifiche ed è necessario adottare le misure appropriate quando ciò si verifica. Vedi Indirizzi IP pubblici e privatiCode Engine e Come posso aggiungere la mia applicazione Code Engine a un allowlist?
Considerazioni per le immagini nel registro
Il nome della tua immagine utilizzato per la tua applicazione o il tuo lavoro deve essere in uno dei formati seguenti.
REGISTRY/NAMESPACEorDOCKERUSERorDOCKERORG/REPOSITORY:TAGdoveREGISTRYeTAGsono facoltativi. SeREGISTRYnon è specificato, il valore predefinito èdocker.io. SeTAGnon è specificato, non includere i due punti (:). Il valore predefinito perTAGèlatest.REGISTRY/NAMESPACEorDOCKERUSERorDOCKERORG/REPOSITORY@IMAGEIDdoveREGISTRYè facoltativo. SeREGISTRYnon viene specificato, il valore predefinito èdocker.ioeibmcome organizzazione Docker.
| Componente | Caratteri consentiti | Lunghezza | Regole aggiuntive |
|---|---|---|---|
REGISTRY |
a-zA-Z0-9 -_. --__ |
1-253 | (0-127Periods)(label:1-63,noDashOnEnd) |
NAMESPACE |
a-z 0-9 -_ --__ |
4-30 | (start/end with letterOrNumber) |
DOCKERUSERorDOCKERORG |
a-z 0-9 |
4-30 | |
REPOSITORY |
a-z 0-9 -_. / |
2-255 | (start/end with letterOrNumber) |
TAG |
a-zA-Z0-9 -_. --__.. |
0-128 | (NOT start with periodOrDash) |
IMAGEID |
a-z 0-9 : |
(startwith sha256: noOtherColon) |
Le parti del nome immagine devono soddisfare i criteri seguenti.
REGISTRYdeve avere una lunghezza massima di 253 caratteri e può contenere lettere minuscole o maiuscole, numeri, punti (.), trattini (-) e caratteri di sottolineatura (_). Non utilizzare un trattino (.) come ultimo carattere. Non utilizzare più di 127 punti (.) e le etichette tra di essi possono essere comprese tra 1 e 63 caratteri.NAMESPACEdeve essere compreso tra 4 e 30 caratteri e deve iniziare e terminare con una lettera minuscola o un numero.NAMESPACEpuò contenere caratteri alfanumerici minuscoli, trattini (-) e caratteri di sottolineatura (_).DOCKERUSERorDOCKERORGpuò essere utilizzato per i registri Docker invece diNAMESPACE. Specificare il nome utente Docker o l'organizzazione Docker. Il tuo nome utente e la tua organizzazione Docker devono essere compresi tra 4 e 30 caratteri e contengono solo numeri o caratteri alfanumerici minuscoli.REPOSITORYdeve essere compreso tra 2 e 255 caratteri e deve iniziare e terminare con una lettera minuscola o un numero.REPOSITORYpuò contenere caratteri alfanumerici minuscoli, barre (/), punti (.), trattini (-) e caratteri di sottolineatura (_).TAGdeve essere compreso tra 0 e 128 caratteri e può contenere lettere minuscole o maiuscole, numeri, punti (.), trattini (-) e caratteri di sottolineatura (_). IlTAGnon deve iniziare con un punto o un trattino. Se non si include unTAG, non includere neanche i due punti.IMAGEIDha il prefissosha256:e può contenere lettere minuscole e numeri.