Usa Container Registry con Google Cloud

Los recursos de procesamiento en Google Cloud se integran a Container Registry para facilitar el acceso. En este documento, se describe la configuración de acceso necesaria para enviar y extraer imágenes dentro de Google Cloud.

Requisitos

Se deben configurar los permisos correctos y los permisos de acceso para las VM que se utilizan a fin de extraer o enviar imágenes.

Permisos de IAM

Se deben configurar permisos de IAM para la cuenta de servicio que accede al depósito de almacenamiento de Container Registry.

  • A fin de extraer imágenes privadas de Docker, la cuenta de servicio que usan las instancias de VM debe tener un permiso read para el depósito de almacenamiento de la imagen.
  • A fin de enviar imágenes privadas de Docker, la cuenta de servicio que usan las instancias de VM debe tener un permiso read-write o full-control para el depósito de almacenamiento de la imagen.

Consulta Configura el control de acceso para obtener detalles sobre los permisos necesarios.

Permisos de acceso

Los permisos de acceso definen los permisos de OAuth predeterminados que se usan en las solicitudes de la herramienta de gcloud. Las instancias de VM que envían o extraen imágenes deben tener configurado el permiso de acceso de almacenamiento correcto para funcionar sin problemas con Container Registry.

Solo para extraer imágenes, configura el permiso read-only en tus depósitos de Storage. Para enviar y extraer imágenes, configura el permiso read-write en los depósitos de Storage.

Configura permisos en una instancia de VM

A fin de crear una nueva instancia de VM y especificar el permiso, usa la opción --scope.

  • Para una instancia con permisos de "solo lectura", ejecuta el comando:

    gcloud compute instances create INSTANCE \
    --scopes https://www.googleapis.com/auth/devstorage.read_only
    
  • Para una instancia con permisos de "lectura y escritura", ejecuta el comando:

    gcloud compute instances create INSTANCE \
    --scopes https://www.googleapis.com/auth/devstorage.read_write
    

Para cambiar la cuenta de servicio de una instancia y los niveles de acceso, la instancia debe detenerse temporalmente. Con el fin de detener tu instancia, lee el documento con información sobre cómo detener una instancia. Después de cambiar la cuenta de servicio o los niveles de acceso, no olvides reiniciar la instancia. Usa uno de los siguientes comandos para cambiar la cuenta de servicio o los permisos de acceso de la instancia detenida.

  • Para configurar permisos de solo lectura, ejecuta el siguiente comando:

    gcloud compute instances set-service-account INSTANCE --scopes=storage-ro
    
  • Para configurar permisos de lectura y escritura, ejecuta el siguiente comando:

    gcloud compute instances set-service-account INSTANCE --scopes=storage-rw
    

Configura permisos en un clúster de Google Kubernetes Engine

De forma predeterminada, los clústeres nuevos de Google Kubernetes Engine se crean con permisos de solo lectura para los depósitos de almacenamiento. A fin de configurar el permiso de almacenamiento read-write cuando creas un clúster de Google Kubernetes Engine, usa la opción --scopes. Por ejemplo, el siguiente comando crea un clúster con los permisos bigquery,

`storage-rw`, and `compute-ro`:

    gcloud container clusters create example-cluster \
  --scopes=bigquery,storage-rw,compute-ro

Para obtener más información sobre los permisos que puedes configurar cuando creas un clúster nuevo, consulta la documentación del comando gcloud container clusters create.

Compute Engine

Si la instancia de VM para enviar o extraer imágenes y el depósito de almacenamiento de Container Registry están en el mismo proyecto de Google Cloud, la cuenta de servicio predeterminada de Compute Engine se configura con los permisos necesarios para enviar o extraer imágenes. Si la instancia de VM se encuentra en otro proyecto o si utiliza una cuenta de servicio diferente, debes configurar el acceso en el depósito de almacenamiento utilizado por el repositorio.

De forma predeterminada, una VM de Compute Engine tiene el permiso de acceso read-only configurado para depósitos de almacenamiento. Para enviar imágenes de Docker privadas, tu instancia debe tener configurado el permiso de acceso de almacenamiento read-write como se describe en Permisos de acceso.

Instancias de Compute Engine optimizadas para contenedores

A fin de obtener información sobre cómo iniciar una instancia de Compute Engine optimizada para contenedores con una imagen de tu registro, consulta cómo iniciar un contenedor de Docker a través de Cloud-Config.

Para obtener más información, consulta Cómo crear y configurar instancias.

Google Kubernetes Engine

Google Kubernetes Engine usa la cuenta de servicio configurada en las instancias de VM de los nodos del clúster para enviar y extraer imágenes.

Si el clúster de Google Kubernetes Engine y el depósito de almacenamiento de Container Registry están en el mismo proyecto de Google Cloud, la cuenta de servicio predeterminada de Compute Engine se configura con los permisos adecuados para enviar o extraer imágenes. Si el clúster está en un proyecto diferente o si las VM del clúster usan una cuenta de servicio diferente, debes configurar el acceso en el depósito de almacenamiento que usa el repositorio.

De forma predeterminada, una VM de Compute Engine tiene el permiso de acceso read-only configurado para depósitos de almacenamiento. Para enviar imágenes de Docker privadas, tu instancia debe tener configurado el permiso de acceso de almacenamiento read-write como se describe en Permisos de acceso.

Ejecuta una imagen

Puedes ejecutar una imagen de Container Registry en un clúster de Google Kubernetes Engine con el siguiente comando:

kubectl run [NAME] --image=[HOSTNAME]/[PROJECT-ID]/[IMAGE]:[TAG]

donde:

  • [NAME] es el nombre del recurso.
  • [HOSTNAME] aparece bajo Location en la consola. Es una de estas cuatro opciones: gcr.io, us.gcr.io, eu.gcr.io o asia.gcr.io.
  • [PROJECT-ID] es el ID de tu proyecto de Google Cloud Console. Si el ID de tu proyecto contiene dos puntos (:), consulta Proyectos con alcance de dominio.
  • [IMAGE] es el nombre de la imagen en Container Registry.
  • [TAG] es la etiqueta que identifica la versión de la imagen en Container Registry. Si no especificas una etiqueta, Container Registry buscará la etiqueta predeterminada latest.

Para obtener más información sobre los comandos de Kubernetes, consulta la página de descripción general de kubectl. Si tus imágenes están en otro proyecto, debes otorgar explícitamente acceso de lectura a la cuenta de servicio que usa el clúster de Google Kubernetes Engine en el depósito de almacenamiento en que se guardan las imágenes.

Entorno flexible de App Engine

Puedes usar el Entorno flexible de App Engine para personalizar un entorno de ejecución existente (como Java 8) o proporcionar tu propio entorno de ejecución mediante una imagen personalizada de Docker o un Dockerfile.

El entorno flexible compila automáticamente tus imágenes de contenedor con Cloud Build y las almacena en Container Registry.

Si la instancia de VM que usas para enviar o extraer imágenes y el depósito de almacenamiento de Container Registry están en el mismo proyecto de Google Cloud, la cuenta de servicio predeterminada de Compute Engine está configurada con los permisos correspondientes para enviar o extraer imágenes. Si las VM están en un proyecto diferente o si usan otra cuenta de servicio, debes configurar el acceso al depósito de almacenamiento que usa el repositorio.

De forma predeterminada, una VM de Compute Engine tiene el permiso de acceso read-only configurado para depósitos de almacenamiento. Para enviar imágenes de Docker privadas, tu instancia debe tener configurado el permiso de acceso de almacenamiento read-write como se describe en Permisos de acceso.

Implementa en App Engine

Puedes implementar una imagen alojada por Container Registry en App Engine con la herramienta de línea de comandos de gcloud.

Puedes usar el comando gcloud beta app gen-config en el directorio raíz de tu imagen a fin de crear automáticamente el archivo app.yaml necesario para realizar la implementación en App Engine. También puedes escribir el archivo tú mismo.

Una vez que crees el archivo de configuración de App Engine, compiles tu imagen de Docker y la envíes a Container Registry, puedes implementar la imagen en App Engine con el siguiente comando:

gcloud app deploy --image-url=[HOSTNAME]/[PROJECT-ID]/[IMAGE]:[TAG]

donde:

  • [HOSTNAME] aparece bajo Location en la consola. Es una de estas cuatro opciones: gcr.io, us.gcr.io, eu.gcr.io o asia.gcr.io.
  • [PROJECT-ID] es el ID de tu proyecto de Google Cloud Console. Si el ID de tu proyecto contiene dos puntos (:), consulta Proyectos con alcance de dominio.
  • [IMAGE] es el nombre de la imagen en Container Registry.
  • [TAG] es la etiqueta que identifica la versión de la imagen en Container Registry. Si no especificas una etiqueta, Container Registry buscará la etiqueta predeterminada latest.