Usa HTTP/2 (servicios)

En el caso de los servicios de Cloud Run, de forma predeterminada, Cloud Run pasa las solicitudes HTTP/2 a HTTP/1 cuando estas se envían al contenedor. Si deseas configurar explícitamente tu servicio para que use HTTP/2 de extremo a extremo, sin necesidad de cambiar a una versión inferior, puedes configurarlo para HTTP/2. En esta página, se muestra cómo realizar la configuración.

Para obtener más información sobre cómo invocar servicios mediante HTTP, consulta Invoca con una solicitud HTTPS.

Antes de configurar

El servicio de Cloud Run debe manejar las solicitudes en un formato de texto simple de HTTP/2 (h2c). La infraestructura de servicio de frontend de Google finaliza TLS y, luego, reenvía el tráfico h2c a Cloud Run y a tu contenedor a través de un canal encriptado.

Para confirmar que tu servicio admite solicitudes h2c, prueba el servicio de forma local mediante este comando cURL:

curl -i --http2-prior-knowledge http://localhost:PORT

Roles obligatorios

Para obtener los permisos que necesitas para configurar y, luego, implementar los servicios de Cloud Run, pídele a tu administrador que te otorgue los siguientes roles de IAM:

Para obtener una lista de los roles y los permisos de IAM asociados con Cloud Run, consulta Roles de IAM de Cloud Run y Permisos de IAM de Cloud Run. Si tu servicio de Cloud Run interactúa con las APIs de Google Cloud, como las bibliotecas cliente de Cloud, consulta la guía de configuración de identidades del servicio. Para obtener más información acerca de cómo otorgar roles, consulta Permisos de implementación y Administra el acceso.

Configura y actualiza HTTP/2 de extremo a extremo

Cualquier cambio en la configuración conlleva la creación de una revisión nueva. Las revisiones posteriores también adoptarán esta configuración de manera automática, a menos que realices actualizaciones explícitas para cambiarla.

Puedes especificar el uso de HTTP/2 de extremo a extremo con la consola de Google Cloud, la línea de comandos de gcloud o un archivo YAML cuando creas un servicio nuevo o implementas una revisión nueva:

Console

  1. En la consola de Google Cloud ve a Cloud Run:

    Ir a Cloud Run

  2. Haz clic en Implementar contenedor y selecciona Servicio para configurar un servicio nuevo. Si quieres configurar un servicio existente, haz clic en el servicio y, luego, en implementar y editar la nueva revisión.

  3. Si configuras un servicio nuevo, completa la página de configuración del servicio inicial como desees y haz clic en Contenedores, volúmenes, Herramientas de redes y seguridad para expandir la página de configuración del servicio.

  4. Haz clic en la pestaña Herramientas de redes.

    imagen

    • Selecciona la casilla de verificación Habilitar conexiones HTTP/2.
  5. Haz clic en Crear o Implementar.

gcloud

Puedes actualizar un servicio determinado para usar HTTP/2 mediante el siguiente comando:

gcloud run services update SERVICE --use-http2

SERVICE por el nombre del servicio

También puedes configurar tu servicio para que use HTTP/2 durante la implementación mediante el siguiente comando:

gcloud run deploy --image IMAGE_URL --use-http2

Reemplaza IMAGE_URL por una referencia a la imagen de contenedor, como us-docker.pkg.dev/cloudrun/container/hello:latest. Si usas Artifact Registry, el repositorio REPO_NAME debe estar creado. La URL tiene el formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.

YAML

  1. Si creas un servicio nuevo, omite este paso. Si actualizas un servicio existente, descarga su configuración de YAML:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Actualiza ports con el nombre h2c y containerPort con el puerto que elijas, como se muestra en el siguiente ejemplo:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          name: REVISION
        spec:
          containers:
          - image: IMAGE_URL
            ports:
            - name: h2c
              containerPort: 8080

    Reemplazar

    • SERVICE por el nombre del servicio de Cloud Run
    • IMAGE_URL por una referencia a la imagen del contenedor, como us-docker.pkg.dev/cloudrun/container/hello:latest Si usas Artifact Registry, el repositorio REPO_NAME debe estar creado. La URL tiene el formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
    • REVISION por un nombre de revisión nuevo o bórralo (si está presente). Si proporcionas un nuevo nombre de revisión, debe cumplir con los siguientes criterios:
      • Comienza con SERVICE-
      • Solo contiene letras minúsculas, números y -
      • No termina con -
      • No supera los 63 caracteres
  3. Crea o actualiza el servicio con el siguiente comando:

    gcloud run services replace service.yaml

Terraform

Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.

Agrega lo siguiente a un recurso google_cloud_run_v2_service en la configuración de Terraform, en template.containers. Si tu contenedor escucha solicitudes HTTP en un puerto que no sea 8080, reemplaza 8080 por ese número de puerto.

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service-h2c"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
      # Enable HTTP/2
      ports {
        name           = "h2c"
        container_port = 8080
      }
    }
  }
}

Ve la configuración de http/2

Para ver la configuración http/2 actual del servicio de Cloud Run, sigue estos pasos:

Console

  1. En la consola de Google Cloud ve a Cloud Run:

    Ir a Cloud Run

  2. Haz clic en el servicio que te interesa para abrir la página Detalles del servicio.

  3. Haz clic en la pestaña Revisiones.

  4. En el panel de detalles a la derecha, la configuración de http/2 se encuentra en la pestaña Herramientas de redes.

gcloud

  1. Usa el siguiente comando:

    gcloud run services describe SERVICE
  2. Localiza la configuración de http/2 en la configuración mostrada.