Configurazione di un registro di immagini
I cluster Red Hat® OpenShift® on IBM Cloud® includono un registro interno per creare, distribuire e gestire immagini del contenitore localmente. Per un registro privato per gestire e controllare l'accesso alle immagini nell'ambito della tua azienda, puoi anche configurare il tuo cluster per utilizzare IBM Cloud® Container Registry.
Scelta di una soluzione del registro di immagini
Le immagini dei container devono essere archiviate in un registro dei container a cui il cluster possa accedere per distribuire le applicazioni all'interno del cluster. È possibile scegliere se utilizzare il registro integrato del proprio cluster Red Hat OpenShift, un registro privato con accesso limitato a utenti selezionati oppure un registro pubblico. Rivedi la seguente tabella per scegliere l'opzione migliore per il tuo caso d'uso.
- Red Hat OpenShift e interna Container Registry (OCR)
-
Il tuo cluster è configurato con l' Red Hat OpenShift o interno Container Registry, in modo che Red Hat OpenShift possa automaticamente creare, distribuire e gestire il ciclo di vita della tua applicazione dall'interno del cluster. Le immagini sono archiviate in un dispositivo di archiviazione file classico IBM Cloud di supporto di cui viene eseguito il provisioning al momento della creazione del cluster. Se hai bisogno di ulteriore archiviazione, puoi ridimensionare il dispositivo. Casi di utilizzo:
- Red Hat OpenShift- Processo nativo di gestione del flusso di immagini, creazione delle build e distribuzione delle app a livello di singolo cluster.
- Le immagini possono essere condivise tra tutti i progetti nel cluster, con l'accesso controllato tramite i ruoli RBAC.
- Integrazione del registro interno con altri prodotti Red Hat come CloudForms per funzioni estese come la scansione delle vulnerabilità.
- Opzione per esporre il registro interno con un instradamento in modo che gli utenti possano eseguire il pull di immagini dal registro sulla rete pubblica.
- Opzione per configurare il registro interno per eseguire il pull o il push di immagini in un registro privato come IBM Cloud Container Registry.
-
Per ulteriori informazioni, vedi Utilizzo del registro interno.
- Registro privato
-
I registri privati sono una buona scelta per proteggere le immagini da utenti non autorizzati. I registri privati devono essere configurati dall'amministratore del cluster per garantire che l'accesso, l'archiviazione delle quote, l'attendibilità delle immagini e altre funzioni funzionino come previsto. Per default, i tuoi Cluster Red Hat OpenShift sono integrati con il IBM Cloud Container Registry privato tramite i segreti di pull dell'immagine nel progetto
default. IBM Cloud Container Registry è un registro privato a più tenant altamente disponibile per archiviare le tue immagini. Puoi anche eseguire il pull di immagini fornite da IBM dal registroicr.ioglobale e del software con licenza dal registro di titolarità. Con IBM Cloud Container Registry, è possibile gestire le immagini per più cluster grazie all'integrazione con IBM Cloud, IAM e la fatturazione. Vantaggi dell'utilizzo di IBM Cloud Container Registry con il registro interno:- Memorizzazione di immagini nella cache locale per build più veloci tramite il registro interno.
- Le distribuzioni in altri progetti possono accedere al flusso di immagini, così non è necessario copiare i secret pull in ogni singolo progetto.
- Condivisione delle immagini tra più cluster senza dover eseguire il push delle immagini a più registri.
- Scansione automatica delle vulnerabilità delle immagini.
- Controllo dell'accesso tramite le politiche IBM Cloud IAM e i registri regionali separati.
- Conservazione delle immagini senza la richiesta di spazio di archiviazione nel tuo cluster o in un dispositivo di archiviazione collegato. Puoi anche impostare delle politiche per gestire la quantità di immagini per evitare che utilizzino troppo spazio.
- Infrastruttura VPC: utilizzo dell'endpoint del servizio di registro privato in modo che i cluster che utilizzano esclusivamente un endpoint del servizio cloud privato possano comunque accedere al registro.
- Configurazione dell'archiviazione e delle quote di traffico di pull dell'immagine per controllare in modo migliore la fatturazione, l'utilizzo e l'archiviazione dell'immagine.
- Esecuzione del pull del contenuto IBM con licenza dal registro di titolarità.
-
Per iniziare, vedi i seguenti argomenti:
- Registro pubblico
-
I registri pubblici come Docker Hub consentono di condividere immagini tra team, aziende, cluster o fornitori di servizi cloud. Alcuni registri pubblici potrebbero inoltre offrire un componente di registro privato. Casi di utilizzo:
- Esecuzione del push e del pull delle immagini sulla rete pubblica.
- Test rapidi di un container su diversi provider cloud.
- Non servono funzionalità di livello aziendale come la scansione delle vulnerabilità o la gestione degli accessi.
-
Per ulteriori informazioni, consultare la documentazione relativa ai registri pubblici, come Quay o l’ Docker Hub.
Archiviazione delle immagini nei registri interni
Red Hat OpenShift I cluster dispongono di un registro interno predefinito. Le immagini presenti nel registro interno vengono sottoposte a backup, ma variano a seconda del fornitore dell'infrastruttura del proprio cluster Red Hat OpenShift on IBM Cloud.
- Cluster classici
- Il tuo cluster Red Hat OpenShift è configurato per impostazione predefinita con un registro interno che utilizza File Storage for Classic come archiviazione di backup. Quando elimini il cluster, vengono eliminati anche il registro interno e le sue immagini. Se desideri conservare le tue immagini, valuta la possibilità di utilizzare un registro privato come IBM Cloud Container Registry, di eseguire il backup delle immagini su uno spazio di archiviazione persistente come Object Storage oppure di creare un cluster separato e autonomo di registri di container (OCR) su Red Hat OpenShift. Per ulteriori informazioni, consulta la Red Hat OpenShift documentazione.
- Cluster VPC
- Il registro interno del tuo cluster Red Hat OpenShift esegue il backup delle tue immagini in un bucket creato automaticamente in un'istanza IBM Cloud Object Storage del tuo account. Tutti i dati archiviati nel bucket di archiviazione oggetti rimangono anche se elimini il cluster. Una volta creato il cluster, non è possibile rimuovere o scollegare il bucket IBM Cloud Object Storage dal cluster. Se si intende creare un cluster senza un registro interno basato su COS, ad esempio per gli ambienti Financial Services Cloud di IBM, è necessario omettere l'istanza COS al momento della creazione del cluster. Per ulteriori informazioni, consulta la guida " Creazione di un cluster VPC senza un bucket di Object Storage ".
- Cluster Classic, VPC o Satellite
- Facoltativamente, puoi scegliere di configurare il registro interno per archiviare i dati nel
emptyDirdel nodo di lavoro in cui viene eseguito il pod del registro interno. Tieni presente che questi dati non sono persistenti e se il pod o il nodo di lavoro viene riavviato, i dati archiviati vengono eliminati e non sono recuperabili. Potresti archiviare le immagini localmente inemptyDirper aumentare le prestazioni se crei regolarmente contenitori da immagini di grandi dimensioni.
Eseguire il backup del registro delle immagini interno su IBM Cloud Object Storage
Cloud privato virtuale
Le immagini presenti nel registro interno del cluster di Red Hat OpenShift vengono automaticamente salvate in un bucket di IBM Cloud Object Storage. Tutti i dati archiviati nel bucket di archiviazione oggetti rimangono anche se elimini il cluster.
Tuttavia, se il bucket non viene creato quando crei il tuo cluster, devi creare manualmente un bucket e configurare il cluster in modo che lo utilizzi. Nel frattempo, il registro interno utilizza un volume Kubernetes emptyDir che archivia le tue immagini del contenitore sul disco secondario del tuo nodo di lavoro. I volumi emptyDir non sono considerati come archiviazione persistente altamente disponibile e, se elimini i pod che utilizzano l'immagine,
l'immagine viene eliminata automaticamente.
Per creare manualmente un bucket per il tuo registro interno, vedi Errore di creazione del cluster relativo al bucket Cloud Object Storage.
Configurazione di un bucket COS per il registro del cluster
È possibile configurare manualmente un bucket IBM Cloud Object Storage per il registro immagini interno del cluster. È utile quando è necessario impostare o riconfigurare il backend di archiviazione del registro.
Prima di iniziare
- È necessario disporre di un cluster Red Hat OpenShift on IBM Cloud esistente e di un'istanza IBM Cloud Object Storage.
- Accedi al tuo cluster Red Hat OpenShift.
Configurazione del bucket COS
-
Impostare le variabili d'ambiente per il cluster e l'istanza Object Storage.
export CLUSTER_NAME=<cluster_name> export COS_INSTANCE_ID=<cos_instance_id> export CLUSTER_ID=$(ibmcloud ks cluster get --cluster $CLUSTER_NAME --json | jq -r .id) -
Controllare la configurazione attuale dell'operatore del registro immagini.
oc get configs.imageregistry.operator.openshift.io/cluster -o yaml -
Impostare temporaneamente l'operatore in modalità
Removed. Se il registro è già attivo, disattivarlo per evitare conflitti.oc patch configs.imageregistry.operator.openshift.io/cluster \ --type=merge -p '{"spec":{"managementState":"Removed"}}' -
Verificare se il registro utilizza
emptyDir, il che significa che non è configurato alcun bucket COS.storage: emptyDir: {} managementState: Managed -
Creare un bucket Object Storage per il cluster. Sostituire
<region>con la regione preferita, ad esempious-southoeu-de.RANDOM_SUFFIX=$(LC_ALL=C tr -dc 'a-z0-9' </dev/urandom | head -c 6) COS_BUCKET_NAME="roks-${CLUSTER_ID}-${RANDOM_SUFFIX}" ibmcloud cos bucket-create \ --bucket "$COS_BUCKET_NAME" \ --ibm-service-instance-id "$COS_INSTANCE_ID" \ --class standard \ --region <region> -
Rimuovere il campo
emptyDirdalla configurazione del registro.oc patch configs.imageregistry.operator.openshift.io/cluster \ --type=json \ -p '[{"op": "remove", "path": "/spec/storage/emptyDir"}]' -
Configurare il registro per utilizzare l'archiviazione S3 ( Object Storage ). Aggiornare i valori
regioneregionEndpointin modo che corrispondano alla regione del secchio.oc patch configs.imageregistry.operator.openshift.io/cluster --type=merge -p "$(cat <<EOF { "spec": { "managementState": "Unmanaged", "storage": { "s3": { "bucket": "$COS_BUCKET_NAME", "region": "<region>-standard", "regionEndpoint": "https://s3.direct.<region>.cloud-object-storage.appdomain.cloud", "trustedCA": { "name": "" }, "virtualHostedStyle": false } } } } EOF )"Ad esempio, se il secchio si trova in
eu-de, utilizzareregion: "eu-de-standard"eregionEndpoint: "https://s3.direct.eu-de.cloud-object-storage.appdomain.cloud". -
Verificare la configurazione dell'operatore del registro immagini.
oc get configs.imageregistry.operator.openshift.io/cluster -o yaml -
Creare una chiave credenziale di servizio per l'istanza COS ed estrarre le credenziali HMAC.
ibmcloud resource service-key-create roks-$CLUSTER_ID-key \ --instance-id "$COS_INSTANCE_ID" \ -p '{"HMAC": true}' \ -o json > service-key.json # Extract values with jq ACCESS_KEY=$(jq -r '.credentials.cos_hmac_keys.access_key_id' service-key.json) SECRET_KEY=$(jq -r '.credentials.cos_hmac_keys.secret_access_key' service-key.json) # Create credentials file cat <<EOF > creds.txt [default] aws_access_key_id = $ACCESS_KEY aws_secret_access_key = $SECRET_KEY EOFQuesto crea un file
creds.txtcon le credenziali Object Storage.Esempio di file di credenziali
[default] aws_access_key_id = f1ab5fcf7XXXXXXXXXb2a14e046 aws_secret_access_key = 4c78ddfa763XXXXXXX23d1cc9350d1 -
Creare il segreto
image-registry-private-configuration-userse non esiste.oc create secret generic image-registry-private-configuration-user -n openshift-image-registry -
Aggiornare il segreto con le credenziali di accesso.
oc patch secret image-registry-private-configuration-user \ -n openshift-image-registry \ --type merge \ -p "{ \"data\": { \"REGISTRY_STORAGE_S3_ACCESSKEY\": \"$(echo -n "$ACCESS_KEY" | base64)\", \"REGISTRY_STORAGE_S3_SECRETKEY\": \"$(echo -n "$SECRET_KEY" | base64)\" } }" -
Creare il segreto
image-registry-private-configurationse non esiste.oc create secret generic image-registry-private-configuration -n openshift-image-registry -
Aggiornare il segreto del registro dell'immagine principale con il file completo delle credenziali di Object Storage.
CREDENTIALS_B64=$(base64 -i creds.txt | tr -d '\n') oc patch secret image-registry-private-configuration \ -n openshift-image-registry \ --type merge \ -p "{\"data\": {\"credentials\": \"${CREDENTIALS_B64}\"}}" -
Impostare l'operatore del registro immagini sulla modalità
Managed.oc patch configs.imageregistry.operator.openshift.io/cluster \ --type=merge -p '{"spec":{"managementState":"Managed"}}' -
Riavviare la distribuzione del registro immagini.
oc rollout restart deployment image-registry -n openshift-image-registry -
Verificare che il registro sia in uno stato sano.
oc get clusteroperator image-registry
Risoluzione dei problemi di configurazione del registro COS
Se si verificano problemi con la configurazione del registro di Object Storage, provare a eseguire le seguenti operazioni di risoluzione dei problemi.
-
Verificare che il pod “
image-registry” sia in esecuzione.oc project openshift-image-registry oc get podsOutput di esempio
NAME READY STATUS RESTARTS AGE image-registry-7d8b57c98f-m92t7 1/1 Running 0 3h53m node-ca-62p88 1/1 Running 0 5h12m node-ca-6s8vx 1/1 Running 0 5h17m node-ca-b5jwl 1/1 Running 0 4h56m node-ca-chl7k 1/1 Running 0 5h17m node-ca-l6tlb 1/1 Running 0 4h55m node-ca-q4vw8 1/1 Running 0 4h55m -
Controllare lo stato dell'operatore del cluster
image-registry.oc describe clusteroperator image-registry -
Se necessario, rimuovere temporaneamente la configurazione del backend S3 e tornare a
emptyDirper sbloccare l'operatore.oc patch configs.imageregistry.operator.openshift.io/cluster --type=merge -p '{ "spec": { "managementState": "Managed", "storage": { "emptyDir": {} } } }' -
Controllare i pod nello spazio dei nomi
openshift-image-registry.oc get pods -n openshift-image-registry -
Controllare le variabili di ambiente della configurazione distribuita.
oc get pod -n openshift-image-registry -l docker-registry=default -o jsonpath='{.items[0].spec.containers[0].env}' | jq
Per ulteriori informazioni sulla configurazione del registro, vedere Impostazione e configurazione del registro.
Archiviazione di immagini nel registro interno nei cluster Classic
Per impostazione predefinita, il registro interno del cluster di Red Hat OpenShift utilizza un IBM Cloud File Storage for Classic volume per archiviare le immagini del registro. Puoi rivedere la dimensione predefinita del volume di archiviazione o aggiornare la dimensione del volume.
Visualizzazione dei dettagli del volume
Per visualizzare i dettagli del volume, tra cui la classe di archiviazione e la dimensione, puoi descrivere l'attestazione del volume persistente.
oc describe pvc -n openshift-image-registry image-registry-storage
Modifica dei dettagli del volume
Se il tuo registro richiede ulteriori gigabyte di archiviazione per le tue immagini, puoi ridimensionare il volume di archiviazione file. Per ulteriori informazioni, vedi Modifica della dimensione e dell'IOPS del tuo dispositivo di archiviazione esistente.
Quando ridimensioni il volume nel tuo account dell'infrastruttura IBM Cloud, la descrizione allegata della PVC non viene aggiornata. In alternativa, puoi accedere al pod " openshift-image-registry ", che utilizza
il PVC " registry-backing ", per verificare che il volume sia stato ridimensionato.
Archiviazione di immagini nella directory vuota del nodo di lavoro
Potresti archiviare le immagini del registro interno localmente nel emptyDir del nodo di lavoro, come ad esempio un nodo di lavoro bare metal, per aumentare le prestazioni se crei regolarmente contenitori da immagini di grandi
dimensioni.
Tieni presente che questi dati non sono persistenti e se il pod o il nodo di lavoro viene riavviato, i dati archiviati vengono eliminati e non sono recuperabili.
-
Aggiorna la mappa di configurazione dell'operatore del registro delle immagini per impostare l'archiviazione per utilizzare il
emptyDirdel nodo di lavoro. Nota che l'aggiornamento della mappa di configurazione per utilizzareemptyDirnon rimuove la PVC originale del registro delle immagini.oc patch configs.imageregistry.operator.openshift.io/cluster --type merge --patch '{"spec":{"storage":{"emptyDir":{}}}}' -
Se lo stato di gestione dell'operatore del registro delle immagini è impostato su
Unmanaged, come nei cluster Satellite, aggiorna lo stato di gestione aManaged. Ora, l'operatore aggiorna il pod del registro interno.oc patch configs.imageregistry.operator.openshift.io/cluster --type merge -p '{"spec":{"managementState":"Managed"}}' -
Ottieni i dettagli del pod del Registro di sistema interno in modo da poter verificare i tuoi aggiornamenti.
- Controlla che il pod
image-registrysia in esecuzione e che un pod venga eseguito per nodo di lavoro nel cluster.
oc get pods -n openshift-image-registry ``` Output di esempio ```sh {: screen} NAME READY STATUS RESTARTS AGE cluster-image-registry-operator-695bf78ffc-zvkhd 2/2 Running 0 33m image-registry-6774598589-65cnx 1/1 Running 0 112s node-ca-gg66r 1/1 Running 0 113s node-ca-n8jpq 1/1 Running 0 113s node-ca-p2d7j 1/1 Running 0 113s ``` 1. Ottieni l'indirizzo IP pubblico del nodo **Node** su cui viene eseguito il pod `image-registry`. ```sh {: pre} oc describe pod -n openshift-image-registry <image-registry-pod> | grep Node ``` Output di esempio ```sh {: screen} Node: 169.xx.xxx.xxx/169.xx.xxx.xxx ``` Se l'indirizzo IP del nodo di lavoro è privato, esegui `ibmcloud oc worker ls -c <cluster> | grep <private_IP>` e prendi nota dell'indirizzo IP pubblico corrispondente. {: tip} 1. Ottieni l'**UID** del pod `image-registry` nella sezione `metadata.uid` nell'YAML del pod (non l'UID della serie di copie nella sezione `metadata.ownerReferences.uid` ). ```sh {: pre} oc get pod -n openshift-image-registry <image-registry-pod> -o yaml ``` Output di esempio ```yaml {: screen} apiVersion: v1 kind: Pod metadata: uid: e8d7718d-b0bd-47e2-9aaa-05f3a608fd9b ... ``` - Controlla che il pod
-
Verifica che il registro interno memorizzi i dati nel
emptyDirdel nodo di lavoro.-
Accedi al registro direttamente dal cluster, utilizzando il nodo di lavoro che hai precedentemente richiamato. Seguire la procedura per eseguire il push di un'immagine di test al registro interno.
Per completare questi passaggi nella Red Hat OpenShift documentazione, è necessario lo strumento
podmanCLI. I tuoi nodi di lavoro potrebbero non avere questo strumento CLI per impostazione predefinita. Consulta la guida Podman all'installazione per conoscere le versioni RHEL disponibili. -
Passa alla cartella del pod del registro interno che salva in
emptyDir. Per<pod_uid>, utilizza il pod UID che hai richiamato in precedenza.
cd var/lib/kubelet/pods/<pod_uid>/volumes/kubernetes.io~empty-dir/registry-storage/docker/registry/v2/repositories/openshift ``` 1. Verificare che la propria immagine si trovi nella directory del repository. ```sh {: pre} ls ``` Output di esempio ```sh {: screen} <myimage> nginx ... ``` -
Rimozione del registro immagini interno
Cloud privato virtuale
Le implementazioni dell'operatore del registro immagini sono presenti solo nei cluster gestiti dal Red Hat OpenShift on IBM Cloud Toolkit. HyperShift I cluster gestiti eseguono l'operatore del registro delle immagini nel piano di controllo.
Se non vuoi utilizzare il registro delle immagini interno, puoi completare la seguente procedura per rimuoverlo.
- Salvare una copia delle configurazioni del registro interno.
oc get configs.imageregistry.operator.openshift.io cluster -o yaml > configs.yaml - Eseguire il seguente comando di patch per modificare lo stato di gestione del registro immagini in
Removed.kubectl patch configs.imageregistry.operator.openshift.io cluster -p '{"spec":{"managementState":"Removed"}}' --type='merge' - Dopo aver modificato lo stato di gestione, il servizio del registro delle immagini e la distribuzione vengono rimossi dallo spazio dei nomi
openshift-image-registrynel cluster. Puoi eseguire i seguenti comandi per verificare che siano stati rimossi. Notare che vengono rimossi solo il servizio e la distribuzione del Registro immagini. Il servizio e la distribuzione dell'operatore del registro immagini rimangono.oc get deployment -n openshift-image-registryoc get svc -n openshift-image-registry
Configurazione di un instradamento esterno sicuro per il registro interno
Per impostazione predefinita, il cluster di Red Hat OpenShift dispone di un registro interno accessibile tramite un servizio con un indirizzo IP interno. Se vuoi rendere disponibile il registro interno sulla rete pubblica, puoi configurare un instradamento di ricrittografia sicuro. Ad esempio, potresti configurare il registro interno del tuo cluster in modo che funga da registro pubblico per le distribuzioni in altri progetti o cluster.
Prima di cominciare:
- Conferma di avere il Ruolo di accesso del servizio Responsabile IBM Cloud IAM per il cluster.
- Assicurati che il tuo cluster disponga di connettività di rete pubblica per esporre il registro interno con un instradamento pubblico.
- Installa Docker sulla tua macchina locale.
- Accedi al tuo cluster Red Hat OpenShift.
Per utilizzare il registro interno, configura un instradamento pubblico per accedere al registro. Quindi, crea un segreto di pull dell'immagine che include le credenziali per accedere al registro in modo che le distribuzioni in altri progetti possano eseguire il pull di immagini da questo registro.
-
Dal progetto
openshift-image-registry, assicurati che il servizioimage-registryesista per il registro interno.oc get svc -n openshift-image-registryOutput di esempio
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE image-registry ClusterIP 172.21.xxx.xxx <none> 5000/TCP 36d image-registry-operator ClusterIP None <none> 60000/TCP 36d -
Crea un instradamento protetto per il servizio
image-registryche utilizzi la terminazione TLSreencrypt. Con la riesecuzione della crittografia, il router termina la connessione TLS con un certificato, quindi crittografa nuovamente la connessione al registro interno con un certificato diverso. Con questo approccio, viene crittografato il percorso completo della connessione tra l'utente e il registro interno. Per utilizzare un nome di dominio personalizzato, includi l'opzione--hostname.oc create route reencrypt --service=image-registry -n openshift-image-registry -
Richiama il nome host (HOST/PORT) e la porta (PORT) che erano stati assegnati all'instradamento
image-registry.oc get route image-registry -n openshift-image-registryOutput di esempio
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD image-registry image-registry-openshift-image-registry.<cluster_name>-<ID_string>.<region>.containers.appdomain.cloud image-registry 5000-tcp reencrypt None -
Modifica la route per impostare la strategia di bilanciamento del carico su "
source", in modo che lo stesso indirizzo IP del client raggiunga sempre lo stesso server, come in una configurazione di route di tipo "passthrough". Puoi impostare la strategia aggiungendo un'annotazione nella sezionemetadata.annotations:haproxy.router.openshift.io/balance: source. È possibile modificare il file di configurazione dalla console dell'applicazione Red Hat OpenShift oppure dalla riga di comando eseguendo il seguente comando.oc edit route image-registry -n openshift-image-registryAggiungere l'annotazione.
apiVersion: route.openshift.io/v1 kind: Route metadata: annotations: haproxy.router.openshift.io/balance: source ... -
Se le politiche di rete aziendali impediscono l'accesso dal tuo sistema locale agli endpoint pubblici tramite proxy o firewall, consenti l'accesso al dominio secondario di instradamento che crei per il registro interno nei seguenti passi.
-
Accedi al registro interno utilizzando l'instradamento come nome host.
docker login -u $(oc whoami) -p $(oc whoami -t) image-registry-openshift-image-registry.<cluster_name>-<ID_string>.<region>.containers.appdomain.cloud -
Ora che hai effettuato l'accesso, prova ad eseguire il push di un'applicazione
hello-worlddi esempio nel registro interno.- Esegui il pull dell'immagine
hello-worldda DockerHub o crea un'immagine sulla tua macchina locale.
docker pull hello-world ``` 1. Contrassegna l'immagine locale con il nome host del tuo registro interno, il progetto in cui vuoi distribuire l'immagine, il nome e la tag dell'immagine. ```sh {: pre} docker tag hello-world:latest image-registry-openshift-image-registry.<cluster_name>-<ID_string>.<region>.containers.appdomain.cloud/<project>/<image_name>:<tag> ``` 1. Esegui il push dell'immagine nel registro interno del tuo cluster. ```sh {: pre} docker push image-registry-openshift-image-registry.<cluster_name>-<ID_string>.<region>.containers.appdomain.cloud/<project>/<image_name>:<tag> ``` 4. Verificare che l'immagine sia stata aggiunta allo stream di immagini di Red Hat OpenShift. ```sh {: pre} oc get imagestream ``` Output di esempio ```sh {: screen} NAME DOCKER REPO TAGS UPDATED hello-world image-registry-openshift-image-registry.svc:5000/default/hello-world latest 7 hours ago ``` - Esegui il pull dell'immagine
-
Per consentire alle distribuzioni nel tuo progetto di eseguire il pull delle immagini dal registro interno, crea un segreto di pull dell'immagine nel progetto che contenga le credenziali per accedere al tuo registro interno. Quindi, aggiungi il segreto di pull dell'immagine all'account di servizio predefinito per ogni progetto.
- Elenca i segreti di pull dell'immagine utilizzati dall'account di servizio predefinito e prendi nota del segreto che inizia con
default-dockercfg.
oc describe sa default ``` Output di esempio ```sh {: screen} ... Image pull secrets: all-icr-io default-dockercfg-mpcn4 ... ``` 1. Ottieni le informazioni del segreto codificate dal campo `data` del file di configurazione. ```sh {: pre} oc get secret <default-dockercfg-name> -o yaml ``` Output di esempio ```yaml {: screen} apiVersion: v1 data: .dockercfg: ey...= ``` 1. Decodifica il valore del campo `data`. ```sh {: pre} echo "<ey...=>" | base64 -D ``` Output di esempio ```sh {: screen} {"172.21.xxx.xxx:5000":{"username":"serviceaccount","password":"eyJ... ``` 4. Crea un nuovo segreto di pull dell'immagine per il registro interno. - `secret_name`: Assegna un nome al tuo segreto di estrazione delle immagini, ad esempio `internal-registry`. - `--namespace`: Accedi al progetto in cui desideri creare il segreto per il pull dell'immagine, ad esempio `default`. - `--docker-server`: Anziché l'indirizzo IP interno del servizio (`172.21.xxx.xxx:5000`), inserisci il nome host della route `image-registry` con la porta (`image-registry-openshift-image-registry.<cluster_name>-<ID_string>.<region>.containers.appdomain.cloud:5000`). - `--docker-username`: Copia l' `"username"` e dal pull secret dell'immagine precedente, ad esempio `serviceaccount`. - `--docker-password`: Copia l' `"password"` e dal pull secret dell'immagine precedente. - `--docker-email`: Se ne possiedi uno, inserisci 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. ```sh {: pre} oc create secret docker-registry internal-registry --namespace default --docker-server image-registry-openshift-image-registry.<cluster_name>-<ID_string>.<region>.containers.appdomain.cloud:5000 --docker-username serviceaccount --docker-password <eyJ...> --docker-email a@b.c ``` 5. Aggiungi il segreto di pull dell'immagine all'account di servizio predefinito del tuo progetto. ```sh {: pre} oc patch -n <namespace_name> serviceaccount/default --type='json' -p='[{"op":"add","path":"/imagePullSecrets/-","value":{"name":"<image_pull_secret_name>"}}]' ``` 6. Ripeti questi passi per ogni progetto per cui vuoi eseguire il pull di immagini dal registro interno. - Elenca i segreti di pull dell'immagine utilizzati dall'account di servizio predefinito e prendi nota del segreto che inizia con
Ora che hai configurato il registro interno con una rotta accessibile, puoi accedere, eseguire il push e il pull delle immagini per il registro. Per ulteriori informazioni, vedi la documentazione diRed Hat OpenShift.
Importazioni delle immagini da IBM Cloud Container Registry nel flusso di immagini del registro interno
Per impostazione predefinita, il Red Hat OpenShift on IBM Cloud cluster è configurato per estrarre le immagini dai domini IBM Cloud Container Registryicr.io privati remoti nel default progetto. È possibile importare
un'immagine da IBM Cloud Container Registry nel registro interno del proprio cluster Red Hat OpenShift, contrassegnando l'immagine come flusso di immagini. Con questa configurazione, puoi distribuire le applicazioni dall'immagine utilizzando la cache locale del registro interno, che consente di sviluppare più rapidamente le tue distribuzioni
di applicazioni. Inoltre, le distribuzioni in altri progetti possono fare riferimento allo stream di immagini, in modo da non dover creare credenziali segrete per il pull delle immagini da IBM Cloud Container Registry in ogni singolo progetto.
Se aggiorni l'immagine su IBM Cloud Container Registry, questa non viene importata automaticamente nel registro interno del tuo cluster Red Hat OpenShift. In alternativa, configura l'importazione periodica oppure ripeti questi passaggi per taggare l'immagine. A seconda della politica di pull dell'immagine che utilizzi nella tua distribuzione, potresti anche dover riavviare la distribuzione.
Vuoi saperne di più su come le build, i flussi di immagini e il registro interno funzionano insieme? Leggi la Red Hat OpenShift documentazione o dai un'occhiata a questo blog sulla gestione delle immagini dei container.
-
Passa al progetto
defaultper eseguire il pull della tua immagine nel flusso di immagini. Il progettodefaultè già configurato con le credenziali per accedere ai registriicr.io.oc project default -
Elenca le immagini disponibili nel tuo IBM Cloud Container Registry. Prendi nota del repository e del tag dell'immagine che desideri importare nel registro interno del tuo cluster Red Hat OpenShift.
ibmcloud cr images -
Per eseguirne il pull dell'immagine dal tuo spazio dei nomi IBM Cloud Container Registry nel registro interno, contrassegna l'immagine come flusso di immagini. Per ulteriori informazioni, consultare la documentazione di Red Hat OpenShift o eseguire
oc tag --help.oc tag <region>.icr.io/<namespace>/<image>:<tag> default/<image>:<tag> --reference-policy=local [--scheduled]<region>.icr.io/<namespace>/<image>:<tag>: Utilizza le informazioni relative al repository e al tag che hai recuperato in precedenza per compilare i campi “ IBM Cloud Container Registry ” (regione), “namespace”, “image” e “tag name” dell’immagine che desideri scaricare.default/<image>:<tag>: Inserisci le informazioni relative allo stream di immagini interno creato a partire dall'immagine con tag " IBM Cloud Container Registry ". Questo flusso di immagini va creato nel progetto "default", che è anche il progetto in cui viene creato il flusso di immagini se non si specifica alcun progetto. I valori di<image>:<tag>corrispondono in genere a quelli recuperati in precedenza.--reference-policy=local: Impostare questo valore sulocalin modo che una copia dell'immagine presente all'indirizzo IBM Cloud Container Registry venga importata nella cache locale del registro interno e resa disponibile ai progetti del cluster come flusso di immagini. Se non si include questo valore, lo stream di immagini rimanda a IBM Cloud Container Registry quando lo si utilizza nelle proprie distribuzioni e, di conseguenza, richiede le credenziali del progetto.--scheduled: Attivare questa opzione facoltativa per configurare l'importazione periodica dell'immagine da IBM Cloud Container Registry nel registro interno. La frequenza predefinita è di 15 minuti. Per ulteriori informazioni, vedi la documentazione diRed Hat OpenShift.
-
Verifica che il tuo flusso di immagini sia stato creato.
oc get imagestreams -
Verifica che il flusso di immagini abbia eseguito correttamente il pull dell'immagine da IBM Cloud Container Registry. Nell'output, verifica che l'immagine con il tag più recente corrisponda alla tua immagine "
* <region>.icr.io/<namespace>/<image>@<digest>".oc describe is/<imagestream>Output di esempio
NAME: <imagestream> Namespace: default Created: 2 days ago Labels: <none> Annotations: openshift.io/image.dockerRepositoryCheck=2020-03-31T09:41:36Z Image Repository: image-registry.openshift-image-registry.svc:5000/default/ant1 Image Lookup: local=false Unique Images: 1 Tags: 1 latest tagged from <region>.icr.io/<namespace>/<image>:<tag> * <region>.icr.io/<namespace>/<image>@<digest> 2 days ago
Ora, i tuoi sviluppatori possono utilizzare il flusso di immagini in una distribuzione dell'applicazione. L'immagine viene creata correttamente dall'immagine estratta localmente nel registro interno. Non è necessario configurare un segreto per il recupero delle immagini nel progetto su IBM Cloud Container Registry, poiché lo stream delle immagini è locale al cluster.
Configurazione delle build nel registro interno per eseguire il push delle immagini a IBM Cloud Container Registry
Quando crei una build nel tuo Red Hat OpenShift on IBM Cloud cluster,
puoi configurare il registro interno per trasferire l'immagine al tuo repository esterno in IBM Cloud Container Registry. Per impostazione predefinita, il segreto di pull dell'immagine nel progetto default del tuo cluster dispone solo dell'accesso in lettura per eseguire il pull delle immagini da IBM Cloud Container
Registry. Per eseguire il push delle immagini, devi aggiungere un segreto con l'accesso in scrittura.
-
Passa al progetto
default.oc project default -
Segui la procedura per configurare una chiave API IBM Cloud IAM con il ruoli di accesso al servizio
ReadereWriterper eseguire il pull e il push delle immagini sui tuoi registriicr.io.Tieni presente che qualsiasi utente con accesso al progetto può utilizzare questo segreto per eseguire il push delle immagini al tuo registro privato. Potresti voler configurare gli strumenti di registrazione e monitoraggio in modo da poter osservare chi effettua determinate azioni nel tuo cluster.
-
Ripeti il passo precedente per ogni regione
icr.ioin cui vuoi eseguire il push delle immagini. -
Aggiungi il segreto all'account del servizio di build e fai riferimento ai segreti nel file di configurazione della build. Per ulteriori informazioni, vedi la documentazione diRed Hat OpenShift.
- Aggiungi il segreto all'account del servizio di build collegando il segreto che hai appena creato al ruolo
builderutilizzato da tutte le build nel cluster.
oc secrets link builder <secret_name> ``` 1. Elenca le configurazioni di build e prendi nota di quelle a cui desideri fornire l'accesso di push e pull a IBM Cloud Container Registry. ```sh {: pre} oc get bc ``` 1. Imposta il segreto di push dell'immagine in modo che la configurazione di build utilizzi il segreto che hai appena creato con l'accesso al servizio `Writer` a IBM Cloud Container Registry. ```sh {: pre} oc set build-secret --push bc/<build_config_name> <secret_name> ``` 4. Imposta il segreto di pull dell'immagine in modo che la configurazione di build esegua il pull dal registro da cui desideri estrarre l'immagine di build iniziale. Ad esempio, puoi utilizzare il segreto che hai appena creato con l'accesso al servizio `Reader` a IBM Cloud Container Registry se l'immagine di origine si trova in un repository IBM Cloud Container Registry. ```sh {: pre} oc set build-secret --pull bc/<build_config_name> <secret_name> ``` - Aggiungi il segreto all'account del servizio di build collegando il segreto che hai appena creato al ruolo
-
Dopo aver aggiornato l'account del servizio di build e il file di configurazione della build per il push a IBM Cloud Container Registry, riavvia la tua build.
oc start-build <build_name> -
Recupera il nome del tuo pod di compilazione, ad esempio
<build>-2-build.oc get pods -
Controlla i log della build e nota dove è stato eseguito il push dell'immagine.
oc logs <build_pod>Esempio di un log di invio immagini andato a buon fine.
... Successfully pushed <region>.icr.io/<namespace>/<build_name>@sha256:<hash> Push successful -
Controlla le tue immagini nel registro privato per confermare che l'immagine è stata creata.
ibmcloud cr image listOutput di esempio
Repository Tag Digest Namespace Created Size Security status <region>.icr.io/<namespace>/<build_name> latest <digest> <namespace> 2 minutes ago 182 MB 33 Issues
La tua build di Red Hat OpenShift ora può scaricare e caricare immagini da IBM Cloud Container Registry.
Utilizzo di IBM Cloud Container Registry
Per impostazione predefinita, il Red Hat OpenShift on IBM Cloud cluster è configurato per estrarre le immagini dai domini IBM Cloud Container Registryicr.io privati remoti nel default progetto. Se vuoi utilizzare le
immagini archiviate in IBM Cloud Container Registry per altri progetti, puoi eseguire il pull dell'immagine al registro interno in un flusso di immagini o puoi creare i segreti di pull dell'immagine per ogni registro globale e regionale in
ciascun progetto.
Per importare le immagini nel registro interno: vedi Importazioni delle immagini da IBM Cloud Container Registry nel flusso di immagini del registro interno.
Per eseguire il pull di immagini direttamente da IBM Cloud Container Registry esterno: vedi i seguenti argomenti.
- Descrizione di come autorizzare il tuo cluster ad eseguire il pull delle immagini da un registro.
- Copia del segreto
all-icr-iodal progettodefaultal progetto da cui vuoi eseguire il pull delle immagini. - Creazione del tuo segreto di pull dell'immagine.
- Aggiunta del segreto di pull dell'immagine alla tua configurazione di distribuzione o all'account di servizio del progetto.
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 Red Hat OpenShift on IBM Cloud 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 cluster è configurato per recuperare le immagini esclusivamente dai namespace del proprio account su IBM Cloud Container Registry e per distribuire i container basati su tali immagini nel progetto default Red Hat OpenShift all'interno del proprio cluster. Se hai bisogno di eseguire il pull di immagini in altri progetti 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 cluster di Red Hat OpenShift on IBM Cloud è configurato per recuperare le immagini da tutti i domini IBM Cloud Container Registry e icr.io esclusivamente dal progetto default e Red Hat OpenShift. Consulta
le seguenti domande frequenti per saperne di più su come scaricare immagini da altri progetti o account Red Hat OpenShift, 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 scaricare le immagini dal progetto
defaultRed Hat OpenShift? - 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 per il download delle immagini vengono aggiunti al namespace
defaultKubernetes e all'elenco dei segreti nell'account di serviziodefaultper questo progetto Red Hat OpenShift. Utilizzando i secret per il recupero delle immagini, le tue distribuzioni possono recuperare immagini (accesso in sola lettura) dall'globale e regionale IBM Cloud Container Registry per distribuire container nel progettodefaultRed Hat OpenShift.
- 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.
- Cosa succede se nel progetto
defaultRed Hat OpenShift non sono presenti i secret per il download delle immagini? - Puoi controllare i segreti di pull dell'immagine accedendo al tuo cluster ed eseguendo
oc get secrets -n default | grep "icr-io". Se non è elencato alcun segretoicr, 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.
Vuoi rendere ancora più sicure le credenziali del tuo registro? Chiedi all'amministratore del cluster di abilitare un provider di servizi di gestione delle chiavi nel cluster per crittografare Kubernetes i segreti nel cluster, come il segreto di pull dell'immagine che memorizza le credenziali del registro.
- Posso importare immagini in un progetto Red Hat OpenShift diverse da quelle presenti su
default? - Non per impostazione predefinita. Utilizzando la configurazione predefinita del cluster, è possibile distribuire container da qualsiasi immagine archiviata nel namespace IBM Cloud Container Registry nel progetto
defaultRed Hat OpenShift del proprio cluster. Per utilizzare queste immagini in qualsiasi altro progetto Red Hat OpenShift o in altri account IBM Cloud, è possibile copiare o creare i propri secret per il pull delle immagini. - Posso importare immagini da un altro account IBM Cloud?
- Sì, crea una chiave API nell'account IBM Cloud che desideri utilizzare. Quindi, in ogni progetto 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, Red Hat OpenShift on IBM Cloud creava dei segreti di pull dell'immagine separati per ciascun dominio di registro
icr.iopubblico e regionale. Ora, tutti i domini pubblici e privati del registroicr.ioper tutte le regioni sono memorizzati in un unico segreto di pull dell'immagineall-icr-io, creato automaticamente nel progettodefaultKubernetes del proprio cluster.
Per i carichi di lavoro 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 tale progetto
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 progetto su Red Hat OpenShift, 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 ?
- 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. - 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 hai bisogno di abilitare l'endpoint del servizio cloud privato per i cluster Red Hat OpenShift on IBM Cloud.
Aggiornamento dei cluster esistenti per utilizzare il segreto di pull dell'immagine della chiave API
I nuovi cluster Red Hat OpenShift on IBM Cloud 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.
Prima di iniziare
-
Assicurati di disporre delle seguenti autorizzazioni: ruolo di accesso della piattaforma IBM Cloud IAM Operatore o amministratore per Red Hat OpenShift on IBM Cloud. 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" -
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 -
Se il tuo account limita la creazione dell'ID servizio, aggiungi il ruolo Service ID creator a Identity and Access Management nella console (
iam-identitynell'API o nella CLI). -
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-identitynell'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.
-
Ottieni il tuo ID cluster.
ibmcloud oc cluster ls -
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 per il download delle immagini si trova nel progetto
defaultRed Hat OpenShift.ibmcloud oc cluster pull-secret apply --cluster CLUSTER_NAME_OR_IDQuando 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.iofinché non vengono creati i segreti per il download delle immagini. -
Verifica che i segreti di pull dell'immagine siano stati creati nel tuo cluster.
oc get secrets | grep icr-ioOutput di esempio
all-icr-io kubernetes.io/dockerconfigjson 1 16d -
Aggiorna le tue distribuzioni del contenitore per eseguire il pull delle immagini dal nome di dominio
icr.io. -
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.
-
Completare la configurazione utilizzando una delle seguenti opzioni.
- Per importare immagini in progetti Red Hat OpenShift diversi da
defaulto da altri account IBM Cloud, copia o crea un altro secret di importazione immagini. - Per limitare l'accesso del segreto di pull dell'immagine a determinate risorse del registro come spazi dei nomi o regioni:
- Assicurati che le politiche IBM Cloud IAM per IBM Cloud Container Registry siano abilitate.
- Modifica le politiche IBM Cloud IAM per l'ID del servizio o crea un altro segreto di pull dell'immagine.
- Per importare immagini in progetti Red Hat OpenShift diversi da
Utilizzo di un "image pull secret" per accedere alle immagini presenti in registri privati esterni
Configura il tuo secret per il recupero delle immagini nel tuo cluster per distribuire container in progetti Red Hat OpenShift diversi da default, utilizzare immagini archiviate in altri account IBM Cloud oppure utilizzare 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 il progetto oppure fare riferimento al segreto in ciascuna distribuzione. Per le istruzioni, vedi Utilizzo del segreto di pull dell'immagine per la distribuzione dei contenitori.
Le chiavi segrete per il download delle immagini sono valide solo per i progetti Red Hat OpenShift per i quali sono state create. Ripeti questa procedura per ogni spazio dei nomi in cui vuoi distribuire i contenitori.
Prima di cominciare:
- Configura uno spazio dei nomi in IBM Cloud Container Registry e inserisci le immagini in questo spazio dei nomi.
- Crea un cluster.
- Accedi al tuo cluster Red Hat OpenShift.
Per utilizzare il tuo proprio segreto di pull dell'immagine, scegli tra le seguenti opzioni:
- Copia il segreto di recupero delle immagini dal progetto predefinito " Red Hat OpenShift " agli altri progetti del tuo cluster.
- Crea nuove credenziali della chiave API IAM e archiviale in un segreto di pull dell'immagine per accedere alle immagini in altri account IBM Cloud o applicare le politiche IAM che limitano l'accesso a determinati domini di registro o spazi dei nomi.
- Crea un segreto di pull dell'immagine per accedere alle immagini in registri privati esterni.
Se nel tuo progetto 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
È possibile copiare un segreto di pull dell'immagine, come quello creato automaticamente per il progetto default Red Hat OpenShift, in altri progetti del proprio cluster. Se desideri utilizzare credenziali delle chiavi API IBM
Cloud IAM differenti per questo progetto, ad esempio per limitare l'accesso a specifici progetti o eseguire il pull delle immagini da altri account IBM Cloud, crea invece un segreto di pull dell'immagine.
-
Elenca i progetti Red Hat OpenShift disponibili nel tuo cluster oppure crea un progetto da utilizzare.
oc get projectsOutput di esempio
default Active ibm-cert-store Active ibm-system Active kube-public Active kube-system ActivePer creare un progetto
oc new-project <project_name> -
Elenca i secret esistenti per il download delle immagini nel progetto "
default" ( Red Hat OpenShift ) per IBM Cloud Container Registry.oc get secrets -n default | grep icr-ioOutput di esempio
all-icr-io kubernetes.io/dockerconfigjson 1 16d -
Copia il segreto di pull dell'immagine
all-icr-iodal progettodefaultal progetto di tua scelta. I nuovi segreti per il download delle immagini sono denominati<project_name>-icr-<region>-io.oc get secret all-icr-io -n default -o yaml | sed 's/default/<new-project>/g' | oc create -n <new-project> -f - -
Verifica che i segreti siano stati creati correttamente.
oc get secrets -n <project_name> | grep icr-io -
Per distribuire i contenitori, aggiungi il segreto di pull dell'immagine a ciascuna distribuzione o all'account di servizio del progetto in modo che qualsiasi distribuzione nel progetto 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 progetto 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.
-
Elenca i progetti Red Hat OpenShift disponibili nel tuo cluster oppure crea un progetto da utilizzare per distribuire i container a partire dalle immagini presenti nel tuo registro.
oc get projectsOutput di esempio
default Active ibm-cert-store Active ibm-system Active kube-public Active kube-system ActivePer creare un progetto
oc new-project <project_name> -
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 del progetto.
ibmcloud iam service-id-create <cluster_name>-<project>-id --description "Service ID for IBM Cloud Container Registry in Red Hat OpenShift on IBM Cloud cluster <cluster_name> project <project>" -
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-registryin 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,WritereManager. --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
globale 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
namespacecome tipo di risorsa e specifica<registry_namespace>. Per elencare gli spazi dei nomi del registro, eseguiibmcloud cr namespaces.
-
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>-<project>-key <cluster_name>-<project>-id --description "API key for service ID <service_id> in Red Hat OpenShift on IBM Cloud cluster <cluster_name> project <project>" -
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 -
Crea un segreto di pull dell'immagine per archiviare le credenziali della chiave API nel progetto del cluster. Ripeti questo passo per ogni progetto di ciascun cluster per ogni dominio
icr.ioda cui vuoi eseguire il pull delle immagini.oc --namespace <project> create secret docker-registry <secret_name> --docker-server=<registry_URL> --docker-username=iamapikey --docker-password=<api_key_value> --docker-email=<docker_email>--namespace <project>- Obbligatorio. Specificare il progetto " Red Hat OpenShift " del proprio 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 Keyche 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.
-
Verifica che il segreto sia stato creato correttamente. Sostituisci
<project>con l'projectin cui hai creato il segreto per il pull dell'immagine.oc get secrets --namespace <project>
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:
Per creare un segreto di pull dell'immagine:
-
Crea il segreto Kubernetes per memorizzare le credenziali del tuo registro privato.
oc --namespace <project> create secret docker-registry <secret_name> --docker-server=<registry_URL> --docker-username=<docker_username> --docker-password=<docker_password> --docker-email=<docker_email>--namespace <project>- Obbligatorio. Il progetto Red Hat OpenShift del cluster in cui si desidera utilizzare il segreto e distribuire i container. Per visualizzare l'elenco dei progetti disponibili nel proprio cluster, eseguire il comando
oc get projects``. <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.
-
Verifica che il segreto sia stato creato correttamente. Sostituisci "
<project>" con il nome del progetto in cui hai creato il segreto per il pull dell'immagine.oc get secrets --namespace <project> -
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 progetto.
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 del tuo progetto per impostazione predefinita. Gli sviluppatori possono includere il segreto di pull dell'immagine in ciascuna distribuzione del pod che deve accedere al tuo registro.
- Memorizzazione della chiave segreta per il recupero delle immagini nell'account di servizio Kubernetes: utilizzare questa opzione per concedere l'accesso alle immagini presenti nel proprio registro a tutte le distribuzioni nei progetti Red Hat OpenShift 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 il progetto selezionato
Ogni progetto Red Hat OpenShift dispone di un account di servizio Kubernetes denominato default. All'interno del progetto, 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 progetto Red Hat OpenShift.
-
Controlla se esiste già un segreto di pull dell'immagine per il tuo account di servizio predefinito.
oc describe serviceaccount default -n <project_name>Quando nella voce " Segreti per il recupero delle immagini " viene visualizzato "
<none>", significa che non esiste alcun segreto per il recupero delle immagini. -
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.
oc patch -n <project_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} oc patch -n <project_name> serviceaccount/default --type='json' -p='[{"op":"add","path":"/imagePullSecrets/-","value":{"name":"<image_pull_secret_name>"}}]' ``` -
Verifica che il tuo segreto di pull dell'immagine sia stato aggiunto al tuo account di servizio predefinito.
oc describe serviceaccount default -n <project_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 progetto del tuo account di servizio eseguendo il comando "oc get secrets -n project". -
Crea un file di configurazione del pod denominato
mypod.yamlper 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/<project>/<image>:<tag> -
Crea il pod nel cluster applicando il file di configurazione
mypod.yaml.oc apply -f mypod.yaml
Configurazione di un cluster per eseguire il pull del software autorizzato
Puoi configurare il tuo cluster Red Hat OpenShift on IBM Cloud 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 progetto in cui vuoi distribuire questo software autorizzato.
Prima di iniziare: accedi al tuo cluster Red Hat OpenShift.
-
Ottieni la chiave di titolarità per la libreria del software autorizzato.
- Accedi al sito MyIBM.com e scorri fino alla sezione " Libreria software Container ". Fai clic su View library.
- 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.
-
Nel progetto 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.oc 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 <project> -
Aggiungi il segreto di pull dell'immagine all'account di servizio dello spazio dei nomi in modo che qualsiasi contenitore nel progetto 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.
oc patch -n <project> serviceaccount/default --type='json' -p='[{"op":"add","path":"/imagePullSecrets/-","value":{"name":"entitled-cp-icr-io"}}]' -
Crea un pod nel progetto che crea un contenitore da un'immagine nel registro autorizzato.
oc run <pod_name> --image=cp.icr.io/<image_name> -n <project> --generator=run-pod/v1 -
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.
oc get pod <pod_name> -n <project>
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.
Aggiunta di un registro privato al segreto di pull globale
Nodi di lavoro RHEL
Nei cluster che utilizzano esclusivamente nodi di lavoro RHEL, è possibile configurare un segreto globale per il download delle immagini che ogni nodo di lavoro del cluster può utilizzare per scaricare immagini da un registro privato.
Per impostazione predefinita, il cluster di Red Hat OpenShift on IBM Cloud dispone di un segreto globale per il download delle immagini dai seguenti registri, in modo da consentire la distribuzione dei componenti predefiniti di Red Hat OpenShift.
cloud.openshift.comquay.ioregistry.connect.redhat.comregistry.redhat.io
Non sostituire il segreto di pull globale con un segreto di pull che non dispone delle credenziali per i registri Red Hat predefiniti. In tal caso, i componenti predefiniti di Red Hat OpenShift installati nel cluster, come ad esempio OperatorHub,, potrebbero non funzionare correttamente poiché non sono in grado di recuperare le immagini da questi registri.
Prima di cominciare:
- Scarica il pacchetto da riga di comando del processore JSON "
jq". Utilizzijqper combinare il valore JSON del segreto di pull globale predefinito con il segreto di pull del registro privato che vuoi aggiungere. - Accedi al tuo cluster Red Hat OpenShift.
Per aggiungere i registri privati, modifica il pull-secret globale nel progetto openshift-config.
-
Crea un valore segreto che contiene le credenziali per accedere al tuo registro privato e archivia il valore segreto decodificato in un file JSON. Quando crei il valore segreto, le credenziali vengono codificate automaticamente in base64. Utilizzando l'opzione
--dry-run, nel tuo cluster viene creato solo il valore segreto e non viene creato alcun oggetto segreto. Il valore segreto decodificato viene quindi archiviato in un file JSON per essere successivamente utilizzato nel tuo segreto di pull globale.oc create secret docker-registry <secret_name> --docker-server=<registry_URL> --docker-username=<docker_username> --docker-password=<docker_password> --docker-email=<docker_email> --dry-run=true --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode > myregistryconfigjson--namespace <project>- Obbligatorio. Il progetto Red Hat OpenShift del cluster in cui si desidera utilizzare il segreto e distribuire i container. Per visualizzare l'elenco dei progetti disponibili nel proprio cluster, eseguire il comando
oc get ns``. <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. --dry-run=true- Selezionare questa opzione per creare solo il valore del segreto, senza creare né memorizzare l'oggetto segreto nel cluster.
--output="jsonpath={.data.\.dockerconfigjson}"- Ottieni solo il valore
.dockerconfigjsondalla sezione dei dati del segreto Kubernetes. | base64 --decode > myregistryconfigjson- Scarica i dati del segreto decodificato in un file
myregistryconfigjsonlocale.
-
Richiama il valore segreto decodificato del segreto di pull globale predefinito e archivia il valore in un file
dockerconfigjson.oc get secret pull-secret -n openshift-config --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode > dockerconfigjson -
Combina il file
myregistryconfigjsondel segreto di pull del registro globale scaricato con il filedockerconfigjsondel segreto di pull globale predefinito.jq -s '.[0] * .[1]' dockerconfigjson myregistryconfigjson > dockerconfigjson-merged -
Aggiorna il segreto di pull globale con il file combinato
dockerconfigjson-merged.oc set data secret/pull-secret -n openshift-config --from-file=.dockerconfigjson=dockerconfigjson-merged -
Verifica che il segreto di pull globale venga aggiornato. Controlla che il tuo registro privato e ciascuno dei registri Red Hat predefiniti siano nell'output del seguente comando.
oc get secret pull-secret -n openshift-config --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decodeOutput di esempio
{ "auths": { "cloud.openshift.com": { "auth": "<encoded_string>", "email": "email@example.com" }, "quay.io": { "auth": "<encoded_string>", "email": "email@example.com" }, "registry.connect.redhat.com": { "auth": "<encoded_string>", "email": "email@example.com" }, "registry.redhat.io": { "auth": "<encoded_string>", "email": "email@example.com" }, "<private_registry>": { "username": "iamapikey", "password": "<encoded_string>", "email": "email@example.com", "auth": "<encoded_string>" } } } -
Per applicare le modifiche alla configurazione globale, ricarica tutti i nodi di lavoro del cluster.
- Prendi nota dell'ID dei nodi di lavoro nel cluster.
ibmcloud oc worker ls -c <cluster_name_or_ID> ``` 1. **Per i cluster classici** Ricarica ogni nodo di lavoro. Puoi ricaricare più nodi di lavoro includendo più opzioni `-w`, ma assicurati di lasciare abbastanza nodi di lavoro in esecuzione contemporaneamente per le tue applicazioni per evitare un'interruzione. ```sh {: pre} ibmcloud oc worker reload -c <cluster_name_or_ID> -w <workerID_1> -w <workerID_2> ``` 1. **Per i cluster VPC** Sostituisci ogni nodo di lavoro. Prima di iniziare, assicurati che il tuo cluster abbia un numero sufficiente di altri nodi di lavoro in modo che i tuoi pod possano essere ripianificati e continuare l'esecuzione. ```sh {: pre} ibmcloud oc worker replace --cluster <cluster_name_or_ID> --worker <worker_node_ID> ``` -
Una volta che i nodi di lavoro sono tornati in uno stato corretto, verificare che il segreto globale di pull sia stato aggiornato su un nodo di lavoro.
- Avvia un pod di debug per accedere a un nodo di lavoro. Utilizza l'indirizzo IP privato che hai recuperato in precedenza per l'
<node_name>.
oc debug node/<node_name> ``` 1. Modifica la directory root sull'host in modo da poter visualizzare i file sul nodo di lavoro. ```sh {: pre} chroot /host ``` 1. Verifica che il file di configurazione Docker abbia le credenziali del registro che corrispondono al segreto di pull globale da te impostato. ```sh {: pre} vi /.docker/config.json ``` - Avvia un pod di debug per accedere a un nodo di lavoro. Utilizza l'indirizzo IP privato che hai recuperato in precedenza per l'
Aggiornamento del segreto globale di pull
Nodi di lavoro RHCOS Nodi di lavoro RHEL
Nei cluster che utilizzano worker RHCOS o una combinazione di worker RHCOS e RHEL, è possibile completare i seguenti passaggi per aggiornare il pull secret globale nel cluster Red Hat OpenShift on IBM Cloud.
Per impostazione predefinita, il cluster di Red Hat OpenShift on IBM Cloud dispone di un segreto globale per il download delle immagini dai seguenti registri, in modo da consentire la distribuzione dei componenti predefiniti di Red Hat OpenShift.
cloud.openshift.comquay.ioregistry.connect.redhat.comregistry.redhat.io
Non sostituire il segreto di pull globale con un segreto di pull che non dispone delle credenziali per i registri Red Hat predefiniti. In tal caso, i componenti predefiniti di Red Hat OpenShift installati nel cluster, come ad esempio OperatorHub,, potrebbero non funzionare correttamente poiché non sono in grado di recuperare le immagini da questi registri.
- Creare un segreto che contenga le credenziali del registro che si desidera utilizzare.
oc create secret docker-registry docker-auth-secret \ --docker-server=REGISTRY \ --docker-username=USERNAME \ --docker-password=PASSWORD \ --namespace kube-system - Creare un DaemonSet per applicare il segreto a tutti i nodi worker.
ocp_release_pull_secret_image=$(oc get ds -n openshift-dns node-resolver -o jsonpath='{.spec.template.spec.containers[0].image}') cat << EOF | oc create -f - apiVersion: apps/v1 kind: DaemonSet metadata: name: update-docker-config namespace: kube-system labels: app: update-docker-config spec: selector: matchLabels: name: update-docker-config template: metadata: labels: name: update-docker-config spec: initContainers: - command: ["/bin/sh", "-c"] args: - > echo "Checking if RHEL or RHCOS host"; [[ -s /docker-config/.docker/config.json ]] && CONFIG_PATH=/docker-config/.docker || CONFIG_PATH=/docker-config/root/.docker; echo "Backing up or restoring config.json"; [[ -s \$CONFIG_PATH/config.json ]] && cp \$CONFIG_PATH/config.json \$CONFIG_PATH/config.json.bak || cp \$CONFIG_PATH/config.json.bak \$CONFIG_PATH/config.json; echo "Merging secret with config.json"; /host/usr/bin/jq -s '.[0] * .[1]' \$CONFIG_PATH/config.json /auth/.dockerconfigjson > \$CONFIG_PATH/config.tmp; mv \$CONFIG_PATH/config.tmp \$CONFIG_PATH/config.json; echo "Sending signal to reload crio config"; pidof crio; kill -1 \$(pidof crio) image: ${ocp_release_pull_secret_image} imagePullPolicy: IfNotPresent name: updater resources: {} securityContext: privileged: true volumeMounts: - name: docker-auth-secret mountPath: /auth - name: docker mountPath: /docker-config - name: bin mountPath: /host/usr/bin - name: lib64 mountPath: /lib64 containers: - resources: requests: cpu: 0.01 image: ${ocp_release_pull_secret_image} name: sleepforever command: ["/bin/sh", "-c"] args: - > while true; do sleep 100000; done hostPID: true volumes: - name: docker-auth-secret secret: secretName: docker-auth-secret - name: docker hostPath: path: / - name: bin hostPath: path: /usr/bin - name: lib64 hostPath: path: /lib64 hostPathType: Directory EOF - Verificare che i pod siano in esecuzione.
oc get daemonset -n kube-system update-docker-config
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.