Implementa imágenes de contenedor

En esta página, se describe cómo implementar servicios nuevos y revisiones nuevas en Cloud Run.

Permisos necesarios para realizar una implementación

Los requisitos de permisos varían según la plataforma de Cloud Run.

Implementa en Cloud Run (completamente administrado)

Debes tener UNA de las siguientes funciones:

  • Propietario
  • Editor
  • Las funciones de administrador de Cloud Run y usuario de cuenta de servicio
  • Cualquier función personalizada que incluya esta lista específica de permisos

Implementa en Cloud Run for Anthos en Google Cloud

Necesitas permisos para crear, actualizar y borrar en el apiGroup serving.knative.dev y en el tipo Service; además, debes tener UNA de las siguientes funciones:

  • Propietario
  • Editor
  • Administrador de GKE
  • Desarrollador de GKE

Imágenes que puedes implementar

No hay un límite de tamaño que se aplique a la imagen de contenedor que puedes implementar.

Imágenes implementadas en Cloud Run (completamente administrado)

Puedes implementar imágenes de contenedor almacenadas en Container Registry o Artifact Registry. Solo puedes usar los siguientes tipos de imágenes de contenedor:

Imágenes implementadas en Cloud Run for Anthos

Puedes usar contenedores desde cualquier registro de contenedores, como Docker Hub. Para obtener información sobre la implementación de imágenes privadas de registros diferentes de Container Registry o Artifact Registry, consulta Implementa imágenes de contenedor privadas de otros registros de contenedores.

Implementa un servicio nuevo

Puedes especificar una imagen de contenedor con una etiqueta (por ejemplo, gcr.io/my-project/my-image:latest) o con un resumen exacto (por ejemplo, gcr.io/my-project/my-image@sha256:41f34ab970ee...).

Cuando implementas en un servicio por primera vez, se crea su primera revisión. Ten en cuenta que las revisiones son inmutables. Si implementas desde una etiqueta de imagen de contenedor, se resolverá en un resumen y la revisión siempre entregará este resumen en particular.

Puedes implementar un contenedor mediante Cloud Console, la línea de comandos de gcloud o desde un archivo de configuración YAML.

Haz clic en la pestaña para obtener instrucciones de la herramienta que elijas.

Console

Para implementar una imagen de contenedor, sigue estos pasos:

  1. Ve a Cloud Run

  2. Haz clic en Crear servicio para mostrar la página Create service (Crear servicio).

    create-service-image

    En el formulario, haz lo siguiente:

    1. Selecciona la plataforma de Cloud Run en la que realizas la implementación:

      • Cloud Run (completamente administrado) para implementar en un entorno completamente administrado
      • Cloud Run for Anthos en Google Cloud para implementar en un clúster de GKE o GKE On-Prem con Cloud Run for Anthos en Google Cloud habilitado
    2. Si implementas en Cloud Run (completamente administrado), sigue estos pasos:

      1. Selecciona la región donde quieres que se ubique el servicio.

      2. Ingresa el nombre del servicio que quieras. Los nombres de servicio deben ser únicos por región y proyecto o por clúster. Un nombre de servicio no se puede cambiar más adelante y es visible de forma pública cuando se usa Cloud Run (completamente administrado).

      3. En Authentication (Autenticación), haz lo siguiente:

        • Si creas una API o un sitio web públicos, selecciona Permitir invocaciones no autenticadas. Si seleccionas esta opción, se asigna la función de invocador de IAM al identificador especial allUser. Puedes usar IAM para editar esta configuración más adelante una vez que hayas creado el servicio.
        • Si quieres tener un servicio seguro protegido por autenticación, selecciona Solicitar autenticación.
    3. Si implementas en Cloud Run for Anthos, sigue estos pasos:

      1. En el menú desplegable, selecciona uno de los clústeres de GKE disponibles para tu servicio.

      2. Ingresa el nombre del servicio que quieras. Los nombres de servicio deben ser únicos por región y proyecto o por clúster. El nombre de un servicio no se puede cambiar más adelante.

      3. En Conectividad, haz lo siguiente:

        • Selecciona Interno si deseas restringir el acceso solo a otros servicios de Cloud Run for Anthos en Google Cloud o a servicios en tu clúster que usan Istio.
        • Selecciona Externo para permitir el acceso externo a tu servicio.

        Ten en cuenta que puedes cambiar la opción de conectividad en cualquier momento, como se describe en Cambia la configuración de conectividad del servicio.

    4. Haz clic en Siguiente para ir a la segunda página del formulario de creación de servicios:

      imagen

      En el formulario, haz lo siguiente:

      1. En el cuadro de texto URL de la imagen de contenedor, ingresa la URL de una imagen de un registro compatible, por ejemplo, gcr.io/cloudrun/hello.

      2. De manera opcional, haz clic en Show Advanced Settings y en las siguientes pestañas para establecer lo siguiente:

      3. Haz clic en Crear para implementar la imagen en Cloud Run y espera a que termine la implementación.

  3. Haz clic en el vínculo de la URL que se muestra para abrir el extremo único y estable del servicio implementado.

Línea de comandos

Para implementar una imagen de contenedor, sigue estos pasos:

  1. Ejecuta este comando:

    gcloud run deploy SERVICE --image IMAGE_URL

    • Reemplaza SERVICE por el nombre del servicio en el que deseas implementar. Si aún no existe, con este comando se crea el servicio durante la implementación. Puedes omitir este parámetro por completo, pero se te solicitará el nombre del servicio si lo haces.
    • Reemplaza IMAGE_URL por una referencia a la imagen de contenedor, como gcr.io/myproject/my-image:latest.

      Si implementas en Cloud Run (completamente administrado) y creas una API o un sitio web públicos, puedes permitir invocaciones no autenticadas de tu servicio mediante la marca --allow-unauthenticated. Así asignas la función de IAM de invocador de Cloud Run a allUsers. También puedes especificar --no-allow-unauthenticated para prohibir invocaciones no autenticadas. Si omites cualquiera de estas marcas, se te solicitará que confirmes cuando se ejecute el comando deploy.

      Si implementas en Cloud Run for Anthos en Google Cloud, puedes configurar las opciones de conectividad con la marca --connectivity como se describe en Cambia la configuración de conectividad del servicio para especificar el acceso interno o externo.

      Si implementas en Cloud Run for Anthos en Google Cloud y usas un espacio de nombres distinto del predeterminado, también debes especificar ese espacio de nombres mediante el parámetro --namespace.

  2. Espera a que finalice la implementación. Una vez que la compilación se completa de manera correcta, se muestra un mensaje de éxito, además de la URL del servicio implementado.

Ten en cuenta que para implementar en una ubicación diferente de la que estableciste mediante las propiedades de gcloud run/region o run/cluster y run/cluster_location, debes usar estos comandos:

  • Cloud Run:
    gcloud run deploy SERVICE --platform managed --region REGION
  • Cloud Run for Anthos en Google Cloud:
    gcloud run deploy SERVICE --platform gke --cluster CLUSTER-NAME --cluster-location CLUSTER-LOCATION
  • Cloud Run for Anthos local:
    gcloud run deploy SERVICE --platform kubernetes --kubeconfig KUBECONFIG-FILE

YAML

Puedes almacenar la especificación de servicio en un archivo YAML y, luego, implementarla con la línea de comandos de gcloud.

  1. Crea un archivo service.yaml nuevo con este contenido:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          containers:
          - image: IMAGE

    Reemplaza los siguientes elementos:

    • SERVICE por el nombre del servicio de Cloud Run
    • IMAGE por la URL de la imagen de contenedor

    También puedes especificar más opciones de configuración, como variables de entorno o límites de memoria.

  2. Implementa el servicio nuevo mediante el siguiente comando:

    gcloud beta run services replace service.yaml
  3. De manera opcional, haz que tu servicio sea público si deseas permitir el acceso sin autenticación.

Cloud Code

Para implementar con Cloud Code, consulta las guías de IntelliJ y Visual Studio Code.

Terraform

Si usas Terraform, puedes definir tu servicio en una configuración de Terraform con el recurso google_cloud_run_service del proveedor de Google Cloud Platform.

  1. Crea un archivo main.tf nuevo con este contenido:

    provider "google" {
        project = "PROJECT-ID"
    }
    
    resource "google_cloud_run_service" "default" {
        name     = "SERVICE"
        location = "REGION"
    
        metadata {
          annotations = {
            "run.googleapis.com/client-name" = "terraform"
          }
        }
    
        template {
          spec {
            containers {
              image = "gcr.io/PROJECT-ID/IMAGE"
            }
          }
        }
     }
    
     data "google_iam_policy" "noauth" {
       binding {
         role = "roles/run.invoker"
         members = ["allUsers"]
       }
     }
    
     resource "google_cloud_run_service_iam_policy" "noauth" {
       location    = google_cloud_run_service.default.location
       project     = google_cloud_run_service.default.project
       service     = google_cloud_run_service.default.name
    
       policy_data = data.google_iam_policy.noauth.policy_data
    }
    

    Reemplaza los siguientes elementos:

    • PROJECT-ID por el ID del proyecto de Google Cloud
    • REGION por la región de Google Cloud
    • SERVICE por el nombre del servicio de Cloud Run
    • IMAGE por el nombre de la imagen de contenedor

    La configuración anterior permite el acceso público (el equivalente a --allow-unauthenticated). Para que el servicio sea privado, quita las estrofas google_iam_policy y google_cloud_run_service_iam_policy.

  2. Inicializa Terraform mediante este comando:

    terraform init
  3. Aplica la configuración de Terraform:

    terraform apply

    Ingresa yes para confirmar que deseas aplicar las acciones descritas.

Ubicaciones de Cloud Run

Cloud Run es regional, lo que significa que la infraestructura que ejecuta los servicios se ubica en una región específica, y Google la administra para que esté disponible de manera redundante en todas las zonas de esa región.

El cumplimiento de los requisitos de latencia, disponibilidad o durabilidad es el factor principal para seleccionar la región en la que se ejecutan los servicios de Cloud Run. Por lo general, puedes seleccionar la región más cercana a los usuarios, pero debes considerar la ubicación de los otros productos de Google Cloud que usa el servicio de Cloud Run. Si usas productos de Google Cloud en varias ubicaciones, la latencia y el costo del servicio pueden verse afectados.

Cloud Run está disponible en las siguientes regiones:

Sujetas a los Precios del nivel 1

  • asia-east1 (Taiwán)
  • asia-northeast1 (Tokio)
  • asia-northeast2 (Osaka)
  • europe-north1 (Finlandia)
  • europe-west1 (Bélgica)
  • europe-west4 (Países Bajos)
  • us-central1 (Iowa)
  • us-east1 (Carolina del Sur)
  • us-east4 (Virginia del Norte)
  • us-west1 (Oregón)

Sujetas a los Precios del nivel 2

  • asia-east2 (Hong Kong)
  • asia-northeast3 (Seúl, Corea del Sur)
  • asia-southeast1 (Singapur)
  • asia-southeast2 (Yakarta)
  • asia-south1 (Bombay, India)
  • australia-southeast1 (Sídney)
  • europe-west2 (Londres, Reino Unido)
  • europe-west3 (Fráncfort, Alemania)
  • europe-west6 (Zúrich, Suiza)
  • northamerica-northeast1 (Montreal)
  • southamerica-east1 (São Paulo, Brasil)

Si ya creaste un servicio de Cloud Run, puedes ver la región en el panel de Cloud Run en Cloud Console.

Cada servicio tiene una URL única y permanente que no cambiará con el tiempo a medida que implementes revisiones nuevas.

Implementa una revisión nueva de un servicio existente

Puedes implementar una revisión nueva mediante Cloud Console, la línea de comandos de gcloud o un archivo de configuración YAML.

Ten en cuenta que cualquier cambio en la configuración hace que se cree una revisión nueva, incluso si no hay cambios en la imagen de contenedor. Cada revisión creada es inmutable.

Haz clic en la pestaña para obtener instrucciones de la herramienta que elijas.

Console

Para implementar una revisión nueva de un servicio existente, sigue estos pasos:

  1. Ve a Cloud Run

  2. Ubica el servicio que deseas actualizar en la lista de servicios y haz clic en él para abrir los detalles de ese servicio.

  3. Haz clic en EDITAR E IMPLEMENTAR NUEVA REVISIÓN. Esto muestra el formulario de implementación de revisión:

    imagen

  4. Si es necesario, proporciona la URL a la imagen de contenedor nueva que deseas implementar.

  5. De manera opcional, establece lo siguiente:

  6. Para enviar todo el tráfico a la revisión nueva, marca la casilla de verificación Publicar esta revisión de inmediato. A fin de lanzar una revisión nueva de forma gradual, desmarca esa casilla de verificación; esto dará como resultado una implementación en la que no se envíe tráfico a la revisión nueva. Sigue las instrucciones para los lanzamientos graduales después de la implementación.

  7. Haz clic en IMPLEMENTAR y espera a que finalice la implementación.

Línea de comandos

Para usar la línea de comandos, debes tener configurada la línea de comandos de gcloud.

Para implementar una imagen de contenedor, sigue estos pasos:

  1. Ejecuta este comando:

    gcloud run deploy SERVICE --image IMAGE_URL

    • Reemplaza SERVICE por el nombre del servicio en el que realizas la implementación. Puedes omitir este parámetro por completo, pero se te solicitará el nombre del servicio si lo haces.
    • Reemplaza IMAGE_URL por una referencia a la imagen de contenedor, como gcr.io/myproject/my-image:latest.

      Si implementas en Cloud Run for Anthos en Google Cloud y usas un espacio de nombres distinto del predeterminado, también debes especificar ese espacio de nombres mediante el parámetro --namespace.

      El sufijo de revisión se asigna de forma automática para las revisiones nuevas. Si deseas proporcionar tu propio sufijo de revisión, usa el parámetro de línea de comandos de gcloud --revision-suffix.

  2. Espera a que finalice la implementación. Una vez que la compilación se completa de manera correcta, se muestra un mensaje de éxito, además de la URL del servicio implementado.

YAML

Si necesitas descargar o ver la configuración de un servicio existente, usa el siguiente comando para guardar los resultados en un archivo YAML:

gcloud run services describe SERVICE --format export > service.yaml

Desde un archivo YAML de configuración de servicio, modifica cualquier atributo secundario spec.template como desees para actualizar la configuración de revisión y, luego, implementa la revisión nueva:

gcloud beta run services replace service.yaml

Cloud Code

Para implementar una nueva revisión de un servicio existente con Cloud Code, consulta las guías de IntelliJ y Visual Studio Code.

Terraform

Ya deberías haber configurado Terraform según el ejemplo de Implementa un servicio nuevo.

  1. Realiza un cambio en el archivo de configuración.

  2. Aplica la configuración de Terraform:

    terraform apply

    Ingresa yes para confirmar que deseas aplicar las acciones descritas.

Ubicaciones de Cloud Run

Cloud Run es regional, lo que significa que la infraestructura que ejecuta los servicios se ubica en una región específica, y Google la administra para que esté disponible de manera redundante en todas las zonas de esa región.

El cumplimiento de los requisitos de latencia, disponibilidad o durabilidad es el factor principal para seleccionar la región en la que se ejecutan los servicios de Cloud Run. Por lo general, puedes seleccionar la región más cercana a los usuarios, pero debes considerar la ubicación de los otros productos de Google Cloud que usa el servicio de Cloud Run. Si usas productos de Google Cloud en varias ubicaciones, la latencia y el costo del servicio pueden verse afectados.

Cloud Run está disponible en las siguientes regiones:

Sujetas a los Precios del nivel 1

  • asia-east1 (Taiwán)
  • asia-northeast1 (Tokio)
  • asia-northeast2 (Osaka)
  • europe-north1 (Finlandia)
  • europe-west1 (Bélgica)
  • europe-west4 (Países Bajos)
  • us-central1 (Iowa)
  • us-east1 (Carolina del Sur)
  • us-east4 (Virginia del Norte)
  • us-west1 (Oregón)

Sujetas a los Precios del nivel 2

  • asia-east2 (Hong Kong)
  • asia-northeast3 (Seúl, Corea del Sur)
  • asia-southeast1 (Singapur)
  • asia-southeast2 (Yakarta)
  • asia-south1 (Bombay, India)
  • australia-southeast1 (Sídney)
  • europe-west2 (Londres, Reino Unido)
  • europe-west3 (Fráncfort, Alemania)
  • europe-west6 (Zúrich, Suiza)
  • northamerica-northeast1 (Montreal)
  • southamerica-east1 (São Paulo, Brasil)

Si ya creaste un servicio de Cloud Run, puedes ver la región en el panel de Cloud Run en Cloud Console.

Implementa imágenes de otros proyectos de Google Cloud

Puedes implementar imágenes de contenedor de otros proyectos de Google Cloud si estableces los permisos de IAM correctos:

  1. En la consola de Cloud Console, abre el proyecto de tu servicio de Cloud Run.

  2. Ve a la página de IAM

  3. Realiza las siguientes acciones, según la ubicación en la que implementes:

  4. Abre el proyecto que posee el registro de contenedores que deseas usar.

  5. Ve a la página de IAM

  6. Haz clic en Agregar para agregar un miembro nuevo.

  7. En el cuadro de texto Nuevos miembros, pega el correo electrónico de la cuenta de servicio que copiaste antes.

  8. En la lista desplegable Seleccionar una función, selecciona la función Almacenamiento -> Visualizador de objetos de almacenamiento.

  9. Implementa la imagen del contenedor en el proyecto que contiene tu servicio de Cloud Run.

Implementa imágenes de contenedor privadas de otros registros de contenedores (Anthos)

En esta sección, se describe cómo configurar los permisos correctos para implementar imágenes de contenedor de un registro privado arbitrario en Cloud Run for Anthos. Un registro de contenedor privado requiere credenciales para acceder a la imagen de contenedor. Ten en cuenta que no necesitas seguir estos pasos para implementar imágenes de contenedor privadas desde Container Registry o Artifact Registry en el mismo proyecto que el clúster.

Para poder implementar una imagen de contenedor privada, debes crear un secreto de Kubernetes de tipo imagePullSecret y asociarlo con una cuenta de servicio:

  1. Crea un secreto imagePullSecret llamado container-registry:

    kubectl create secret container-registry \
    --docker-server=DOCKER_REGISTRY_SERVER \
    --docker-email=REGISTRY_EMAIL \
    --docker-username=REGISTRY_USER \
    --docker-password=REGISTRY_PASSWORD
    • Reemplaza DOCKER_REGISTRY_SERVER por tu FQDN de registro privado (p. ej., https://gcr.io/ para Container Registry o https://index.docker.io/v1/ para DockerHub).
    • Reemplaza REGISTRY_EMAIL por tu correo electrónico.
    • Reemplaza REGISTRY_USER por tu nombre de usuario de Container Registry.

      Si usas Container Registry o Artifact Registry y deseas almacenar y extraer credenciales de larga duración en lugar de pasar tokens de acceso de corta duración, consulta Métodos de autenticación: archivo de claves JSON.

    • Reemplaza REGISTRY_PASSWORD por tu contraseña de registro de contenedores.

  2. Abre tu cuenta de servicio predeterminada:

    kubectl edit serviceaccount default --namespace default

    Cada espacio de nombres en tu clúster de Kubernetes tiene una cuenta de servicio predeterminada llamada default. Esta cuenta de servicio predeterminada se usa para extraer tu imagen de contenedor, a menos que se especifique lo contrario en las especificaciones de revisión del servicio de Cloud Run for Anthos.

  3. Agrega el secreto imagePullSecret recién creado a tu cuenta de servicio predeterminada:

    imagePullSecrets:
    - name: container-registry
    

    Tu cuenta de servicio debería verse así:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: default
      namespace: default
      ...
    secrets:
    - name: default-token-zd84v
    # The secret we just created:
    imagePullSecrets:
    - name: container-registry
    

Ahora, todos los Pods nuevos creados en el espacio de nombres default actual tendrán definido el secreto imagePullSecret.

Implementa con la inyección automática del sidecar de Istio habilitada (Anthos)

Para implementar el servicio en el espacio de nombres con la inyección automática del sidecar de Istio habilitada, debes usar una instalación de Istio aparte.

Implementa servicios en una red interna (Anthos)

Implementar servicios en una red interna es útil para empresas que proporcionan apps internas a su personal y para servicios que se ejecutan fuera del clúster de Cloud Run for Anthos en Google Cloud.

Para implementar servicios en una red interna, consulta la página sobre cómo configurar una red interna privada.

¿Qué sigue?

Después de implementar un servicio nuevo, puedes hacer lo siguiente:

Puedes automatizar las implementaciones y compilaciones de los servicios de Cloud Run mediante el uso de activadores de Cloud Build.