Configuration d'un registre d'images
Planifiez et configurez un registre d'images de sorte que les développeurs puissent créer des conteneurs d'application dans IBM Cloud® Kubernetes Service à l'aide d'images Docker.
Planification de registres d'images
Les images sont généralement stockées dans un registre qui peut être accessible au public (registre public) ou configuré de sorte à limiter l'accès à un petit groupe d'utilisateurs (registre privé).
Des registres publics, tel que Docker Hub, peuvent être utilisés pour vous familiariser avec Docker et Kubernetes pour créer votre première application conteneurisée dans un cluster. Dans le cas d'applications d'entreprise, utilisez un registre privé, tel que celui fourni dans IBM Cloud Container Registry, pour empêcher l'utilisation et la modification de vos images par des utilisateurs non habilités. Les registres privés sont mis en place par l'administrateur du cluster pour garantir que les données d'identification pour accéder au registre privé sont disponibles aux utilisateurs du cluster.
Vous pouvez utiliser plusieurs registres avec IBM Cloud Kubernetes Service pour déployer des applications dans votre cluster.
| Registry | Description | Avantage |
|---|---|---|
| IBM Cloud Container Registry | Cette option vous permet de mettre en place votre propre référentiel d'images Docker sécurisé dans IBM Cloud Container Registry où vous pourrez stocker en sécurité vos images et les partager avec les autres utilisateurs du cluster. |
|
| Tout autre registre privé | Connectez tout registre privé existant à votre cluster en créant un secret d'extraction d'image. Cette valeur est utilisée pour enregistrer de manière sécurisée l'URL de votre registre et les données d'identification dans un secret Kubernetes. | Utilisation de registres privés existants indépendamment de leur source (Docker Hub, registres dont l'organisation est propriétaire, autres registres Cloud privés). |
| Centre public Docker | Utilisez cette option pour utiliser les images publiques existantes de Docker Hub directement dans votre déploiement Kubernetes lorsqu'aucun changement de Dockerfile n'est nécessaire. Remarque : gardez à l'esprit que cette option peut ne pas satisfaire les exigences de sécurité de votre organisation (par exemple, en matière de gestion des accès, d'analyse des vulnérabilités ou de protection des données confidentielles de l'application). |
Aucune configuration supplémentaire n'est nécessaire pour votre cluster.
|
Une fois que vous avez configuré un registre d'images, les utilisateurs du cluster peuvent utiliser les images pour déployer des applications dans le cluster.
Découvrez comment sécuriser vos informations personnelles lorsque vous utilisez des images de conteneur.
Comment autoriser votre cluster à extraire des images d'un registre privé ?
Pour extraire des images d'un registre, votre cluster IBM Cloud Kubernetes Service 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 uniquement depuis des espaces de noms de votre compte dans IBM Cloud Container Registry et pour déployer des conteneurs à partir de ces images dans l'espace de noms
Kubernetes default de votre cluster. Si vous devez extraire des images dans d'autres espace de noms 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 IBM Cloud Kubernetes Service est configuré pour extraire des images de tous les domaines IBM Cloud Container Registry icr.io depuis l'espace de noms Kubernetes default uniquement. Consultez
la Questions fréquemment posées suivante pour en savoir plus sur la façon d'extraire des images dans d'autres espaces de noms ou comptes Kubernetes, de restreindre l'accès à l'extraction, ou pour savoir pourquoi votre cluster n'a pas les
secrets d'extraction d'images par défaut.
- Comment mon cluster est-il configuré pour extraire des images de l'espace de noms
defaultKubernetes? - 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 à cet espace de noms Kubernetes. En utilisant des secrets d'extraction d'image, vos déploiements peuvent extraire des images (avec accès en lecture seule) depuis votre IBM Cloud Container Registry global et régional pour déployer des conteneurs dans l'espace de noms Kubernetesdefault.
- 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 se passe-t-il si je n'ai pas de secrets de tirage d'image dans l'espace de noms
defaultKubernetes? - Vous pouvez rechercher les secrets d'extraction d'image en vous connectant à votre cluster et en exécutant la commande
kubectl 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 restreindre l'accès au tirage à un certain registre régional?
- 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 extraire des images dans un espace de noms Kubernetes autre que
default? - Par défaut, non. Avec la configuration de cluster par défaut, vous pouvez déployer des conteneurs depuis n'importe quelle image qui est stockée dans votre espace de noms IBM Cloud Container Registry dans l'espace de noms Kubernetes
defaultde votre cluster. Pour utiliser ces images dans d'autres espaces de noms Kubernetes ou d'autres comptes IBM Cloud, vous pouvez copier ou créer vos propres secrets d'extraction d'image. - Puis-je extraire des images d'un autre compte IBM Cloud?
- Oui, créez une clé d'API dans le compte IBM Cloud que vous souhaitez utiliser. Ensuite, dans chaque espace de noms 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 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 des secrets de tirage d'image pour les domaines de registre régionaux et tous les domaines de registre. Lequel dois-je utiliser?
- Auparavant, IBM Cloud Kubernetes Service 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éé dans l'espace de noms 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 cet espace de noms 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éé une image pull secret dans un autre espace de noms Kubernetes, 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 qu'il utilise la connexion privée pour icr.io registries?
- 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 devez activer le nœud final de service de cloud privé pour vos clusters IBM Cloud Kubernetes Service.
Mise à jour de clusters existants pour utiliser le secret d'extraction d'image de la clé d'API
Les nouveaux clusters IBM Cloud Kubernetes Service 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. Pour les
clusters créés avant le 25 février 2019, vous devez mettre à jour votre cluster pour stocker une clé d'API au lieu d'un jeton de registre dans le secret d'extraction d'image.
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 IBM Cloud Kubernetes Service. 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érifier que le secret a été créé avec succès
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 ks 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. Ce secret d'extraction d'image se trouve dans l'espace de noms Kubernetes
default.ibmcloud ks cluster pull-secret apply --cluster <cluster_name_or_ID>Lorsque 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.
kubectl 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 que vous autorisez le trafic réseau sortant vers les sous-réseaux du registre pour les domaines que vous utilisez.
-
Effectuez la configuration à l'aide de l'une des options suivantes.
- Pour extraire des images dans d'autres espaces de noms Kubernetes 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 espaces de noms Kubernetes que
Utilisation d'un secret d'extraction d'image pour accéder à des images dans des registres privés externes
Configurez votre propre secret d'extraction d'image pour déployer des conteneurs dans d'autres espaces de noms Kubernetes que default, utiliser des images stockées dans d'autres comptes IBM Cloud ou utiliser des images stockées
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 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.
Les secrets d'extraction d'image sont valides uniquement pour les espaces de noms Kubernetes 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. Les images de DockerHub n'ont pas besoin de secrets d'extraction d'image.
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.
- Connectez-vous à votre compte. Le cas échéant, ciblez le groupe de ressources approprié. Définissez le contexte de votre cluster.
Pour utiliser votre propre secret d'extraction d'image, choisissez parmi les options suivantes :
- Copier le secret d'extraction d'image de l'espace de noms Kubernetes default dans d'autres espaces de noms 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 espace de noms 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 créé automatiquement pour l'espace de noms Kubernetes default dans d'autres espaces de noms de votre cluster. Si vous souhaitez utiliser d'autres données
d'identification de clé d'API IBM Cloud IAM pour cet espace de noms, par exemple, pour limiter l'accès à certains espaces de noms ou pour extraire des images d'autres comptes IBM Cloud, créez un secret d'extraction d'image à la place.
-
Répertoriez les espaces de noms Kubernetes disponibles dans votre cluster ou créez un espace de noms à utiliser.
kubectl get namespacesExemple de sortie
default Active 79d ibm-cert-store Active 79d ibm-system Active 79d kube-public Active 79d kube-system Active 79dPour créer un espace de noms :
kubectl create namespace <namespace_name> -
Répertoriez les secrets d'extraction d'image dans les espaces de noms Kubernetes
defaultpour IBM Cloud Container Registry.kubectl 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 l'espace de nomsdefaultvers l'espace de noms de votre choix. Les nouveaux secrets d'extraction d'image sont nommés<namespace_name>-icr-<region>-io.kubectl get secret all-icr-io -n default -o yaml | sed 's/default/<new-namespace>/g' | kubectl create -n <new-namespace> -f - -
Vérifiez que la création des secrets a abouti.
kubectl get secrets -n <namespace_name> | grep icr-io -
Pour déployer des conteneurs, ajoutez le secret d'exraction d'image à chaque déploiement ou au compte de service de l'espace de noms de sorte que n'importe quel déploiement de l'espace de noms 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 espace de noms 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 espaces de noms Kubernetes disponibles dans votre cluster ou créez un espace de noms à utiliser pour y déployer les conteneurs à partir de vos images de registre.
kubectl get namespacesExemple de sortie
default Active 79d ibm-cert-store Active 79d ibm-system Active 79d kube-public Active 79d kube-system Active 79dPour créer un espace de noms :
kubectl create namespace <namespace_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. Veillez à attribuer à l'ID de service une description vous permettant de le retrouver par la suite, par exemple en y incluant le nom du cluster et de l'espace de noms.
ibmcloud iam service-id-create <cluster_name>-<namespace>-id --description "Service ID for IBM Cloud Container Registry in Kubernetes cluster <cluster_name> namespace <namespace>" -
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é API de la même manière que votre identifiant de service et incluez l'identifiant 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>-<namespace>-key <cluster_name>-<namespace>-id --description "API key for service ID <service_id> in Kubernetes cluster <cluster_name> namespace <namespace>" -
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 l'espace de noms du cluster. Répétez cette étape pour chaque espace de noms de chaque cluster pour chaque domaine
icr.ioduquel vous souhaitez extraire des images.kubectl --namespace <namespace> create secret docker-registry <secret_name> --docker-server=<registry_URL> --docker-username=iamapikey --docker-password=<api_key_value> --docker-email=<docker_email>--namespace <namespace>- Obligatoire. Spécifiez l'espace de noms Kubernetes 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
<namespace>par le fichiernamespaceoù vous avez créé le secret d'extraction de l'image.kubectl get secrets --namespace <namespace>
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 :
- Créez un cluster.
- Connectez-vous à votre compte. Le cas échéant, ciblez le groupe de ressources approprié. Définissez le contexte de votre cluster.
Pour créer un secret d'extraction d'image :
-
Créez le secret Kubernetes pour stocker vos données d'identification de registre privé.
kubectl --namespace <namespace> create secret docker-registry <secret_name> --docker-server=<registry_URL> --docker-username=<docker_username> --docker-password=<docker_password> --docker-email=<docker_email>--namespace <namespace>- Obligatoire. Espace de noms Kubernetes de votre cluster dans lequel vous désirez utiliser le secret et déployer des conteneurs. Pour afficher la liste des espaces de noms disponibles dans votre cluster, exécutez la commande
kubectl get namespaces. <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
<namespace>par le nom de l'espace de nom dans lequel vous avez créé le secret d'extraction d'image.kubectl get secrets --namespace <namespace> -
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 un secret d'extraction 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 l'espace de nom.
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 espace de nom 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 espaces de noms Kubernetes 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.
Stocker un secret d'extraction d'image dans le compte de service Kubernetes pour l'espace de noms sélectionné
Tous les espaces de noms Kubernetes ont un compte de service Kubernetes nommé default. Dans l'espace de noms, 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 ne spécifient pas de compte de service utilisent automatiquement le compte de service default pour cet espace de nom Kubernetes.
-
Vérifiez s'il existe déjà un secret d'extraction d'image pour le compte de service default.
kubectl describe serviceaccount default -n <namespace_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.
kubectl patch -n <namespace_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.
kubectl patch -n <namespace_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.
kubectl describe serviceaccount default -n <namespace_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 dit
<secret> (not found), vérifiez que le secret d'extraction d'image existe dans le même espace de nom que votre compte de service en exécutantkubectl get secrets -n namespace. -
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/<namespace>/<image>:<tag> -
Créez le pod dans le cluster en appliquant le fichier de configuration
mypod.yaml.kubectl apply -f mypod.yaml
Configuration d'un cluster pour extraire un logiciel autorisé
Vous pouvez configurer votre cluster IBM Cloud Kubernetes Service 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 d'extraction d'image au compte de service Kubernetes de chaque espace de noms dans lequel vous souhaitez déployer ce logiciel autorisé.
Avant de commencer : Connectez-vous à votre compte. Le cas échéant, ciblez le groupe de ressources approprié. Définissez le contexte de votre cluster.
-
Procurez-vous la clé d'autorisation pour votre bibliothèque de logiciels autorisés.
- Connectez-vous à MyIBM.com et faites défiler jusqu'à la section " Container software library". Cliquez sur Afficher la bibliothèque.
- Sur la page Accès à votre logiciel de conteneur > 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 l'espace de noms 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.kubectl create secret docker-registry entitled-cp-icr-io --docker-server=cp.icr.io --docker-username=cp --docker-password=<entitlement_key> --docker-email=<docker_email> -n <namespace> -
Ajoutez le secret d'extraction d'image au compte de service de l'espace de noms de sorte que tous les conteneurs de l'espace de noms 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.
kubectl patch -n <namespace> serviceaccount/default --type='json' -p='[{"op":"add","path":"/imagePullSecrets/-","value":{"name":"entitled-cp-icr-io"}}]' -
Créez un pod dans l'espace de noms qui génère un conteneur à partir d'une image dans le registre autorisé.
kubectl run <pod_name> --image=cp.icr.io/<image_name> -n <namespace> --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).
kubectl get pod <pod_name> -n <namespace>
Que faire ensuite ? Vous pouvez configurer le référentiel de chartes Helm entitled, dans lequel les chartes Helm qui intègrent des logiciels autorisés sont stockées. Si Helm
est déjà installé dans votre cluster, exécutez helm repo add entitled https://raw.githubusercontent.com/IBM/charts/master/repo/entitled.
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 et 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.