Usar HTTP/2 para los servicios

Cuando una instancia de contenedor recibe solicitudes, Cloud Run las rebaja de HTTP/2 a HTTP/1, excepto en el caso del tráfico gRPC nativo, que requiere HTTP/2 para funcionar correctamente. En esta página se explica cómo configurar tu servicio para usar HTTP/2 de extremo a extremo, lo que evita que Cloud Run cambie las solicitudes a HTTP1.

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

Antes de configurar

Tu servicio de Cloud Run debe gestionar las solicitudes en formato texto sin cifrar HTTP/2 (h2c). La infraestructura de servicio frontend de Google finaliza la conexión TLS y, a continuación, reenvía el tráfico h2c a Cloud Run y a tu contenedor a través de un canal cifrado.

Para confirmar que tu servicio admite solicitudes h2c, prueba el servicio localmente con este comando curl:

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

Roles obligatorios

Para obtener los permisos que necesitas para configurar e implementar servicios de Cloud Run, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos:

Si vas a desplegar un servicio o una función a partir de código fuente, también debes tener otros roles concedidos en tu proyecto y en la cuenta de servicio de Cloud Build.

Para ver una lista de los roles y permisos de gestión de identidades y accesos asociados a Cloud Run, consulta los artículos sobre roles de gestión de identidades y accesos de Cloud Run y permisos de gestión de identidades y accesos de Cloud Run. Si tu servicio de Cloud Run interactúa con APIs, como las bibliotecas de cliente de Cloud, consulta la guía de configuración de la identidad del servicio.Google Cloud Para obtener más información sobre cómo conceder roles, consulta los artículos sobre permisos de implementación y gestión del acceso.

Servicios HTTP/2 admitidos

HTTP/2 es ideal para una gran variedad de aplicaciones. Estos son algunos de los casos prácticos habituales:

  • Servicios gRPC: crea microservicios de alto rendimiento y baja latencia que se comuniquen mediante gRPC.
  • APIs con un alto rendimiento: reduce la sobrecarga de las aplicaciones que requieren una gestión eficiente de numerosas solicitudes pequeñas o que necesitan enviar datos a los clientes.

Configurar y actualizar HTTP/2 de extremo a extremo

Cualquier cambio en la configuración conlleva la creación de una nueva revisión. Las revisiones posteriores también recibirán automáticamente este ajuste de configuración, a menos que hagas cambios explícitos para modificarlo.

Puedes especificar el uso de HTTP/2 de extremo a extremo mediante la Google Cloud consola, la interfaz de línea de comandos de Google Cloud o YAML cuando creas un servicio o desplegas una revisión:

Consola

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

    Ir a Cloud Run

  2. Seleccione Servicios en el menú y haga clic en Implementar contenedor para configurar un nuevo servicio. Si vas a configurar un servicio que ya tienes, haz clic en él y, a continuación, en Editar y desplegar nueva revisión.

  3. Si vas a configurar un servicio nuevo, rellena la página de configuración inicial del servicio y, a continuación, haz clic en Contenedores, volúmenes, redes y seguridad para desplegar la página de configuración del servicio.

  4. Haz clic en la pestaña Redes.

    imagen

    • Selecciona Habilitar conexiones HTTP/2.
  5. Haz clic en Crear o en Implementar.

gcloud

Para actualizar un servicio determinado para que use HTTP/2, puedes usar el siguiente comando:

gcloud run services update SERVICE --use-http2

Sustituye SERVICE por el nombre de tu servicio.

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

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

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

YAML

  1. Si va a crear un servicio, puede saltarse este paso. Si va a actualizar un servicio, descargue su configuración YAML:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Actualiza ports con el nombreh2c y containerPort con el puerto de tu elección, 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

    Haz los cambios siguientes:

    • SERVICE: el nombre de tu servicio de Cloud Run
    • IMAGE_URL: una referencia a la imagen del contenedor, por ejemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Si usas Artifact Registry, el repositorio REPO_NAME ya debe estar creado. La URL sigue el formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
    • REVISION con un nuevo nombre de revisión o elimínelo (si está presente). Si proporcionas un nuevo nombre de revisión, debe cumplir los siguientes criterios:
      • Empieza por SERVICE-
      • Contiene solo 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

Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.

Añade lo siguiente a un recurso google_cloud_run_v2_service en tu configuración de Terraform:

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
      }
    }
  }
}

Si tu contenedor recibe solicitudes HTTP en un puerto que no sea 8080, sustituye 8080 por ese número de puerto.

Ver la configuración de HTTP/2

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

Consola

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

    Ir a Cloud Run

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

  3. Haz clic en la pestaña Revisiones.

  4. En el panel de detalles de la derecha, el ajuste http/2 se muestra en la pestaña Redes.

gcloud

  1. Usa el siguiente comando:

    gcloud run services describe SERVICE
  2. Busca el ajuste http/2 en la configuración devuelta.

Usar HTTP/2 detrás de un balanceador de carga

Si se configura para que escuche HTTP/2, Cloud Run gestiona automáticamente el tráfico de HTTP/2 o gRPC que llega del balanceador de carga de aplicaciones. No es necesario configurar nada en el servicio de backend del balanceador de carga.

Para configurar Cloud Run de forma que use HTTP/2 o gRPC, utiliza uno de los siguientes métodos: