Accès aux registres de conteneurs
Les images utilisées par IBM Cloud® Code Engine 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é).
Un registre de conteneur, ou registre, est un service qui stocke les images de conteneur. Par exemple, IBM Cloud Container Registry et Docker Hub sont des registres de conteneurs. Un registre de conteneurs peut être public ou privé. Un registre de conteneurs public ne requiert pas de données d'identification pour y accéder. En revanche, l'accès à un registre privé requiert des données d'identification.
Code Engine requiert l'accès aux registres de conteneurs pour effectuer les actions suivantes :
- Pour extraire (ou "tirer") une image de conteneur afin d'exécuter une application ou un travail
- Pour stocker une image de conteneur nouvellement créée en tant que sortie d'une génération d'image
- Pour stocker et extraire des fichiers locaux lorsqu'une génération est exécutée à partir de la source locale
Code Engine gère un grand nombre des détails sous-jacents des interactions entre le système et votre registre.
Pour extraire des images d'un registre, Code Engine utilise un type spécial de secret Kubernetes appelé imagePullSecret. Ce secret d'extraction d'image stocke les données d'identification permettant d'accéder à un registre de conteneur.
Lorsque vous ajoutez l'accès à un registre de conteneurs avec Code Engine pour extraire des images, vous créez un secret d'extraction d'image. Pour plus d'informations sur les secrets d'extraction d'images, voir la documentation de Kubernetes.
Types 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é).
Vous pouvez utiliser des registres publics tels qu'un registre Docker Hub public pour vous lancer sur Docker et Code Engine en vue de créer votre première application ou votre premier travail. Toutefois, lorsqu'il s'agit de charges de travail d'entreprise, utilisez un registre privé, tel que celui fourni dans IBM Cloud Container Registry pour protéger vos images d'être utilisées par des utilisateurs non autorisés. Pour les registres privés, utilisez des secrets de registre pour vous assurer que les informations d'identification sont disponibles pour accéder au registre privé.
| Registry | Description |
|---|---|
| IBM Cloud Container Registry |
Avec ce type de registre, vous pouvez créer votre propre dépôt d'images sécurisé sur IBM Cloud Container Registry, où vous pouvez stocker et partager des images en toute sécurité entre les utilisateurs.
|
| Tout autre registre privé |
Permet de connecter n'importe quel registre privé existant à Code Engine en ajoutant un accès. L'ajout d'un accès permet de sauvegarder en toute sécurité votre URL de registre et vos données d'identification dans un secret Kubernetes.
|
| Public Docker Hub |
Utilisez ce type de registre pour extraire des images publiques existantes de Docker Hub directement dans vos applications ou travaux Code Engine Important :
Avec public Docker Hub, vous pouvez :
|
Types de secrets de registre
Pour accéder aux images d'un registre, Code Engine utilise l'un des types de secrets de registre suivants.
- Code Engine secret géré - Si votre registre utilise un espace de noms IBM Cloud Container Registry qui se trouve dans votre compte, vous pouvez laisser Code Engine créer et gérer le secret du registre pour vous. Dans la console, ce secret
de registre créé automatiquement est appelé
Code Engine managed secret. Dans l'interface de gestion, le nom d'un secret de registre créé automatiquement est du formatce-auto-icr-private-<region>. - Secret géré par l'utilisateur - Il s'agit d'un secret que vous créez et gérez. Vous pouvez accéder aux images à partir de votre compte à l'aide d'une clé d'API ou utiliser un jeton d'accès pour le registre de conteneur de votre choix ; par exemple, Docker Hub. Dans ce cas, le secret de registre répertorié dans la console est le nom de votre secret de registre.
Si votre registre est public et ne nécessite pas d'informations d'identification; par exemple, Code Engine images échantillons dans icr.io/codeengine ou Docker Hub public, vous n'avez pas besoin d'un secret de registre. Dans ce
cas, le secret de registre répertorié dans la console est None.
Accès à des images à partir d'un compte public
Si votre image est stockée dans un référentiel public, tel qu'un référentiel Docker Hub public, il vous suffit de faire directement référence à l'image lorsque vous déployez votre application ou que vous exécutez votre travail. Bien qu'il soit possible de stocker des images dans un registre public lorsque vous commencez à utiliser des applications et des travaux, vous devez stocker vos images d'entreprise dans un registre privé.
Accès à des images de votre compte privé à partir de la console
Si vous accédez à Code Engine à partir d'un compte dont vous êtes propriétaire ou administrateur, Code Engine peut automatiquement appuyer et extraire des images vers et depuis un espace nom IBM Cloud Container Registry dans votre compte lorsque vous créez ou mettez à jour des applications, des travaux ou des générations à partir de la console. Code Engine peut même créer un espace de nom pour vous lorsque vous appuyez sur une image. Pour plus d'informations, reportez-vous aux rubriques suivantes.
- Déploiement d'une application qui fait référence à une image dans IBM Cloud Container Registry à l'aide de la console.
- Déploiement de votre application à partir du code source.
- Création d'un travail à partir d'images dans IBM Cloud Container Registry à l'aide de la console.
- Création d'un travail à partir du code source.
Accès à des images à partir de votre compte avec une clé d'API
Si vous accédez à Code Engine avec l'interface de ligne de commande, vous devez d'abord créer une clé d'API IAM, puis sauvegarder cette clé d'API IAM comme accès au registre dans Code Engine.
La procédure suivante permet de créer une clé d'API qui stocke les données d'identification d'un ID utilisateur. Au lieu d'utiliser un ID utilisateur, vous envisagerez peut-être de créer une clé d'API pour un ID de service disposant d'une règle d'accès au service IBM Cloud IAM pour IBM Cloud Container Registry. Si vous choisissez un ID utilisateur pour l'authentification, assurez-vous que l'utilisateur correspond à un ID fonctionnel ou dispose d'un plan au cas où il partirait afin que Code Engine puisse toujours accéder au registre.
Création d'une clé d'API à partir de la console
Pour créer une clé d'API IAM IBM Cloud à partir de la console :
-
Lancez IAM.
-
Sélectionnez Clés d'API.
-
Cliquez sur Créer une clé d'API IBM Cloud.
-
Entrez un nom et une description facultative pour votre clé d'API, puis cliquez sur Créer.
-
Copiez la clé d'API ou cliquez sur Télécharger pour la sauvegarder.
Vous ne pourrez plus réafficher cette clé d'API, par conséquent, prenez soin de l'enregistrer dans un endroit sûr.
Maintenant que vous avez créé votre clé d'API, enregistrez-la comme accès au registre.
Création d'une clé d'API via l'interface de ligne de commande
Pour créer une clé d'API IAM IBM Cloud via l'interface de ligne de commande, exécutez la commande iam api-key-create.
Par exemple, pour créer une clé API appelée cliapikey avec une description de My CLI API key et l'enregistrer dans un fichier appelé key_file, exécutez la commande suivante :
ibmcloud iam api-key-create cliapikey -d "My CLI API key" --file key_file
Si vous choisissez de ne pas sauvegarder votre clé dans un fichier, vous devez enregistrer la clé d'API qui s'affiche lors de sa création. Vous ne pourrez pas la récupérer ultérieurement.
Maintenant que vous avez créé votre clé d'API, enregistrez-la comme accès au registre.
Accès à des images dans un autre compte
Vous pouvez affecter des règles d'accès IAM IBM Cloud à des utilisateurs ou à un ID de service pour limiter les droits à des espaces de nom 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 Code Engine.
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 Code Engine, utilisez cette clé pour créer un accès dans votre compte.
Accès à des images dans un compte Docker Hub privé
Pour accéder à des images dans un compte Docker Hub privé, créez un accès au registre en fournissant votre mot de passe ou un jeton d'accès. En utilisant un jeton d'accès, vous pourrez plus facilement octroyer et révoquer un accès à votre compte Docker Hub sans requérir un changement de mot de passe. Pour plus d'informations sur les jetons d'accès et Docker Hub, voir Créer et gérer des jetons d'accès.
Après avoir choisi d'utiliser votre mot de passe directement ou de créer un jeton d'accès, créez votre accès au registre.
Ajout d'un accès au registre à Code Engine
Aux fins de configurer l'accès à IBM Cloud Container Registry dans un autre compte IBM Cloud, d'extraire des images d'un compte Docker Hub privé ou d'extraire ou d'envoyer des images à l'aide de l'interface de ligne de commande Code Engine, vous pouvez utiliser la clé d'API IBM ou le mot de passe ou jeton d'accès Docker Hub en vue de créer un accès au registre via Code Engine de sorte qu'il stocke votre clé d'authentification ou votre jeton pour vous.
Ajout d'un accès au registre à partir de la console
Avant de commencer, créez un projet.
- Une fois que votre projet est en statut actif, cliquez sur le nom de votre projet sur la page Code Engine Projects.
- Sur la page Composants, cliquez sur Secrets et mappes de configuration.
- Sur la page Secrets et mappes de configuration, cliquez sur Créer pour créer votre secret.
- Dans la page Créer un secret ou une mappe de configuration, procédez comme suit:
- Sélectionnez Registry secret et cliquez sur Next.
- Indiquez un nom; par exemple,
mysecret-registry. - Indiquez le registre cible de ce secret, tel que IBM Cloud Container Registry ou Docker Hub.
- Indiquez l'emplacement du registre.
- Indiquez un nom d'utilisateur. Si ce secret concerne IBM Cloud Container Registry, le nom d'utilisateur est
iamapikey. Si ce secret est destiné à Docker Hub, il s'agit de votre ID Docker. - Entrez les données d'identification pour le nom d'utilisateur. Pour IBM Cloud Container Registry, utilisez votre clé d'API IAM. Pour Docker Hub, vous pouvez utiliser votre mot de passe Docker Hub ou un jeton d'accès. Pour les autres registres cible, indiquez le mot de passe ou la clé d'API pour le nom d'utilisateur.
- Cliquez sur Créer pour créer le secret.
Maintenant que votre secret est créé à partir de la console, allez à la page Secrets et cartes de configuration pour voir la liste des secrets et cartes de configuration définis. Vous pouvez appliquer des filtres pour personnaliser la liste en fonction de vos besoins.
Vous pouvez ajouter un accès à un registre de conteneur lorsque vous créez une application ou un travail ou lorsque vous générez une image. Cliquez sur Configurer l'image et indiquez l'image du conteneur à exécuter, y compris le registre dans lequel l'image est stockée et l'accès au registre à utiliser pour extraire l'image.
Ajout d'un accès au registre via l'interface de ligne de commande
À partir de la version de l'interface de programmation 1.42.0, la définition et l'utilisation des secrets dans l'interface de programmation sont unifiées sous le groupe de commandes secret sous le groupe de commandes
Voir les commandes ibmcloud ce secret. Utilisez l'option --format pour spécifier la catégorie du secret, par exemple basic_auth,
generic, hmac, ssh, tls, ou registry. Bien que vous puissiez continuer à utiliser le groupe de commande registry vous pouvez continuer à utiliser
le groupe de commande, mais vous pouvez aussi tirer parti du groupe de commande unifié secret unifié. Pour créer un secret permettant d'accéder au registre d'un conteneur, utilisez la commande ibmcloud ce secret create --format registry pour créer un secret d'accès à un registre de conteneurs. Pour en savoir plus sur le travail avec les secrets dans Code Engine, voir Travailler avec des secrets.
Pour ajouter l'accès au Hub IBM Cloud Container Registry ou Docker à l'aide de la CLI, utilisez la commande secret create --format registry commande. Cette commande requiert le nom du secret du registre, le site
URL du serveur de registre, ainsi que le nom d'utilisateur et le mot de passe permettant d'accéder au serveur de registre, et autorise également d'autres arguments facultatifs. Pour une liste complète des options, voir la commande ibmcloud ce secret create pour obtenir la liste complète des options.
Par exemple, la commande suivante crée un accès de registre à une instance IBM Cloud Container Registry appelée myregistry qui se trouve sur le serveur de registre us.icr.io:
ibmcloud ce secret create --format registry --name myregistry --server us.icr.io --username iamapikey --password API_KEY
Exemple de sortie
Creating registry secret 'myregistry'...
OK
Le tableau suivant résume les options utilisées avec la commande secret create --format registry dans cet exemple. Pour plus d'informations sur la commande et ses options, voir la commande ibmcloud ce secret create pour plus d'informations.
| Option | Description |
|---|---|
--name |
Nom du secret de registre. Utilisez un nom unique dans le projet. Cette valeur est requise.
|
--server |
Entrez l'URL du serveur de registre. Pour Container Registry, le nom du serveur est <region>.icr.io. Par exemple, us.icr.io. Pour Docker Hub, la valeur est https://index.docker.io/v1/. |
--username |
Entrez le nom d'utilisateur permettant d'accéder au serveur de registre. Pour Container Registry, il s'agit de iamapikey. Pour Docker Hub, il s'agit de votre ID Docker. |
--password |
Entrez le mot de passe . Pour Container Registry, il s'agit de votre clé d'API. Pour Docker Hub, vous pouvez utiliser votre mot de passe Docker Hub ou un jeton d'accès. |
Contrôle de l'accès à Container Registry pour les charges de travail Code Engine
Supposons que vous souhaitiez contrôler l'accès à IBM Cloud Container Registry lorsque Code Engine extrait des images. Par exemple, vous souhaitez contrôler l'accès à Container Registry à des adresses IP spécifiques. Tenez compte des approches suivantes.
-
Utilisez une restriction basée sur le contexte. En utilisant une restriction basée sur le contexte, si les adresses IP de votre projet Code Engine changent, vous n'avez pas besoin de modifier votre accès. Vous pouvez restreindre l'accès à Container Registry à une zone réseau, où votre zone réseau inclut Code Engine et tout élément nécessitant un accès au registre.
-
Désactivez l'accès public à IBM Cloud Container Registry et assurez-vous que Code Engine utilise les noeuds finaux privés à la place des noeuds finaux publics. Voir Sécurisation de votre connexion à Container Registry.
-
Pour contrôler l'accès par une plage d'adresses IP spécifique, utilisez un noeud final d'API pour extraire les adresses IP de votre projet Code Engine particulier. Il est important de noter que ces adresses IP sont susceptibles d'être modifiées et que vous devez prendre les mesures appropriées lorsque cela se produit. Voir Code Engine adresses IP publiques et privées et Comment puis-je ajouter mon application Code Engine à une liste autorisée?
Remarques sur les images de votre registre
Le nom de votre image utilisée pour votre application ou votre travail doit être dans l'un des formats suivants.
REGISTRY/NAMESPACEorDOCKERUSERorDOCKERORG/REPOSITORY:TAGoùREGISTRYetTAGsont facultatifs. SiREGISTRYn'est pas spécifié, la valeur par défaut estdocker.io. SiTAGn'est pas spécifié, n'incluez pas le signe deux-points (:). La valeur par défaut pourTAGestlatest.REGISTRY/NAMESPACEorDOCKERUSERorDOCKERORG/REPOSITORY@IMAGEIDoùREGISTRYest facultatif. SiREGISTRYn'est pas spécifié, la valeur par défaut estdocker.ioetibmen tant qu'organisation Docker.
| Composant | Caractères autorisés | Longueur | Règles supplémentaires |
|---|---|---|---|
REGISTRY |
a-zA-Z0-9 -_. --__ |
1-253 | (0-127Periods)(label:1-63,noDashOnEnd) |
NAMESPACE |
a-z 0-9 -_ --__ |
4-30 | (start/end with letterOrNumber) |
DOCKERUSERorDOCKERORG |
a-z 0-9 |
4-30 | |
REPOSITORY |
a-z 0-9 -_. / |
2-255 | (start/end with letterOrNumber) |
TAG |
a-zA-Z0-9 -_. --__.. |
0-128 | (NOT start with periodOrDash) |
IMAGEID |
a-z 0-9 : |
(startwith sha256: noOtherColon) |
Les parties du nom de l'image doivent répondre aux critères suivants.
REGISTRYdoit comporter 253 caractères ou moins et peut contenir des lettres minuscules ou majuscules, des chiffres, des points (.), des traits d'union (-) et des traits de soulignement (_). N'utilisez pas de tiret (.) comme dernier caractère. N'utilisez pas plus de 127 points (.) et les libellés entre eux peuvent comporter entre 1 et 63 caractères.NAMESPACEdoit comporter entre 4 et 30 caractères et doit commencer et se terminer par une lettre minuscule ou un nombre.NAMESPACEpeut contenir des caractères alphanumériques en minuscules, des traits d'union (-) et des traits de soulignement (_).DOCKERUSERorDOCKERORGpeut être utilisé pour les registres Docker à la place deNAMESPACE. Indiquez votre nom d'utilisateur Docker ou votre organisation Docker. Votre nom d'utilisateur et votre organisation Docker doivent comporter entre 4 et 30 caractères et contenir uniquement des caractères alphanumériques en minuscules ou des chiffres.REPOSITORYdoit comporter entre 2 et 255 caractères et doit commencer et se terminer par une lettre minuscule ou un nombre.REPOSITORYpeut contenir des caractères alphanumériques en minuscules, des barres obliques (/), des points (.), des traits d'union (-) et des traits de soulignement (_).TAGdoit comporter entre 0 et 128 caractères et peut contenir des lettres minuscules ou majuscules, des chiffres, des points (.), des traits d'union (-) et des traits de soulignement (_). LeTAGne doit pas commencer par un point ou un tiret. Si vous n'incluez pas deTAG, n'incluez pas non plus le signe deux-points.IMAGEIDest préfixé avecsha256:et peut contenir des lettres minuscules et des chiffres.