Configuration d'un registre d'images
Les clusters Red Hat® OpenShift® on IBM Cloud® incluent un registre interne pour construire, déployer et gérer localement des images de conteneur. Pour qu'un registre privé puisse gérer et contrôler l'accès aux images dans votre entreprise, vous pouvez également configurer votre cluster pour qu'il utilise IBM Cloud® Container Registry.
Choix d'une solution de registre d'images
Vos images de conteneurs doivent être stockées dans un registre de conteneurs accessible à votre cluster afin de pouvoir y déployer des applications. Vous pouvez choisir d'utiliser le registre intégré de votre cluster Red Hat OpenShift, un registre privé avec accès réservé à des utilisateurs sélectionnés ou un registre public. Consultez le tableau suivant afin de choisir la meilleure option pour votre cas d'utilisation.
- Registre Red Hat OpenShift Container Registry (OCR) interne
-
Votre cluster est configuré avec le registre d'images Red Hat OpenShift Container Registry interne pour qu'Red Hat OpenShift puisse générer, déployer et gérer automatiquement le cycle de vie de vos applications depuis le cluster. Les images sont stockées dans une unité de stockage de fichiers IBM Cloud classique qui est mise à disposition lors de la phase de création du cluster. Si vous avez besoin de plus de stockage, vous pouvez redimensionner cette unité. Cas d'utilisation :
- Flux d'images Red Hat OpenShift natives, génération et déploiement d'application traités par cluster.
- Partage possible des images entre tous les projets au sein du cluster, avec accès contrôlé via des rôles RBAC.
- Intégration du registre interne à d'autres produits Red Hat, tels que CloudForms pour obtenir des fonctions étendues, comme par exemple l'analyse de vulnérabilité.
- Option permettant d'exposer le registre interne avec une route afin que les utilisateurs puissent extraire des images du registre sur le réseau public.
- Option permettant de configurer le registre interne en vue d'extraire des images d'un registre privé tel qu'IBM Cloud Container Registry ou d'envoyer des images vers ce dernier.
-
Pour plus d'informations, voir Utilisation du registre interne.
- Registre privé
-
Les registres privés sont un bon choix pour protéger vos images contre les utilisateurs non autorisés. Les registres privés peuvent être configurés par l'administrateur du cluster pour garantir que l'accès, les quotas de stockage, la sécurisation des images et d'autres fonctions fonctionnent comme prévu. Par défaut, votre cluster Red Hat OpenShift est intégré à la propriété IBM Cloud Container Registry privée via des secrets d'extraction d'image dans le projet
default. IBM Cloud Container Registry est un registre privé multi-locataires hautement disponible pour stocker vos propres images. Vous pouvez également extraire des images fournies par IBM dans le registreicr.ioglobal, ainsi que des logiciels sous licence depuis le registre habilité. IBM Cloud Container Registry vous permet de gérer des images pour plusieurs clusters grâce à l'intégration à IBM Cloud IAM et à la facturation. Avantages liés à l'utilisation d'IBM Cloud Container Registry avec le registre interne :- Mise en cache d'images locales pour des générations plus rapides via le registre interne.
- Le flux d'images est visible pour les déploiements dans d'autres projets, si bien que vous n'avez pas à copier les secrets d'extraction dans chaque projet.
- Partage des images entre plusieurs clusters sans avoir à insérer ces images dans plusieurs registres.
- Analyse automatique de vulnérabilité des images.
- Contrôle d'accès via des règles IBM Cloud IAM et des registres régionaux distincts.
- Conservation des images sans nécessiter d'espace de stockage dans votre cluster ou d'unité de stockage associée. Vous pouvez également définir des règles pour gérer la quantité d'images afin d'éviter qu'elles n'occupent trop d'espace.
- Infrastructure VPC : utilisation du point de terminaison du service de registre privé afin que les clusters qui utilisent uniquement un point de terminaison de service de cloud privé puissent toujours accéder au registre.
- Définition de quotas de stockage et de trafic d'extraction d'images pour mieux contrôler le stockage, l'utilisation et la facturation des images.
- Extraction de contenu IBM sous licence à partir du registre autorisé.
-
Pour commencer, consultez les rubriques suivantes :
- Initiation à IBM Cloud Container Registry.
- Importation d'images depuis IBM Cloud Container Registry vers le flux d'images du registre interne.
- Utilisation d'IBM Cloud Container Registry.
- Registre public
-
Les registres publics tels que Docker Hub constituent un moyen de partager des images entre les équipes, les entreprises, les clusters ou les fournisseurs de cloud. Certains registres publics peuvent également offrir un composant de registre privé. Cas d'utilisation :
- Insertion et extraction d'images sur le réseau public.
- Test rapide d'un conteneur entre les fournisseurs de cloud.
- Disparition du besoin de fonctionnalités de niveau entreprise telles que l'évaluation des vulnérabilités ou la gestion des accès.
-
Pour plus d'informations, consultez la documentation relative aux registres publics, comme Quay ou Docker Hub.
Stockage d'images dans les registres internes
Les clusters Red Hat OpenShift ont par défaut un registre interne. Les images contenues dans le registre interne sont sauvegardées, mais elles varient en fonction du fournisseur d'infrastructure de votre cluster Red Hat OpenShift on IBM Cloud.
- Clusters classiques
- Votre cluster Red Hat OpenShift est configuré par défaut avec un registre interne qui utilise File Storage for Classic comme stockage sous-jacent. Lorsque vous supprimez le cluster, le registre interne et ses images sont également supprimés. Si vous voulez conserver vos images, pensez à utiliser un registre privé, tel qu'IBM Cloud Container Registry, à sauvegarder vos images dans un stockage persistant, par exemple, Object Storage, ou à créer un cluster OCR (Red Hat OpenShift Container Registry) autonome distinct. Pour plus d'informations, voir la documentationRed Hat OpenShift.
- Clusters de VPC
- Le registre interne de votre cluster Red Hat OpenShift sauvegarde vos images dans un compartiment créé automatiquement au sein d'une instance IBM Cloud Object Storage de votre compte. Les données stockées dans le compartiment de stockage d'objets sont conservées même si vous supprimez le cluster. Une fois le cluster créé, vous ne pouvez plus supprimer ni dissocier le compartiment « IBM Cloud Object Storage » du cluster. Si vous prévoyez de créer un cluster sans registre interne s'appuyant sur COS, par exemple pour les environnements Financial Services Cloud d' IBM, vous devez omettre l'instance COS lors de la création du cluster. Pour plus d'informations, consultez la section « Création d'un cluster VPC sans compartiment Object Storage ».
- Clusters Classic, VPC ou Satellite
- Vous pouvez, si vous le souhaitez, configurer le registre interne pour qu’il stocke les données dans le répertoire «
emptyDir» du nœud de travail sur lequel s’exécute le pod du registre interne. N'oubliez pas que ces données ne sont pas persistantes et qu'en cas de redémarrage du pod ou du noeud worker, les données stockées sont supprimées et irrécupérables. Vous pouvez stocker les images en local dansemptyDirafin d'améliorer les performances si vous générez régulièrement des conteneurs à partir d'images volumineuses.
Sauvegarder votre registre d'images interne vers IBM Cloud Object Storage
Cloud privé virtuel
Vos images dans votre registre d'images interne Red Hat OpenShift sont automatiquement sauvegardées dans un compartiment IBM Cloud Object Storage. Les données stockées dans le compartiment de stockage d'objets sont conservées même si vous supprimez le cluster.
Toutefois, si la création du compartiment échoue lorsque vous créez votre cluster, vous devez créer manuellement un compartiment et configurer votre cluster pour utiliser le compartiment. Entre-temps, le registre interne utilise un volume
Kubernetes emptyDir qui stocke vos images de conteneur sur le disque secondaire de votre noeud worker. Les volumes emptyDir ne sont pas considérés comme des volumes persistants hautement disponibles, et si vous
supprimez les pods qui utilisent l'image, celle-ci est automatiquement supprimée.
Pour créer manuellement un compartiment pour votre registre interne, voir Erreur lors de la création de cluster relative au compartiment de stockage d'objets Cloud.
Configuration d'un seau COS pour le registre de votre cluster
Vous pouvez configurer manuellement un seau IBM Cloud Object Storage pour le registre d'images interne de votre cluster. Cette fonction est utile lorsque vous devez configurer ou reconfigurer le backend de stockage du registre.
Avant de commencer
- Vous devez disposer d'un cluster Red Hat OpenShift on IBM Cloud et d'une instance IBM Cloud Object Storage.
- Accédez à votre cluster Red Hat OpenShift.
Configuration du seau COS
-
Définissez les variables d'environnement pour votre cluster et votre instance 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) -
Vérifier la configuration actuelle de l'opérateur du registre d'images.
oc get configs.imageregistry.operator.openshift.io/cluster -o yaml -
Mettre temporairement l'opérateur en mode
Removed. Si le registre est déjà actif, désactivez-le pour éviter les conflits.oc patch configs.imageregistry.operator.openshift.io/cluster \ --type=merge -p '{"spec":{"managementState":"Removed"}}' -
Vérifiez si le registre utilise
emptyDir, ce qui signifie qu'aucun godet COS n'est configuré.storage: emptyDir: {} managementState: Managed -
Créez un seau Object Storage pour votre cluster. Remplacez
<region>par la région de votre choix, par exempleus-southoueu-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> -
Supprimer le champ
emptyDirde la configuration du registre.oc patch configs.imageregistry.operator.openshift.io/cluster \ --type=json \ -p '[{"op": "remove", "path": "/spec/storage/emptyDir"}]' -
Configurer le registre pour utiliser le stockage S3 ( Object Storage ). Mettez à jour les valeurs
regionetregionEndpointpour qu'elles correspondent à la région de votre seau.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 )"Par exemple, si votre seau se trouve à l'adresse
eu-de, utilisezregion: "eu-de-standard"etregionEndpoint: "https://s3.direct.eu-de.cloud-object-storage.appdomain.cloud". -
Vérifiez la configuration de l'opérateur du registre d'images.
oc get configs.imageregistry.operator.openshift.io/cluster -o yaml -
Créez une clé d'identification de service pour l'instance COS et extrayez les identifiants 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 EOFCela crée un fichier
creds.txtavec vos informations d'identification Object Storage.Exemple de fichier d'identification
[default] aws_access_key_id = f1ab5fcf7XXXXXXXXXb2a14e046 aws_secret_access_key = 4c78ddfa763XXXXXXX23d1cc9350d1 -
Créez le secret
image-registry-private-configuration-users'il n'existe pas.oc create secret generic image-registry-private-configuration-user -n openshift-image-registry -
Mettez à jour le secret avec les données d'accès.
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)\" } }" -
Créez le secret
image-registry-private-configurations'il n'existe pas.oc create secret generic image-registry-private-configuration -n openshift-image-registry -
Mettre à jour le secret du registre de l'image principale avec le fichier d'informations d'identification complet 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}\"}}" -
Réglez l'opérateur de registre d'images sur le mode
Managed.oc patch configs.imageregistry.operator.openshift.io/cluster \ --type=merge -p '{"spec":{"managementState":"Managed"}}' -
Redémarrer le déploiement du registre d'images.
oc rollout restart deployment image-registry -n openshift-image-registry -
Vérifiez que le registre est sain.
oc get clusteroperator image-registry
Dépannage de la configuration du registre COS
Si vous rencontrez des problèmes avec la configuration du registre de Object Storage, essayez les étapes de dépannage suivantes.
-
Vérifiez que le pod «
image-registry» est en cours d'exécution.oc project openshift-image-registry oc get podsExemple de sortie
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 -
Vérifier l'état de l'opérateur du cluster
image-registry.oc describe clusteroperator image-registry -
Si nécessaire, supprimez temporairement la configuration du backend S3 et revenez à
emptyDirpour déverrouiller l'opérateur.oc patch configs.imageregistry.operator.openshift.io/cluster --type=merge -p '{ "spec": { "managementState": "Managed", "storage": { "emptyDir": {} } } }' -
Vérifier les pods dans l'espace de noms
openshift-image-registry.oc get pods -n openshift-image-registry -
Vérifiez les variables d'environnement de la configuration déployée.
oc get pod -n openshift-image-registry -l docker-registry=default -o jsonpath='{.items[0].spec.containers[0].env}' | jq
Pour plus d'informations sur la configuration du registre, voir Configuration du registre.
Stockage d'images dans le registre interne dans des clusters classiques
Par défaut, le registre interne de votre cluster « Red Hat OpenShift » utilise un IBM Cloud File Storage for Classic volume pour stocker les images du registre. Vous pouvez vérifier ou mettre à jour la taille par défaut du volume de stockage.
Affichage des détails de volume
Pour afficher les détails du volume, y compris la classe et la taille de stockage, vous pouvez décrire la réservation de volume persistant (PVC).
oc describe pvc -n openshift-image-registry image-registry-storage
Modification des détails du volume
Si votre registre nécessite davantage de gigaoctets de stockage pour vos images, vous pouvez redimensionner le volume de stockage de fichiers. Pour plus d'informations, voir Modification de la taille et du nombre d'opérations d'entrée-sortie par seconde (IOPS) de votre unité de stockage.
Lorsque vous redimensionnez le volume dans votre compte d'infrastructure IBM Cloud, la description de PVC associée n'est pas mise à jour. À la place, vous pouvez vous connecter au podopenshift-image-registry qui utilise le
PVC registry-backingpour vérifier que le volume est redimensionné.
Stockage d'images dans le répertoire vide de noeud worker
Vous pouvez stocker les images du registre interne en local dans le répertoire emptyDir du noeud worker, par exemple un noeud worker bare metal, pour améliorer les performances si vous générez régulièrement des conteneurs à partir
d'images volumineuses.
N'oubliez pas que ces données ne sont pas persistantes et qu'en cas de redémarrage du pod ou du noeud worker, les données stockées sont supprimées et irrécupérables.
-
Mettre à jour le configmap de l'opérateur du registre d'images pour que le stockage utilise le site
emptyDirdu nœud de travail. Notez que la mise à jour de la mappe de configuration pour utiliseremptyDirne supprime pas la réservation de volume persistant d'origine du registre d'images.oc patch configs.imageregistry.operator.openshift.io/cluster --type merge --patch '{"spec":{"storage":{"emptyDir":{}}}}' -
Si l'état de gestion de l'opérateur du registre d'images est défini sur «
Unmanaged» (Récupération en cours), comme c'est le cas dans les clusters « Satellite », mettez à jour l'état de gestion en le définissant sur «Managed» (Récupération terminée). Maintenant, l'opérateur met à jour le pod du registre interne.oc patch configs.imageregistry.operator.openshift.io/cluster --type merge -p '{"spec":{"managementState":"Managed"}}' -
Obtenez les détails du pod du registre interne pour vérifier vos mises à jour.
- Vérifiez que le pod
image-registryest en cours d'exécution et qu'un pod s'exécute par noeud worker dans le cluster.
oc get pods -n openshift-image-registry ``` Exemple de sortie ```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. Récupérez l'adresse IP publique du **noeud** sur lequel s'exécute le pod `image-registry`. ```sh {: pre} oc describe pod -n openshift-image-registry <image-registry-pod> | grep Node ``` Exemple de sortie ```sh {: screen} Node: 169.xx.xxx.xxx/169.xx.xxx.xxx ``` Si l'adresse IP du poste de travail est privée, exécutez `ibmcloud oc worker ls -c <cluster> | grep <private_IP>` et notez l'adresse IP publique correspondante. {: tip} 1. Récupérez l'**UID** du pod `image-registry` dans la section `metadata.uid` du fichier YAML du pod (et non pas l'UID de la réplique défini dans la section `metadata.ownerReferences.uid`). ```sh {: pre} oc get pod -n openshift-image-registry <image-registry-pod> -o yaml ``` Exemple de sortie ```yaml {: screen} apiVersion: v1 kind: Pod metadata: uid: e8d7718d-b0bd-47e2-9aaa-05f3a608fd9b ... ``` - Vérifiez que le pod
-
Vérifiez que le registre interne stocke les données dans le répertoire
emptyDirdu noeud worker.-
Accédez directement au registre depuis le cluster, en utilisant le nœud de travail que vous avez récupéré précédemment. Suivez les étapes d'insertion d'une image de test dans le registre interne.
Pour exécuter ces étapes de la documentation Red Hat OpenShift, vous avez besoin de l'outil d'interface de ligne de commande
podman. Il est possible que vos noeuds worker ne disposent pas par défaut de cet outil d'interface CLI. Consultez le guide Podman d'installation pour connaître les versions RHEL disponibles. -
Accédez au dossier de pod du registre interne qui sauvegarde dans le répertoire
emptyDir. Pour<pod_uid>, utilisez le pod UID que vous avez extrait précédemment.
cd var/lib/kubelet/pods/<pod_uid>/volumes/kubernetes.io~empty-dir/registry-storage/docker/registry/v2/repositories/openshift ``` 1. Vérifiez que votre image se trouve dans le répertoire du référentiel. ```sh {: pre} ls ``` Exemple de sortie ```sh {: screen} <myimage> nginx ... ``` -
Suppression du registre d'images interne
Cloud privé virtuel
Les déploiements d'opérateurs de registre d'images ne sont présents que dans les Red Hat OpenShift on IBM Cloud clusters gérés par Toolkit. HyperShift Les clusters gérés exécutent l'opérateur du registre d'images dans le plan de contrôle.
Si vous ne souhaitez pas utiliser le registre d'images interne, vous pouvez effectuer les étapes suivantes pour le supprimer.
- Sauvegardez une copie de vos configurations de registre interne.
oc get configs.imageregistry.operator.openshift.io cluster -o yaml > configs.yaml - Exécutez la commande de correctif suivante pour remplacer l'état de gestion du registre d'images par
Removed.kubectl patch configs.imageregistry.operator.openshift.io cluster -p '{"spec":{"managementState":"Removed"}}' --type='merge' - Une fois l'état de gestion modifié, le service de registre d'images et le déploiement sont supprimés de l'espace de nom
openshift-image-registrydans votre cluster. Vous pouvez exécuter les commandes suivantes pour vérifier qu'elles ont été supprimées. Notez que seuls le déploiement et le service du registre d'images sont supprimés. Le déploiement et le service de l'opérateur du registre d'images sont conservés.oc get deployment -n openshift-image-registryoc get svc -n openshift-image-registry
Configuration d'une route externe sécurisée pour le registre interne
Par défaut, votre cluster Red Hat OpenShift dispose d'un registre interne disponible via un service avec une adresse IP interne. Si vous souhaitez rendre le registre interne disponible sur le réseau public, vous pouvez configurer une route de nouveau chiffrement sécurisée. Par exemple, vous pouvez configurer le registre interne de votre cluster de sorte qu'il agisse en tant que registre public pour les déploiements dans d'autres projets ou clusters.
Avant de commencer :
- Vérifiez que vous disposez du rôle d'accès au service IAM « Manager » IBM Cloud pour le cluster.
- Assurez-vous que votre cluster dispose d'une connectivité au réseau public afin d'exposer le registre interne avec une route publique.
- Installez Docker sur votre machine locale.
- Accédez à votre cluster Red Hat OpenShift.
Pour utiliser le registre interne, configurez une route publique pour accéder au registre. Créez ensuite un secret d'extraction d'image incluant les données d'identification permettant d'accéder au registre de sorte que les déploiements dans d'autres projets puissent extraire des images de ce registre.
-
A partir du projet
openshift-image-registry, assurez-vous que le serviceimage-registryexiste pour le registre interne.oc get svc -n openshift-image-registryExemple de sortie
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 -
Créez une route sécurisée pour le service
image-registryqui utilise la terminaison TLSreencrypt. Grâce au nouveau chiffrement, le routeur arrête la connexion TLS associée à un certificat, puis chiffre à nouveau la connexion au registre interne avec un autre certificat. Avec cette approche, le chemin complet de la connexion entre l'utilisateur et le registre interne est chiffré. Pour utiliser votre propre nom de domaine personnalisé, activez l'option «--hostname».oc create route reencrypt --service=image-registry -n openshift-image-registry -
Extrayez le nom d'hôte (HOST/PORT) et le port (PORT) qui ont été affectés à la route
image-registry.oc get route image-registry -n openshift-image-registryExemple de sortie
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 -
Modifiez la route afin de définir la stratégie d'équilibrage de charge sur «
source» (transfert direct), de sorte que la même adresse IP client soit toujours dirigée vers le même serveur, comme dans une configuration de route de transfert direct. Vous pouvez définir la stratégie en ajoutant une annotation dans la sectionmetadata.annotations:haproxy.router.openshift.io/balance: source. Vous pouvez éditer le fichier de configuration à partir de la console d'application Red Hat OpenShift ou de votre ligne de commande en exécutant la commande suivante :oc edit route image-registry -n openshift-image-registryAdd the annotation.
apiVersion: route.openshift.io/v1 kind: Route metadata: annotations: haproxy.router.openshift.io/balance: source ... -
Si les règles réseau de l'entreprise empêchent l'accès depuis votre système local à des noeuds finaux publics via des proxys ou des pare-feux, autorisez l'accès au sous-domaine de route que vous créez pour le registre interne dans les étapes ci-après.
-
Connectez-vous au registre interne en utilisant la route comme nom d'hôte.
docker login -u $(oc whoami) -p $(oc whoami -t) image-registry-openshift-image-registry.<cluster_name>-<ID_string>.<region>.containers.appdomain.cloud -
Maintenant que vous êtes connecté, essayez d'envoyer un exemple d'application
hello-worldau registre interne.- Extrayez l'image
hello-worldde DockerHub, ou générez une image sur votre machine locale.
docker pull hello-world ``` 1. Attribuez à l'image locale une étiquette comportant le nom d'hôte de votre registre interne, le projet sur lequel vous souhaitez déployer l'image ainsi que le nom et l'étiquette d'image. ```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. Envoyez l'image au registre interne de votre cluster. ```sh {: pre} docker push image-registry-openshift-image-registry.<cluster_name>-<ID_string>.<region>.containers.appdomain.cloud/<project>/<image_name>:<tag> ``` 4. Vérifiez que l'image est ajoutée au flux d'images Red Hat OpenShift. ```sh {: pre} oc get imagestream ``` Exemple de sortie ```sh {: screen} NAME DOCKER REPO TAGS UPDATED hello-world image-registry-openshift-image-registry.svc:5000/default/hello-world latest 7 hours ago ``` - Extrayez l'image
-
Pour permettre aux déploiements de votre projet d'extraire des images du registre interne, créez un secret d'extraction d'image dans votre projet qui détient les données d'identification permettant d'accéder à votre registre interne. Ajoutez ensuite le secret d'extraction d'image au compte de service par défaut pour chaque projet.
- Répertoriez les secrets d'extraction d'image utilisés par le compte de service par défaut et notez le secret qui commence par
default-dockercfg.
oc describe sa default ``` Exemple de sortie ```sh {: screen} ... Image pull secrets: all-icr-io default-dockercfg-mpcn4 ... ``` 1. Obtenez les informations sur le secret codé dans la zone `data` du fichier de configuration. ```sh {: pre} oc get secret <default-dockercfg-name> -o yaml ``` Exemple de sortie ```yaml {: screen} apiVersion: v1 data: .dockercfg: ey...= ``` 1. Décodez la valeur de la zone `data`. ```sh {: pre} echo "<ey...=>" | base64 -D ``` Exemple de sortie ```sh {: screen} {"172.21.xxx.xxx:5000":{"username":"serviceaccount","password":"eyJ... ``` 4. Créez un nouveau secret d'extraction d'image pour le registre interne. - `secret_name` : donnez un nom à votre secret d'extraction d'image, par exemple `internal-registry`. - `--namespace` : entrez le projet dans lequel créer le secret d'extraction d'image, par exemple `default`. - `--docker-server`: Au lieu de l'adresse IP du service interne (`172.21.xxx.xxx:5000`), entrez le nom d'hôte de la route `image-registry` avec le port (`image-registry-openshift-image-registry.<cluster_name>-<ID_string>.<region>.containers.appdomain.cloud:5000`). - `--docker-username` : copiez la valeur `"username"` à partir du secret d'extraction d'image, par exemple `serviceaccount`. - `--docker-password` : copiez la valeur `"password"` à partir du secret d'extraction d'image précédent. - `--docker-email` : si vous possédez une adresse e-mail Docker, entrez-la. Dans le cas contraire, entrez une adresse e-mail fictive, telle que `a@b.c`. Cette adresse e-mail est obligatoire pour créer un secret Kubernetes, mais n'est plus utilisée une fois la valeur créée. ```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. Ajoutez le secret d'extraction d'image au compte de service par défaut pour votre projet. ```sh {: pre} oc patch -n <namespace_name> serviceaccount/default --type='json' -p='[{"op":"add","path":"/imagePullSecrets/-","value":{"name":"<image_pull_secret_name>"}}]' ``` 6. Répétez ces étapes pour chaque projet pour lequel vous souhaitez extraire des images à partir du registre interne. - Répertoriez les secrets d'extraction d'image utilisés par le compte de service par défaut et notez le secret qui commence par
Maintenant que vous avez configuré le registre interne avec une route accessible, vous pouvez vous connecter au registre et y insérer ou en extraire des images. Pour plus d'informations, voir la documentationRed Hat OpenShift.
Importation d'images à partir d'IBM Cloud Container Registry dans le flux d'images du registre interne
Par défaut, votre cluster Red Hat OpenShift on IBM Cloud est configuré pour extraire des images des domaines IBM Cloud Container Registry icr.io privés distants dans le projet default. Vous pouvez importer une image
depuis IBM Cloud Container Registry dans le registre interne de votre cluster Red Hat OpenShift en associant un tag à cette image en tant que flux d'images. Avec cette configuration, vous pouvez déployer des applications à partir de l'image en utilisant le cache local du registre interne, ce qui permet d'accélérer la génération des déploiements.
De plus, les déploiements dans d'autres projets peuvent se référer au flux d'images afin que vous n'ayez pas à créer des données d'identification de secret d'extraction d'image pour IBM Cloud Container Registry dans chaque projet.
Si vous mettez à jour votre image dans IBM Cloud Container Registry, l'image n'est pas automatiquement extraite dans le registre interne de votre cluster Red Hat OpenShift. Vous pouvez également configurer une importation périodique ou répéter ces étapes pour ajouter un tag à l'image. En fonction de la stratégie d'extraction d'image que vous utilisez dans votre déploiement, vous devrez peut-être redémarrer votre déploiement.
Vous voulez en savoir plus sur la façon dont les générations, les flux d'images et le registre interne fonctionnent conjointement ? Lisez la Red Hat OpenShift documentation ou consultez ce blog sur la gestion des images de conteneurs.
-
Passez au projet
defaultpour extraire votre image et l'insérer dans le flux d'images. Le projetdefaultest déjà configuré avec des données d'identification permettant d'accéder aux registresicr.io.oc project default -
Répertoriez les images disponibles dans votre IBM Cloud Container Registry. Notez le référentiel et l'étiquette de l'image que vous souhaitez extraire dans le registre interne de votre cluster Red Hat OpenShift.
ibmcloud cr images -
Balisez l'image pour l'extraire de votre espace de noms IBM Cloud Container Registry et l'insérer dans le registre interne en tant que flux d'images. Pour plus d'informations, consultez la documentation de Red Hat OpenShift ou exécutez
oc tag --help.oc tag <region>.icr.io/<namespace>/<image>:<tag> default/<image>:<tag> --reference-policy=local [--scheduled]<region>.icr.io/<namespace>/<image>:<tag>: Utilisez les informations relatives au référentiel et à la balise que vous avez précédemment récupérées pour renseigner les champs « IBM Cloud Container Registry » (région), « namespace » (espace de noms), « image » (image) et « tag name » (nom de la balise) correspondant à l'image que vous souhaitez récupérer.default/<image>:<tag>: Entrez les informations relatives au flux d'images internes que vous créez à partir de l'image marquée IBM Cloud Container Registry. Ce flux d'images est à créer dans le projetdefault, qui est également le projet dans lequel le flux d'images est créé si vous ne spécifiez aucun projet. Les valeurs de: correspondent généralement à celles que vous avez récupérées précédemment.--reference-policy=local: définissez cette valeur surlocalpour qu'une copie de l'image provenant d'IBM Cloud Container Registry soit importée dans le cache local du registre interne et mise à la disposition des projets du cluster en tant que flux d'images. Si vous n'incluez pas cette valeur, le flux d'images se reporte à nouveau à IBM Cloud Container Registry lorsque vous l'utilisez dans vos déploiements et nécessite donc des données d'identification dans le projet.--scheduled: Activez cette option facultative pour configurer l'importation périodique de l'image depuis IBM Cloud Container Registry vers le registre interne. La fréquence par défaut est de 15 minutes. Pour plus d'informations, voir la documentationRed Hat OpenShift.
-
Vérifiez que votre flux d'images a été créé.
oc get imagestreams -
Vérifiez que le flux d'images a réussi à extraire l'image d'IBM Cloud Container Registry. Dans la sortie, vérifiez que l'image de la dernière balise à partir de correspond à votre image
* <region>.icr.io/<namespace>/<image>@<digest>.oc describe is/<imagestream>Exemple de sortie
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
Désormais, vos développeurs peuvent utiliser le flux d'images dans un déploiement d'application. L'image est générée à partir de l'image extraite localement dans le registre interne. Il n'est pas nécessaire de définir un secret d'extraction d'image dans le projet sur IBM Cloud Container Registry car le flux d'images est local pour le cluster.
Configuration de générations dans le registre interne pour envoyer des images vers IBM Cloud Container Registry
Lorsque vous créez une build dans votre Red Hat OpenShift on IBM
Cloud cluster, vous pouvez configurer le registre interne pour pousser l'image vers votre référentiel externe dans IBM Cloud Container Registry. Par défaut, le secret d'extraction d'image dans le projet default de votre cluster ne dispose que d'un accès en lecture pour extraire des images depuis IBM Cloud Container Registry. Pour envoyer
des images, vous devez ajouter un secret doté d'un accès en écriture.
-
Passez au projet
default.oc project default -
Suivez les étapes de configuration d'une clé d'API IBM Cloud IAM avec les rôles d'accès au service
ReaderetWriterpour extraire et envoyer des images depuis et vers vos registresicr.io.Gardez à l'esprit que tout utilisateur ayant accès au projet peut utiliser ce secret pour envoyer des images vers votre registre privé. Vous souhaiterez peut-être configurer les outils de journalisation et de surveillance afin de pouvoir observer qui effectue quelles actions dans votre cluster.
-
Répétez l'étape précédente pour chaque région
icr.iovers laquelle vous souhaitez envoyer des images. -
Ajoutez le secret au compte de service de génération et faites référence aux secrets dans le fichier de configuration de génération. Pour plus d'informations, voir la documentationRed Hat OpenShift.
- Ajoutez le secret au compte de service de génération en liant le secret que vous venez de créer au rôle
builderqui est utilisé par toutes les générations du cluster.
oc secrets link builder <secret_name> ``` 1. Répertoriez les configurations de génération et notez celles auxquelles vous souhaitez octroyer un accès d'envoi et d'extraction à IBM Cloud Container Registry. ```sh {: pre} oc get bc ``` 1. Définissez le secret d'envoi d'image pour que la configuration de génération utilise le secret que vous venez de créer avec l'accès au service `Writer` à IBM Cloud Container Registry. ```sh {: pre} oc set build-secret --push bc/<build_config_name> <secret_name> ``` 4. Définissez le secret d'extraction d'image pour que la configuration de génération soit extraite du registre à partir duquel vous souhaitez extraire l'image de génération initiale. Par exemple, vous pouvez utiliser le secret que vous venez de créer avec l'accès au service `Reader` à IBM Cloud Container Registry si l'image source se trouve dans un référentiel IBM Cloud Container Registry. ```sh {: pre} oc set build-secret --pull bc/<build_config_name> <secret_name> ``` - Ajoutez le secret au compte de service de génération en liant le secret que vous venez de créer au rôle
-
Après avoir mis à jour le compte de service de génération et le fichier de configuration de génération à envoyer à IBM Cloud Container Registry, redémarrez votre génération.
oc start-build <build_name> -
Obtenez le nom de votre pod de génération, tel que
<build>-2-build.oc get pods -
Consultez les journaux de la génération et notez l'emplacement où l'image a été envoyée.
oc logs <build_pod>Exemple de journal lorsqu'un envoi d'image aboutit.
... Successfully pushed <region>.icr.io/<namespace>/<build_name>@sha256:<hash> Push successful -
Vérifiez vos images dans votre registre privé pour confirmer que l'image a été créée.
ibmcloud cr image listExemple de sortie
Repository Tag Digest Namespace Created Size Security status <region>.icr.io/<namespace>/<build_name> latest <digest> <namespace> 2 minutes ago 182 MB 33 Issues
Votre génération Red Hat OpenShift peut désormais extraire et envoyer des images depuis et vers IBM Cloud Container Registry.
Utilisation d'IBM Cloud Container Registry
Par défaut, votre cluster Red Hat OpenShift on IBM Cloud est configuré pour extraire des images des domaines IBM Cloud Container Registry icr.io privés distants dans le projet default. Si vous souhaitez utiliser des
images qui sont stockées dans IBM Cloud Container Registry pour d'autres projets, vous pouvez extraire l'image sur le registre interne d'un flux d'images ou créer des secrets d'extraction d'image pour chaque registre global et régional dans
chaque projet.
Pour importer des images dans le registre interne, voir Importation d'images à partir d'IBM Cloud Container Registry dans le flux d'images de registre interne.
Pour extraire des images directement à partir d'IBM Cloud Container Registry externe, voir les rubriques ci-après.
- Comment autoriser votre cluster à extraire des images d'un registre ?
- Copie du secret
all-icr-iodu projetdefaultvers le projet d'où vous souhaitez extraire des images. - Création de votre propre secret d'extraction d'image.
- Ajout du secret d'extraction d'image à votre configuration de déploiement ou au compte de service du projet.
Comment autoriser votre cluster à extraire des images d'un registre privé ?
Pour extraire des images d'un registre, votre cluster Red Hat OpenShift on IBM Cloud utilise un type spécial de secret Kubernetes, imagePullSecret. Ce secret d'extraction d'image stocke les données d'identification permettant d'accéder
à un registre de conteneur.
Le registre de conteneur peut être :
- Un espace de noms privé dans votre propre IBM Cloud Container Registry.
- Un espace de noms privé dans IBM Cloud Container Registry qui appartient à un autre compte IBM Cloud.
- N'importe quel autre registre privé, tel que Docker.
Toutefois, par défaut, votre cluster est configuré pour extraire des images des espaces de nom de votre compte dans IBM Cloud Container Registryet déployer des conteneurs à partir de ces images vers le projet default Red Hat OpenShift
de votre cluster. Si vous devez extraire des images dans d'autres projets du cluster ou à partir d'autres registres de conteneur, vous devez configurer vos propres secrets d'extraction d'image.
Configuration du secret d'extraction d'image par défaut
Généralement, votre cluster Red Hat OpenShift on IBM Cloud est configuré pour exraire des images de tous les domaines IBM Cloud Container Registry icr.io à partir du projet default Red Hat OpenShift uniquement. Consultez
la Questions fréquemment posées ci-dessous pour en savoir plus sur la manière de récupérer des images dans d'autres projets ou comptes Red Hat OpenShift, de restreindre l'accès à la récupération d'images, ou pour comprendre pourquoi votre
cluster ne dispose peut-être pas des secrets de récupération d'images par défaut.
- Comment mon cluster est-il configuré pour récupérer des images à partir du projet
defaultRed Hat OpenShift? - Lorsque vous créez un cluster, il dispose d'un ID de service IBM Cloud IAM associé à une règle de rôle d'accès au service Lecteur IAM dans IBM Cloud Container Registry. Les données d'identification de l'ID de service sont
représentées dans une clé d'API qui n'expire jamais et qui est stockée dans des secrets d'extraction d'image dans votre cluster. Ces secrets sont ajoutés dans l'espace de noms Kubernetes
defaultet la liste de ces secrets dans le compte de servicedefaultcorrespondant à ce projet Red Hat OpenShift. En utilisant des secrets d'extraction d'image, vos déploiements peuvent extraire des images (accès en lecture seule) à partir du IBM Cloud Container Registry global et régional pour déployer des conteneurs dans le projetdefaultRed Hat OpenShift.
- Le registre global stocke de manière sécurisée des images publiques fournies par IBM. Vous pouvez vous référer à ces images publiques dans vos déploiements au lieu d'utiliser des références différentes pour les images stockées dans chaque registre régional.
- Le registre régional stocke vos propres images Docker privées de manière sécurisée.
- Que faire si je ne dispose pas de secrets de récupération d'images dans le projet «
default» Red Hat OpenShift? - Vous pouvez rechercher les secrets d'extraction d'image en vous connectant à votre cluster et en exécutant la commande
oc get secrets -n default | grep "icr-io". Si aucun secreticrn'est répertorié, la personne qui a créé le cluster n'avait peut-être pas les droits requis sur IBM Cloud Container Registry dans IAM. Voir Mise à jour de clusters existants pour utiliser le secret d'extraction d'image de la clé d'API. - Puis-je limiter l'accès en lecture à un registre régional spécifique?
- Oui, vous pouvez éditer la règle IAM existante de l'ID de service qui limite le rôle d'accès au service Lecteur à ce registre régional ou à une ressource de registre, comme par exemple, un espace de noms. Avant de personnaliser des règles IAM de registre, vous devez activer les règles IBM Cloud IAM pour IBM Cloud Container Registry.
Vous souhaitez renforcer la protection de vos données d'identification de registre ? Demandez à l'administrateur de votre cluster d'activer un fournisseur de service de gestion des clés (KMS) dans votre cluster pour chiffrer les secrets Kubernetes qui s'y trouvent, tels que le secret d'extraction d'image qui stocke les données d'identification de votre registre.
- Puis-je importer des images dans un projet « Red Hat OpenShift » à partir d’un autre site que
default? - Par défaut, non. En utilisant la configuration de cluster par défaut, vous pouvez déployer des conteneurs à partir de n'importe quelle image stockée dans votre espace de nom IBM Cloud Container Registry dans le projet
defaultRed Hat OpenShift de votre cluster. Pour utiliser ces images dans d'autres projets Red Hat OpenShift ou d'autres comptes IBM Cloud, vous pouvez copier ou créer vos propres secrets d'extraction d'image. - Puis-je importer des images depuis un autre compte IBM Cloud?
- Oui, créez une clé d'API dans le compte IBM Cloud que vous souhaitez utiliser. Ensuite, dans chaque projet de chaque cluster dont vous souhaitez extraire des images du compte IBM Cloud, créez un secret qui contient la clé d'API. Pour plus d'informations, suivez cet exemple qui utilise une clé d'API d'ID de service autorisé.
Pour utiliser un registre non IBM Cloud, tel que Docker, voir Accès aux images stockées dans d'autres registres privés.
- La clé API doit-elle correspondre à un identifiant de service? Que se passe-t-il si j'atteins la limite du nombre d'identifiants de service pour mon compte?
- La configuration de cluster par défaut crée un ID de service pour stocker les données d'identification de clé d'API IBM Cloud IAM dans le secret d'extraction d'image. Cependant, vous pouvez également créer une clé d'API pour un utilisateur
individuel et stocker ces données d'identification dans un secret d'extraction d'image. Si vous parvenez à la limite IAM pour les ID de service, votre cluster est créé sans l'ID
de service et le secret d'extraction de l'image et ne peut pas extraire les images des domaines de registre
icr.iopar défaut. Vous devez créer votre propre secret d'extraction d'image, mais en utilisant une clé d'API pour un utilisateur individuel, tel qu'un ID fonctionnel, pas un ID de service IBM Cloud IAM. - Je vois les secrets de récupération d'images pour les domaines de registre régionaux et pour tous les domaines de registre. Lequel dois-je utiliser?
- Auparavant, Red Hat OpenShift on IBM Cloud créait des secrets d'extraction d'image distincts pour chaque domaine de registre
icr.iopublic régional. A présent, tous les domaines de registreicr.iopublics et privés pour toutes les régions sont stockés dans un seul et même secret d'extraction d'imageall-icr-ioqui est automatiquement créé projet Kubernetesdefaultde votre cluster.
Pour que les charges de travail des autres espaces de noms Kubernetes du cluster puissent extraire des images de conteneur à partir d'un registre privé, vous pouvez désormais copier uniquement le secret d'extraction d'image all-icr-io dans ce projet Kubernetes. Indiquez ensuite le secret all-icr-io dans votre déploiement ou votre compte de service. Vous n'avez plus besoin de copier le secret d'image qui correspond au registre régional de votre image. De plus,
notez que vous n'avez pas besoin de secrets d'extraction d'images pour les registres publics qui ne nécessitent pas d'authentification.
- Une fois que j'ai copié ou créé un secret « pull » d'image dans un autre projet Red Hat OpenShift, ai-je terminé?
- Pas tout à fait. Vos conteneurs doivent être autorisés à extraire des images à l'aide du secret que vous avez créé. Vous pouvez ajouter le secret d'extraction d'image au compte de service pour l'espace de noms ou faire référence au secret dans chaque déploiement. Pour obtenir des instructions, voir Utilisation de secret d'extraction d'image pour déployer des conteneurs.
Connexion de réseau privé à des registres icr.io
Lorsque vous configurez votre compte IBM Cloud pour utiliser des noeuds finaux de service, vous pouvez utiliser une connexion de réseau privé pour envoyer et extraire des images vers et depuis IBM Cloud Container Registry.
Que dois-je faire pour configurer mon cluster afin d'utiliser la connexion privée aux registres d' icr.io ?
- Activez une fonction VRF (Virtual Router Function) pour votre compte d'infrastructure IBM Cloud de manière à pouvoir utiliser le noeud final de service cloud
privé IBM Cloud Container Registry. Pour activer la fonction VRF, voir Activation de VRF. Pour vérifier si la fonction VRF est déjà activée, utilisez la commande
ibmcloud account show. - Activez votre compte IBM Cloud pour utiliser des noeuds finaux de service.
IBM Cloud Container Registry utilise automatiquement le point de terminaison du service de cloud privé. Vous n'avez pas besoin d'activer le nœud final de service de cloud privé pour vos clusters Red Hat OpenShift on IBM Cloud.
Mise à jour de clusters existants pour utiliser le secret d'extraction d'image de la clé d'API
Les nouveaux clusters Red Hat OpenShift on IBM Cloud stockent une clé d'API dans des secrets d'extraction d'image pour autoriser l'accès à IBM Cloud Container Registry. Avec ces secrets d'extraction d'image,
vous pouvez déployer des conteneurs à partir d'images stockées dans les domaines de registre icr.io. Vous pouvez ajouter les secrets d'extraction d'image à votre cluster si celui-ci n'a pas été créé avec les secrets.
Avant de commencer
-
Vérifiez que vous disposez des droits suivants : rôle d'accès à la plateforme IBM Cloud IAM Opérateur ou Administrateur pour Red Hat OpenShift on IBM Cloud. Le propriétaire de compte peut vous octroyer le rôle en exécutant la commande ci-après.
ibmcloud iam user-policy-create EMAIL --service-name containers-kubernetes --roles "Administrator,Operator" -
Rôle d'accès à la plateforme IBM Cloud IAM Administrateur pour IBM Cloud Container Registry, sur toutes les régions et tous les groupes de ressources. La portée de la règle ne peut pas être définie pour une région ou un groupe de ressources particulier. Le propriétaire de compte peut vous octroyer le rôle en exécutant la commande ci-après.
Vérifiez que la clé secrète a bien été créée
ibmcloud iam user-policy-create YOUR_USER_EMAIL --service-name container-registry --roles Administrator -
Si votre compte limite la création d'ID de service, ajoutez le rôle Créateur d'ID de service à la gestion des identités et des accès (IAM) dans la console (
iam-identitydans l'API ou l'interface de ligne de commande). -
Si votre compte limite la création de clé d'API, ajoutez le rôle Créateur de clé d'API d'utilisateur à la gestion des identités et des accès (IAM) dans la console (
iam-identitydans l'API ou l'interface de ligne de commande).
Mise à jour de votre secret d'extraction d'image
Pour mettre à jour le secret d'extraction d'image de votre cluster dans l'espace de noms Kubernetes default Kubernetes.
-
Obtenez l'ID de votre cluster.
ibmcloud oc cluster ls -
Exécutez la commande ci-après afin de créer un ID de service pour le cluster et affecter à l'ID de service un rôle d'accès au service IAM Lecteur pour IBM Cloud Container Registry. La commande permet également de créer une clé d'API pour représenter les données d'identification de l'ID de service et de stocker la clé d'API dans un secret d'extraction d'image Kubernetes dans le cluster. Le secret d'extraction d'image se trouve dans le projet
defaultRed Hat OpenShift.ibmcloud oc cluster pull-secret apply --cluster CLUSTER_NAME_OR_IDLorsque vous exécutez cette commande, la création de données d'identification IAM et de secrets d'extraction d'image est initiée et peut durer un certain temps. Vous ne pouvez pas déployer de conteneurs qui extraient une image des domaines IBM Cloud Container Registry
icr.iojusqu'à ce que les secrets d'extraction d'image soient créés. -
Vérifiez que les secrets d'extraction d'image sont créés dans votre cluster.
oc get secrets | grep icr-ioExemple de sortie
all-icr-io kubernetes.io/dockerconfigjson 1 16d -
Mettez à jour vos déploiements de conteneur pour extraire des images à partir du nom de domaine
icr.io. -
Facultatif : si vous disposez d'un pare-feu, assurez-vous d'autoriser le trafic réseau sortant vers les sous-réseaux du registre correspondant aux domaines que vous utilisez.
-
Effectuez la configuration à l'aide de l'une des options suivantes.
- Pour extraire des images dans d'autres projets Red Hat OpenShift que
defaultou à partir d'autres comptes IBM Cloud, copiez ou créez un autre secret d'extraction d'image. - Pour limiter l'accès du secret d'extraction d'image à des ressources de registre particulières, par exemple des espaces de noms ou des régions :
- Vérifiez que les règles IBM Cloud IAM pour IBM Cloud Container Registry sont activées.
- Editez les règles IBM Cloud IAM pour l'ID de service, ou créez un autre secret d'extraction d'image.
- Pour extraire des images dans d'autres projets Red Hat OpenShift que
Utilisation d'un secret de récupération d'images pour accéder aux images stockées dans des registres privés externes
Configurez votre propre secret d'extraction d'image dans votre cluster pour déployer des conteneurs dans d'autres projets Red Hat OpenShift que default, utiliser des images stockées dans d'autres comptes IBM Cloud ou dans des registres
privés externes. Par ailleurs, vous pouvez créer votre propre secret d'extraction d'image pour appliquer des règles d'accès IAM limitant les droits à des espaces de noms d'image de registre ou des actions (telles que push ou pull)
spécifiques.
Une fois que vous avez créé le secret d'extraction d'image, vous conteneurs doivent utiliser le secret pour être autorisés à extraire une image du registre. Vous pouvez ajouter le secret d'extraction d'image au compte de service correspondant au projet ou faire référence au secret dans chaque déploiement. Pour obtenir des instructions, voir Utilisation de secret d'extraction d'image pour déployer des conteneurs.
Les secrets d'extraction d'image sont valides uniquement pour les projets Red Hat OpenShift pour lesquels ils ont été créés. Répétez ces étapes pour chaque espace de noms dans lequel vous désirez déployer des conteneurs.
Avant de commencer :
- Configurez un espace de noms dans IBM Cloud Container Registry et envoyez des images dans cet espace de noms.
- Créez un cluster.
- Accédez à votre cluster Red Hat OpenShift.
Pour utiliser votre propre secret d'extraction d'image, choisissez parmi les options suivantes :
- Copier le secret d'extraction d'image du projet Red Hat OpenShift "default" dans d'autres projets de votre cluster.
- Créer de nouvelles données d'identification de clé d'API IAM et les stocker dans un secret d'extraction d'image pour accéder à des images dans d'autres comptes IBM Cloud ou pour appliquer des règles IAM limitant l'accès à certains domaines ou espaces de noms de registre.
- Créer un secret d'extraction d'image pour accéder aux images dans des registres privés externes.
Si vous avez déjà créé un secret d'extraction d'image dans votre projet et que vous voulez utiliser cette valeur dans votre déploiement, voir Déploiement de conteneurs en utilisant le secret imagePullSecret créé.
Copie d'un secret d'extraction d'image
Vous pouvez copier un secret d'extraction d'image, tel que celui qui est automatiquement créé pour le projet defaultRed Hat OpenShift, vers d'autres projets de votre cluster. Si vous souhaitez utiliser d'autres données d'identification
de clé d'API IBM Cloud IAM pour ce projet, par exemple, pour limiter l'accès à certains projets ou pour extraire des images d'autres comptes IBM Cloud, créez un secret d'extraction d'image à la place.
-
Répertoriez les projets Red Hat OpenShift disponibles dans votre cluster ou créez un projet à utiliser.
oc get projectsExemple de sortie
default Active ibm-cert-store Active ibm-system Active kube-public Active kube-system ActivePour créer un projet
oc new-project <project_name> -
Répertoriez les secrets d'extraction d'image existants dans le projet
defaultRed Hat OpenShift pour IBM Cloud Container Registry.oc get secrets -n default | grep icr-ioExemple de sortie
all-icr-io kubernetes.io/dockerconfigjson 1 16d -
Copiez le secret d'extraction d'image
all-icr-iodepuis le projetdefaultvers le projet de votre choix. Les nouveaux secrets d'extraction d'image sont nommés<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 - -
Vérifiez que la création des secrets a abouti.
oc get secrets -n <project_name> | grep icr-io -
Pour déployer des conteneurs, ajoutez le secret d'extraction d'image à chaque déploiement ou au compte de service du projet de sorte que n'importe quel déploiement du projet puisse extraire des images du registre.
Création d'un secret d'extraction d'image avec des données d'identification de clé d'API IAM différentes
Vous pouvez affecter des règles d'accès IBM Cloud IAM à des utilisateurs ou à un ID de service pour limiter les droits à des espaces de noms d'images de registre ou des actions (telles que push ou pull) spécifiques.
Ensuite, créez une clé d'API et stockez ces données d'identification de registre dans un secret d'extraction d'image pour votre cluster.
Par exemple, pour accéder à des images dans d'autres comptes IBM Cloud, créez une clé d'API qui stocke les données d'identification IBM Cloud Container Registry d'un utilisateur ou d'un ID de service dans ce compte. Ensuite, dans le compte de votre cluster, sauvegardez les données d'identification de la clé d'API dans un secret d'extraction d'image pour chaque cluster et projet de cluster.
La procédure suivante permet de créer une clé d'API qui stocke les données d'identification d'un ID de service IBM Cloud IAM. Au lieu d'utiliser un ID de service, vous envisagerez peut-être de créer une clé d'API pour un ID utilisateur disposant d'une règle d'accès au service IBM Cloud IAM pour IBM Cloud Container Registry. Cependant, assurez-vous que l'utilisateur correspond à un ID fonctionnel ou dispose d'un plan au cas où il partirait, afin que le cluster puisse toujours accéder au registre.
-
Répertoriez les projets Red Hat OpenShift disponibles dans votre cluster ou créez un projet à utiliser là vous souhaitez déployer des conteneurs à partir de vos images de registre.
oc get projectsExemple de sortie
default Active ibm-cert-store Active ibm-system Active kube-public Active kube-system ActivePour créer un projet
oc new-project <project_name> -
Créez un ID de service IBM Cloud IAM pour votre cluster qui sera utilisé pour les règles IAM et les données d'identification de clé d'API dans le secret d'extraction d'image. Prenez soin d'indiquer une description pour l'ID de service, qui vous aidera à retrouver cet ID par la suite, par exemple en incluant le nom du cluster et du projet.
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>" -
Créez une règle IBM Cloud IAM personnalisée pour l'ID de service de votre cluster qui autorise l'accès à 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- Obligatoire. Remplacez par l'ID service
<cluster_name>-<kube_namespace>-idque vous avez créé précédemment pour votre cluster Kubernetes. --service-name container-registry- Obligatoire. Entrez
container-registrypour que la règle IAM s'applique à IBM Cloud Container Registry. --roles <service_access_role>- Obligatoire. Entrez le rôle d'accès au service pour IBM Cloud Container Registry auquel vous souhaitez définir la portée d'accès de l'ID de service. Les valeurs possibles
sont
Reader,WriteretManager. --region <IAM_region>- Optionnel. Pour définir la portée de la règle d'accès à certaines régions IAM, entrez les régions dans une liste en les séparant par des virgules. Les valeurs possibles sont
globalet les régions de registre local. --resource-type namespace --resource <registry_namespace>- Optionnel. Si vous souhaitez limiter l'accès aux seules images dans certains espaces de nom IBM Cloud Container Registry, entrez
namespacepour le type de ressource et indiquez<registry_namespace>. Pour répertorier les espaces de noms du registre, exécutez la commandeibmcloud cr namespaces.
-
Créez une clé d'API pour l'ID de service. Nommez la clé de l'API similaire à votre ID de service et incluez l'ID de service que vous avez créé précédemment,
<cluster_name>-<kube_namespace>-id. Veillez à indiquer une description pour la clé d'API pour vous aider à la retrouver par la suite.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>" -
Récupérez la valeur de votre clé d'API dans la sortie de la commande précédente.
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 -
Créez un secret d'extraction d'image pour stocker les données d'identification de la clé d'API dans le projet du cluster. Répétez cette étape pour chaque projet de chaque cluster pour chaque domaine
icr.iodont vous souhaitez extraire des images.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>- Obligatoire. Spécifiez le projet Red Hat OpenShift de votre cluster que vous avez utilisé pour le nom d'ID de service.
<secret_name>- Obligatoire. Entrez le nom de votre secret d'extraction d'image.
--docker-server <registry_URL>- Obligatoire. Définissez l'URL d'accès au registre d'images dans lequel est configuré votre espace de noms de registre. Pour les domaines disponibles, voir Régions locales.
--docker-username iamapikey- Obligatoire. Entrez le nom d'utilisateur pour vous connecter à votre registre privé. Si vous utilisez IBM Cloud Container Registry, entrez
iamapikey. --docker-password <token_value>- Obligatoire. Entrez la valeur de votre
API Keyque vous avez récupérée précédemment. --docker-email <docker-email>- Obligatoire. Si vous en avez une, entrez votre adresse e-mail Docker. Dans le cas contraire, entrez une adresse e-mail fictive, telle que
a@b.c. Cette adresse e-mail est obligatoire pour créer un secret Kubernetes, mais n'est plus utilisée une fois la valeur créée.
-
Vérifiez que la création du secret a abouti. Remplacez
<project>par le fichierprojectoù vous avez créé le secret d'extraction de l'image.oc get secrets --namespace <project>
Accès aux images stockées dans d'autres registres privés
Si vous disposez déjà d'un registre privé, vous devez stocker les données d'identification du registre dans un secret d'extraction d'image Kubernetes et référencez ce secret dans votre fichier de configuration.
Avant de commencer :
Pour créer un secret d'extraction d'image :
-
Créez le secret Kubernetes pour stocker vos données d'identification de registre privé.
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>- Obligatoire. Projet Red Hat OpenShift de votre cluster dans lequel vous désirez utiliser le secret et déployer des conteneurs. Pour afficher la liste des projets disponibles dans votre cluster, exécutez la commande
oc get projects. <secret_name>- Obligatoire. Nom que vous désirez utiliser comme secret d'extraction d'image.
--docker-server <registry_URL>- Obligatoire. URL du registre dans lequel sont stockées vos images privées.
--docker-username <docker_username>- Obligatoire. Nom d'utilisateur pour vous connecter à votre registre privé.
--docker-password <token_value>- Obligatoire. Mot de passe pour vous connecter à votre registre privé, par exemple, une valeur de jeton.
--docker-email <docker-email>- Obligatoire. Si vous en avez une, entrez votre adresse e-mail Docker. Si vous n'en avez pas, entrez une adresse e-mail fictive, telle que
a@b.c. Cette adresse e-mail est obligatoire pour créer un secret Kubernetes, mais n'est plus utilisée une fois la valeur créée.
-
Vérifiez que la création du secret a abouti. Remplacez
<project>par le nom du projet dans lequel vous avez créé le secret d'extraction d'image.oc get secrets --namespace <project> -
Créez un pod faisant référence au secret d'extraction d'image.
Utilisation de secret d'extraction d'image pour déployer des conteneurs
Vous pouvez définir une image de retrait d'image dans votre déploiement de pod ou stocker le secret d'extraction d'image dans votre compte de service Kubernetes de sorte qu'il soit disponible pour tous les déploiements qui ne spécifient pas de compte de service Kubernetes dans le projet.
Pour planifier l'utilisation des secrets d'extraction d'image dans votre cluster, choisissez l'une des options suivantes :
- En vous référant au secret d'extraction de l'image dans votre déploiement de pod : utilisez cette option si vous ne souhaitez pas accorder l'accès à votre registre pour tous les pods de votre projet par défaut. Les développeurs peuvent inclure le secret d'extraction d'image dans chaque déploiement de pod qui doit accéder à votre registre.
- Stocker le secret d'extraction d'image dans le compte de service Kubernetes : utilisez cette option pour octroyer l'accès aux images de votre registre pour tous les déploiements dans les projets Red Hat OpenShift sélectionnés. Pour stocker un secret d'extraction d'image dans le compte de service Kubernetes, suivez les étapes décrites ci-après.
Stockage du secret d'extraction d'image dans le compte de service Kubernetes pour le projet sélectionné
Tous les projets Red Hat OpenShift ont un compte de service Kubernetes nommé default. Dans le projet, vous pouvez ajouter le secret d'extraction d'image à ce compte de service pour octroyer l'accès aux pods afin d'extraire des
images de votre registre. Les déploiements qui n'indiquent pas de compte de service utilisent automatiquement le compte de service default pour ce projet Red Hat OpenShift.
-
Vérifiez s'il existe déjà un secret d'extraction d'image pour le compte de service default.
oc describe serviceaccount default -n <project_name>Lorsque
<none>est affiché dans l'entrée des secrets d'extraction d'image, aucun secret d'extraction d'image n'existe. -
Ajoutez le secret d'extraction d'image dans le compte de service default.
- Exemple de commande permettant d'ajouter le secret d'extraction d'image lorsqu'aucun secret d'extraction d'image n'est défini.
oc patch -n <project_name> serviceaccount/default -p '{"imagePullSecrets":[{"name": "<image_pull_secret_name>"}]}' ``` - Exemple de commande permettant d'ajouter le secret d'extraction d'image lorsqu'un secret d'extraction d'image est déjà défini. ```sh {: pre} oc patch -n <project_name> serviceaccount/default --type='json' -p='[{"op":"add","path":"/imagePullSecrets/-","value":{"name":"<image_pull_secret_name>"}}]' ``` -
Assurez-vous que le secret d'extraction d'image a été ajouté dans le compte de service default.
oc describe serviceaccount default -n <project_name>Exemple de sortie
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>Si les secrets d'extraction d'image disent
<secret> (not found), vérifiez que le secret d'extraction d'image existe dans le même projet que votre compte de service en exécutantoc get secrets -n project. -
Créez un fichier de configuration de pod nommé
mypod.yamlpour déployer un conteneur à partir d'une image dans votre registre.apiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - name: mypod-container image: <region>.icr.io/<project>/<image>:<tag> -
Créez le pod dans le cluster en appliquant le fichier de configuration
mypod.yaml.oc apply -f mypod.yaml
Configuration d'un cluster pour extraire un logiciel autorisé
Vous pouvez configurer votre cluster Red Hat OpenShift on IBM Cloud pour extraire un logiciel autorisé, collection d'images de conteneur protégées mises en package dans des chartes Helm qu'IBM vous autorise à utiliser au moyen d'une licence.
Le logiciel autorisé est stocké dans un domaine IBM Cloud Container Registry spécial, nommé cp.icr.io. Pour accéder à ce domaine, vous devez créer un secret d'extraction d'image avec une clé d'autorisation pour votre cluster et
ajouter ce secret au compte de service Kubernetes de chaque projet dans lequel vous souhaitez déployer ce logiciel autorisé.
Avant de commencer : accédez à votre cluster Red Hat OpenShift.
-
Procurez-vous la clé d'autorisation pour votre bibliothèque de logiciels autorisés.
- Connectez-vous à MyIBM.com et faites défiler la page jusqu'à la section « Bibliothèque de logiciels pour conteneurs ». Cliquez sur Afficher la bibliothèque.
- Sur la page « Accéder à votre logiciel de conteneurs > Clés d'autorisation », cliquez sur « Copier la clé ». Cette clé autorise l'accès à tous les logiciels autorisés de votre bibliothèque de logiciels de conteneur.
-
Dans le projet où vous souhaitez déployer vos conteneurs autorisés, créez un secret d'extraction d'image afin de pouvoir accéder au registre autorisé
cp.icr.io. Utilisez la clé d'autorisation que vous avez précédemment extraite comme valeur--docker-password. Pour plus d'informations, voir Accès aux images stockées dans d'autres registres privés.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> -
Ajoutez le secret d'extraction d'image au compte de service de l'espace de noms de sorte que tous les conteneurs du projet puissent utiliser la clé d'autorisation afin d'extraire les images autorisées. Pour plus d'informations, voir Utilisation du secret d'extraction d'image pour déployer des conteneurs.
oc patch -n <project> serviceaccount/default --type='json' -p='[{"op":"add","path":"/imagePullSecrets/-","value":{"name":"entitled-cp-icr-io"}}]' -
Créez un pod dans le projet qui génère un conteneur à partir d'une image dans le registre autorisé.
oc run <pod_name> --image=cp.icr.io/<image_name> -n <project> --generator=run-pod/v1 -
Vérifiez que votre conteneur a pu être correctement généré à partir de l'image autorisée en vérifiant que le pod est à l'état En cours d'exécution (Running).
oc get pod <pod_name> -n <project>
Que faire ensuite ? Vous pouvez configurer le référentiel de chartes Helm entitled, où sont stockées les chartes Helm qui intègrent les logiciels autorisés. Si Helm est déjà
installé dans votre cluster, exécutez helm repo add entitled https://raw.githubusercontent.com/IBM/charts/master/repo/entitled.
Ajout d'un registre privé au secret d'extraction global
Nœuds de travail RHEL
Dans les clusters qui utilisent exclusivement des nœuds de travail RHEL, vous pouvez configurer un secret global de récupération d'images que chaque nœud de travail du cluster peut utiliser pour récupérer des images depuis un registre privé.
Par défaut, votre cluster Red Hat OpenShift on IBM Cloud comporte un secret d'extraction d'image global pour les registres suivants, de sorte que les composants Red Hat OpenShift par défaut puissent être déployés :
cloud.openshift.comquay.ioregistry.connect.redhat.comregistry.redhat.io
Ne remplacez pas le secret d'extraction global par un secret d'extraction qui ne possède pas de données d'identification permettant d'accéder aux registres Red Hat par défaut. Si vous le faites, les composants Red Hat OpenShift par défaut qui sont installés dans votre cluster, tel que OperatorHub, peuvent échouer car ils ne peuvent pas extraire des images de ces registres.
Avant de commencer :
- Téléchargez le package de ligne de commande du processeur JSON «
jq». Vous utilisezjqpour combiner la valeur JSON du secret d'extraction global par défaut avec le secret d'extraction de registre privé que vous souhaitez ajouter. - Accédez à votre cluster Red Hat OpenShift.
Pour ajouter des registre privés, éditez l'élément pull-secret global dans le projet openshift-config.
-
Créez une valeur de secret qui contient les données d'identification permettant d'accéder à votre registre privé et de stocker la valeur de secret décodée dans un fichier JSON. Lorsque vous créez la valeur de secret, les données d'identification sont automatiquement codées en base64. Si vous utilisez
--dry-run, seule la valeur de secret est créée et aucun objet secret n'est créé dans votre cluster. La valeur de secret décodée est ensuite stockée dans un fichier JSON afin d'être utilisée ultérieurement dans votre secret d'extraction global.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>- Obligatoire. Projet Red Hat OpenShift de votre cluster dans lequel vous désirez utiliser le secret et déployer des conteneurs. Pour afficher la liste des projets disponibles dans votre cluster, exécutez la commande
oc get ns. <secret_name>- Obligatoire. Nom que vous désirez utiliser comme secret d'extraction d'image.
--docker-server <registry_URL>- Obligatoire. URL du registre dans lequel sont stockées vos images privées.
--docker-username <docker_username>- Obligatoire. Nom d'utilisateur pour vous connecter à votre registre privé.
--docker-password <token_value>- Obligatoire. Mot de passe pour vous connecter à votre registre privé, par exemple, une valeur de jeton.
--docker-email <docker-email>- Obligatoire. Si vous en avez une, entrez votre adresse e-mail Docker. Si vous n'en avez pas, entrez une adresse e-mail fictive, telle que
a@b.c. Cette adresse e-mail est obligatoire pour créer un secret Kubernetes, mais n'est plus utilisée une fois la valeur créée. --dry-run=true- Sélectionnez cette option pour créer uniquement la valeur du secret, sans créer ni stocker l'objet secret dans votre cluster.
--output="jsonpath={.data.\.dockerconfigjson}"- Obtenez uniquement la valeur
.dockerconfigjsonà partir de la section data du secret Kubernetes. | base64 --decode > myregistryconfigjson- Téléchargez les données de secret décodées dans un fichier
myregistryconfigjsonlocal.
-
Extrayez la valeur de secret décodée du secret d'extraction global par défaut et stockez la valeur dans un fichier
dockerconfigjson.oc get secret pull-secret -n openshift-config --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode > dockerconfigjson -
Combinez le fichier
myregistryconfigjsondu secret d'extraction de registre privé téléchargé au fichierdockerconfigjsondu secret d'extraction global par défaut.jq -s '.[0] * .[1]' dockerconfigjson myregistryconfigjson > dockerconfigjson-merged -
Mettez à jour le secret d'extraction global avec le fichier
dockerconfigjson-mergedcombiné.oc set data secret/pull-secret -n openshift-config --from-file=.dockerconfigjson=dockerconfigjson-merged -
Vérifiez que le secret d'extraction global a été mis à jour. Assurez-vous que votre registre privé et chacun des registres Red Hat par défaut figurent dans la sortie de la commande ci-après.
oc get secret pull-secret -n openshift-config --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decodeExemple de sortie
{ "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>" } } } -
Pour sélectionner les modifications de configuration globales, rechargez tous les nœuds worker de votre cluster.
- Notez l'ID des noeuds worker de votre cluster.
ibmcloud oc worker ls -c <cluster_name_or_ID> ``` 1. **Pour les clusters classiques** Rechargez chaque noeud worker. Vous pouvez recharger plusieurs nœuds de travail en spécifiant plusieurs options « `-w` », mais veillez à laisser suffisamment de nœuds de travail en cours d'exécution simultanément pour vos applications afin d'éviter toute interruption de service. ```sh {: pre} ibmcloud oc worker reload -c <cluster_name_or_ID> -w <workerID_1> -w <workerID_2> ``` 1. **Pour les clusters de VPC** Remplacez chaque noeud worker. Avant de commencer, vérifiez votre cluster dispose de suffisamment d'autres noeuds worker pour que vos pods puissent être replanifiés et continuent à s'exécuter. ```sh {: pre} ibmcloud oc worker replace --cluster <cluster_name_or_ID> --worker <worker_node_ID> ``` -
Une fois les noeuds worker de nouveau à un état sain, vérifiez que le secret d'extraction global est mis à jour sur un noeud worker.
- Démarrez un pod de débogage pour vous connecter à un noeud worker. Utilisez l'IP privée que vous avez extrait précédemment pour
<node_name>.
oc debug node/<node_name> ``` 1. Remplacez le répertoire racine par l'hôte de manière à pouvoir visualiser les fichiers du noeud worker. ```sh {: pre} chroot /host ``` 1. Vérifiez que le fichier de configuration Docker comporte les données d'identification de registre correspondant au secret d'extraction global que vous avez défini. ```sh {: pre} vi /.docker/config.json ``` - Démarrez un pod de débogage pour vous connecter à un noeud worker. Utilisez l'IP privée que vous avez extrait précédemment pour
Mise à jour du secret global de récupération
Nœuds de travail RHCOS Nœuds de travail RHEL
Dans les clusters qui utilisent des travailleurs RHCOS ou une combinaison de travailleurs RHCOS et RHEL, vous pouvez suivre les étapes suivantes pour mettre à jour le secret d'extraction global dans votre cluster Red Hat OpenShift on IBM Cloud.
Par défaut, votre cluster Red Hat OpenShift on IBM Cloud comporte un secret d'extraction d'image global pour les registres suivants, de sorte que les composants Red Hat OpenShift par défaut puissent être déployés :
cloud.openshift.comquay.ioregistry.connect.redhat.comregistry.redhat.io
Ne remplacez pas le secret d'extraction global par un secret d'extraction qui ne possède pas de données d'identification permettant d'accéder aux registres Red Hat par défaut. Si vous le faites, les composants Red Hat OpenShift par défaut qui sont installés dans votre cluster, tel que OperatorHub, peuvent échouer car ils ne peuvent pas extraire des images de ces registres.
- Créez un secret contenant les informations d'identification du registre que vous souhaitez utiliser.
oc create secret docker-registry docker-auth-secret \ --docker-server=REGISTRY \ --docker-username=USERNAME \ --docker-password=PASSWORD \ --namespace kube-system - Créez un DaemonSet pour appliquer le secret à tous les nœuds de travail.
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 - Vérifiez que les pods sont en cours d'exécution.
oc get daemonset -n kube-system update-docker-config
Mise à jour d'une configuration de registre personnalisé containeurisé IBM Cloud Kubernetes Service
Avec Kubernetes version 1.22 ou ultérieure, vous pouvez utiliser des fichiers de configuration conteneurisé sur les nœuds worker pour configurer le retrait à partir d'un registre de conteneur. Vous pouvez utiliser une définition de démon pour mettre à jour les configurations sur tous les nœuds d'un cluster, ce qui empêche les configurations d'être supprimées lorsque des nœuds worker rechargent ou lorsque de nouveaux travailleurs sont ajoutés.
Exemple de définition de démon pour mettre à jour une configuration de registre personnalisé conteneurisée
Utilisez l'exemple de fichier YAML pour définir une définition de démon qui s'exécute sur tous les nœuds worker pour définir ou mettre à jour une configuration d'hôte de registre conteneurisée et monter sur le chemin de registre conteneurisé correspondant.
L'exemple définit la configuration d'hôte de registre suivante pour dockerhub. Cette configuration d'hôte de registre est déjà fournie et configurée automatiquement lors de la phase d'application des accès des nœuds worker. Le conteneur «
init » initialise « hosts.toml » sur chaque nœud de travail après le déploiement, ainsi qu’après le rechargement ou le redémarrage des nœuds de travail.
server = "https://docker.io"
[host."https://registry-1.docker.io"]
capabilities = ["pull", "resolve"]
Exemple de fichier 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/
Pour plus d'informations sur la mise à jour d'une configuration d'hôte de registre containerd, voir la documentation containerd.