Acceso a registros de contenedores
Las imágenes que utiliza IBM Cloud® Code Engine normalmente se almacenan en un registro que puede ser tanto de acceso público (registro público) como estar configurado con acceso limitado para un pequeño grupo de usuarios (registro privado).
Un registro de contenedor, o registro, es un servicio que almacena imágenes de contenedor. Por ejemplo, IBM Cloud Container Registry y Docker Hub son registros de contenedor. Un registro de contenedor puede ser público o privado. Para acceder a un registro de contenedor público no se requieren credenciales. En cambio, el acceso a un registro privado requiere credenciales.
Code Engine necesita acceder a los registros de contenedor para completar las acciones siguientes:
- Para recuperar (o "extraer") una imagen de contenedor para ejecutar una aplicación o un trabajo
- Para almacenar una imagen de contenedor recién creada como salida de una compilación de imagen
- Para almacenar y recuperar archivos locales cuando se ejecuta una compilación desde el origen local
Code Engine trata muchos de los detalles subyacentes de las interacciones entre el sistema y el registro.
Para extraer imágenes de un registro, Code Engine utiliza un tipo especial de secreto de Kubernetes que se denomina imagePullSecret. Este secreto de extracción de imágenes almacena las credenciales para acceder a un registro de contenedores.
Cuando añades acceso a un registro de contenedores con Code Engine para extraer imágenes, estás creando un secreto de extracción de imágenes. Para más información sobre los secretos de extracción de imágenes, consulte la documentación de Kubernetes.
Tipos de registros de imágenes
Las imágenes se almacenan normalmente en un registro que puede ser accesible para el público (registro público) o configurado con acceso limitado para un pequeño grupo de usuarios (registro privado).
Los registros públicos, como por ejemplo Docker Hub público, se pueden utilizar para familiarizarse con Docker y Code Engine para crear su primera aplicación o trabajo. Pero para cargas de trabajo de empresa, utilice un registro privado, como el que se proporciona en IBM Cloud Container Registry para proteger las imágenes de ser utilizadas por usuarios no autorizados. Para los registros privados, utilice secretos de registro para garantizar que las credenciales están disponibles para acceder al registro privado.
| Registry | Descripción |
|---|---|
| IBM Cloud Container Registry |
Con este tipo de registro, puede crear su propio repositorio de imágenes seguro en IBM Cloud Container Registry, donde podrá almacenar y compartir imágenes entre usuarios de forma segura.
|
| Cualquier otro registro privado |
Conecte cualquier registro privado existente a Code Engine mediante la adición de acceso. La adición de acceso guarda de forma segura el URL y las credenciales del registro en un secreto de Kubernetes.
|
| Public Docker Hub |
Utiliza este tipo de registro para extraer imágenes públicas existentes de Docker Hub directamente en tus aplicaciones o trabajos Code Engine. Importante:
Con Docker Hub, puede hacerlo:
|
Tipos de secretos de registro
Para acceder a las imágenes de un registro, Code Engine utiliza uno de los siguientes tipos de secretos de registro.
- Code Engine secreto gestionado - Si su registro utiliza un espacio de nombres IBM Cloud Container Registry que está en su cuenta, puede dejar que Code Engine cree y gestione el secreto de registro por usted. En la consola, este secreto de
registro creado automáticamente se denomina
Code Engine managed secret. En la CLI, el nombre de un secreto de registro creado automáticamente tiene el formatoce-auto-icr-private-<region>. - Secreto gestionado por el usuario - En este caso es crea y gestiona usted el secreto. Puede acceder a imágenes de su cuenta con una clave de API o utilizar una señal de acceso para el registro de contenedor de su elección; por ejemplo, Docker Hub. En este caso, el secreto de registro que aparece en la consola es el nombre de su secreto de registro.
Si su registro es público y no requiere credenciales; por ejemplo, Code Engine imágenes de muestra en icr.io/codeengine o Docker Hub público, entonces no necesita un secreto de registro. En este caso, el secreto de registro que
aparece en la consola es None.
Acceso a imágenes desde una cuenta pública
Si la imagen se almacena en un repositorio público, como por ejemplo un Docker Hub público, puede hacer referencia a la imagen directamente cuando despliegue la aplicación o ejecute el trabajo. Tenga en cuenta que aunque almacenar imágenes en un registro público está bien para familiarizarse con las aplicaciones y los trabajos, las imágenes de empresa deben almacenarse en un registro privado.
Acceso a imágenes en su propia cuenta desde la consola
Si accede a Code Engine desde una cuenta que posee o administra, Code Engine puede extraer y guardar imágenes automáticamente a y desde un espacio de nombres de IBM Cloud Container Registry de su cuenta cuando cree o actualice aplicaciones, trabajos o compilaciones desde la consola. Code Engine puede incluso crear un espacio de nombres por usted cuando guarde una imagen. Para obtener más información, consulte los temas siguientes.
Acceso a imágenes desde su cuenta con una clave de API
Si va a acceder a Code Engine con la CLI, primero debe crear una clave de API de IAM y, a continuación, guardar la clave de API de IAM como acceso de registro en Code Engine.
En los pasos siguientes se crea una clave de API que almacena las credenciales de un ID de usuario. En lugar de utilizar un ID de usuario, es posible que desee crear una clave de API para un ID de servicio que tenga una política de acceso al servicio de IBM Cloud IAM sobre IBM Cloud Container Registry. Si elige autenticar un ID de usuario, asegúrese de que el usuario sea un ID o plan funcional para que, en el caso de que el usuario abandone, Code Engine pueda seguir accediendo al registro.
Creación de una clave de API desde la consola
Para crear una clave de API de IBM Cloud IAM desde la consola,
-
Inicie Visión general de acceso (IAM).
-
Seleccione Claves de API.
-
Pulse Crear una clave de API de IBM Cloud.
-
Especifique un nombre y una descripción opcional para la clave de API y pulse Crear.
-
Copie la clave de API o pulse Descargar para guardarla.
No podrá volver a ver esta clave de API, así que asegúrese de guardarla en un lugar seguro.
Ahora que ha creado la clave de API, guárdela como acceso de registro.
Creación de una clave de API con la CLI
Para crear una clave de API de IBM Cloud IAM con la CLI, ejecute el mandato iam api-key-create. Por ejemplo, para crear
una clave API llamada cliapikey con una descripción de My CLI API key y guardarla en un archivo llamado key_file, ejecute el siguiente comando :
ibmcloud iam api-key-create cliapikey -d "My CLI API key" --file key_file
Si elige no guardar la clave en un archivo, debe registrar la clave de API que se visualiza durante la creación. No la podrá recuperarla más adelante.
Ahora que ha creado la clave de API, guárdela como acceso de registro.
Acceso a imágenes en una cuenta diferente
Puede asignar políticas de acceso de IBM Cloud IAM a usuarios o un ID de servicio para restringir los permisos a espacios de nombres de imágenes o a acciones específicas (como enviar o extraer). A continuación, cree una clave de API y almacene estas credenciales de registro en Code Engine.
Por ejemplo, para acceder a las imágenes de otras cuentas de IBM Cloud, cree una clave de API que almacene las credenciales de IBM Cloud Container Registry de un usuario o un ID de servicio en dicha cuenta. A continuación, en Code Engine, utilice esa clave para crear acceso en su cuenta.
Acceso a imágenes en una cuenta de Docker Hub privada
Para acceder a imágenes en una cuenta de Docker Hub privada, cree acceso de registro proporcionando la contraseña o una señal de acceso. Si utiliza una señal de acceso, puede otorgar y revocar más fácilmente el acceso a su cuenta de Docker Hub sin requerir un cambio de contraseña. Para obtener más información sobre los tokens de acceso y Docker Hub, consulte Crear y administrar tokens de acceso.
Después de decidir si desea utilizar la contraseña directamente o para crear una señal de acceso, cree el acceso de registro.
Adición de acceso de registro a Code Engine
Para configurar el acceso a IBM Cloud Container Registry en una cuenta IBM Cloud diferente, para extraer imágenes de una cuenta de Docker Hub privada o para extraer o enviar imágenes utilizando la CLI de Code Engine, puede utilizar la clave de API de IBM o la contraseña o la señal de acceso de Docker Hub para crear acceso de registro a través de Code Engine para almacenar la clave de autenticación o la señal para usted.
Adición de acceso de registro desde la consola
Antes de empezar, cree un proyecto.
- Una vez que su proyecto esté en estado Activo, haga clic en el nombre de su proyecto en la página Code Engine Projects.
- En la página Componentes, pulse Secretos y mapas de configuración.
- En la página Secretos y mapas de configuración, pulse Crear para crear el secreto.
- En la página Crear secreto o configmap, realice los pasos siguientes:
- Seleccione Secreto de registro y pulse Siguiente.
- Proporcione un nombre; por ejemplo,
mysecret-registry. - Especifique el registro de destino para este secreto, como por ejemplo IBM Cloud Container Registry o Docker Hub.
- Especifique la ubicación del registro.
- Especifique un nombre de usuario. Si este secreto es para IBM Cloud Container Registry, el nombre de usuario es
iamapikey. Si este secreto es para Docker Hub, es su ID de Docker. - Especifique las credenciales para el nombre de usuario. Para IBM Cloud Container Registry, utilice la clave de API de IAM. Para Docker Hub, puede utilizar la contraseña de Docker Hub o una señal de acceso. Para otros registros de destino, especifique la contraseña o la clave de API para el nombre de usuario.
- Pulse Crear para crear el secreto.
Ahora que su secreto está creado desde la consola, vaya a la página Secretos y configmaps para ver una lista de los secretos y configmaps definidos. Puede aplicar filtros para personalizar la lista para que se ajuste a sus necesidades.
Puede añadir acceso a un registro de contenedores cuando cree una aplicación o un trabajo o cuando cree una imagen. Pulse Configurar imagen y especifique la imagen del contenedor que se va a ejecutar, incluyendo el registro donde está almacenada la imagen y el acceso de registro que se debe utilizar para recuperar la imagen.
Adición de acceso de registro con la CLI
A partir de la versión de la CLI 1.42.0, la definición y el trabajo con secretos en la CLI se unifican bajo el grupo de comandos secret grupo de comandos. Consulte los mandatos ibmcloud ce secret.
Utilice la opción --format para especificar la categoría del secreto, como basic_auth, generic, hmac, ssh, tls o registry. Aunque puede seguir utilizando
el registry grupo de comandos, aproveche las ventajas del grupo de comandos unificado secret unificado. Para crear un secreto de acceso al registro de un contenedor, utilice el
comando ibmcloud ce secret create --format registry comando. Para obtener más información sobre cómo trabajar con secretos en Code Engine,
consulte Trabajar con secretos.
Para añadir acceso a IBM Cloud Container Registry o Docker Hub con la CLI, utilice el comando secret create --format registry comando. Este comando requiere un nombre del secreto de registro, la dirección URL
del servidor de registro y la información de nombre de usuario y contraseña para acceder al servidor de registro, y también permite otros argumentos opcionales. Para obtener una lista completa de opciones, consulte el comando ibmcloud ce secret create comando
Por ejemplo, el siguiente comando crea acceso de registro a una instancia de IBM Cloud Container Registry llamada myregistry que se encuentra en el servidor de registro us.icr.io:
ibmcloud ce secret create --format registry --name myregistry --server us.icr.io --username iamapikey --password API_KEY
Salida de ejemplo
Creating registry secret 'myregistry'...
OK
La siguiente tabla resume las opciones que se utilizan con el secret create --format registry comando en este ejemplo. Para obtener más información sobre el comando y sus opciones, consulte la sección ibmcloud ce secret create comando.
| Opción | Descripción |
|---|---|
--name |
El nombre del secreto de registro. Utilice un nombre que sea exclusivo dentro del proyecto. Este valor es obligatorio.
|
--server |
Especifique el URL del servidor de registro. Para Container Registry, el nombre de servidor es <region>.icr.io. Por ejemplo, us.icr.io. Para Docker Hub, el valor es
https://index.docker.io/v1/. |
--username |
Especifique el nombre de usuario para acceder al servidor de registro. Para Container Registry, el nombre es iamapikey. Para Docker Hub, es su ID de Docker. |
--password |
Especifique la contraseña de . Para Container Registry, la contraseña es la clave de API. Para Docker Hub, puede utilizar la contraseña de Docker Hub o una señal de acceso. |
Control del acceso a Container Registry para cargas de trabajo de Code Engine
Supongamos que desea controlar el acceso a IBM Cloud Container Registry cuando Code Engine extraiga imágenes. Por ejemplo, desea controlar el acceso a Container Registry a direcciones IP específicas. Tenga en cuenta los siguientes enfoques.
-
Utilice una restricción basada en contexto. Utilizando una restricción basada en contexto, si las direcciones IP para el proyecto Code Engine cambian alguna vez, no es necesario que cambie el acceso. Puede restringir el acceso a Container Registry a una zona de red, donde la zona de red incluye Code Engine y cualquier cosa que requiera acceso al registro.
-
Inhabilite el acceso público a IBM Cloud Container Registry y asegúrese de que Code Engine utilice los puntos finales privados en lugar de los puntos finales públicos. Consulte Protección de la conexión con Container Registry.
-
Para controlar el acceso mediante un rango de IP específico, utilice un punto final de API para captar las direcciones IP para el proyecto Code Engine concreto. Es importante tener en cuenta que estas direcciones IP están sujetas a cambios, y debe tomar las medidas adecuadas cuando esto suceda. Consulte Direcciones IP públicas y privadas deCode Engine y ¿Cómo puedo añadir mi aplicación Code Engine a una lista de elementos permitidos?
Consideraciones sobre las imágenes del registro
El nombre de la imagen que se utiliza para la app o el trabajo debe estar en uno de los formatos siguientes.
REGISTRY/NAMESPACEorDOCKERUSERorDOCKERORG/REPOSITORY:TAGdondeREGISTRYyTAGson opcionales. Si no se especificaREGISTRY, el valor predeterminado esdocker.io. Si no se especificaTAG, no incluya los dos puntos (:). El valor predeterminado paraTAGeslatest.REGISTRY/NAMESPACEorDOCKERUSERorDOCKERORG/REPOSITORY@IMAGEIDdondeREGISTRYes opcional. Si no se especificaREGISTRY, el valor predeterminado esdocker.ioyibmcomo organización de Docker.
| Componente | Caracteres permitidos | Longitud | Reglas adicionales |
|---|---|---|---|
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) |
Las partes del nombre de imagen deben cumplir los criterios siguientes.
REGISTRYdebe tener 253 caracteres o menos y puede contener letras minúsculas o mayúsculas, números, puntos (.), guiones (-) y subrayados (_). No utilice un guión (.) como último carácter. No utilice más de 127 puntos (.) y las etiquetas entre ellos pueden tener entre 1 y 63 caracteres de longitud.NAMESPACEdebe tener entre 4 y 30 caracteres y debe empezar y terminar con una letra o un número en minúsculas.NAMESPACEpuede contener caracteres alfanuméricos en minúsculas, guiones (-) y subrayados (_).DOCKERUSERorDOCKERORGse puede utilizar para registros de Docker en lugar deNAMESPACE. Especifique el nombre de usuario de Docker o la organización de Docker. El nombre de usuario y la organización de Docker deben tener entre 4 y 30 caracteres y contener sólo caracteres alfanuméricos en minúsculas o números.REPOSITORYdebe tener entre 2 y 255 caracteres y debe empezar y terminar con una letra o un número en minúsculas.REPOSITORYpuede contener caracteres alfanuméricos en minúsculas, barras inclinadas (/), puntos (.), guiones (-) y subrayados (_).TAGdebe tener entre 0 y 128 caracteres y puede contener letras minúsculas o mayúsculas, números, puntos (.), guiones (-) y subrayados (_). ElTAGno debe empezar con un punto o guión. Si no incluye unTAG, tampoco incluya los dos puntos.IMAGEIDtiene el prefijosha256:y puede contener letras y números en minúsculas.