Use HTTP/2 para serviços

Quando uma instância de contentor recebe pedidos, o Cloud Run reduz esses pedidos de HTTP/2 para HTTP/1, exceto no caso do tráfego gRPC nativo, que requer HTTP/2 para funcionar corretamente. Esta página mostra como configurar o seu serviço para usar HTTP/2 ponto a ponto, o que impede o Cloud Run de fazer o downgrade dos pedidos para HTTP/1.

Para mais informações sobre como invocar serviços através de HTTP, consulte o artigo Invocar com um pedido HTTPS.

Antes de configurar

O seu serviço do Cloud Run tem de processar pedidos no formato de texto não cifrado HTTP/2 (h2c). A infraestrutura de publicação de front-end da Google termina o TLS e, em seguida, encaminha o tráfego h2c para o Cloud Run e para o seu contentor através de um canal encriptado.

Para confirmar que o seu serviço suporta pedidos h2c, teste o serviço localmente através deste comando curl:

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

Funções necessárias

Para receber as autorizações de que precisa para configurar e implementar serviços do Cloud Run, peça ao seu administrador para lhe conceder as seguintes funções de IAM:

Se estiver a implementar um serviço ou uma função a partir do código fonte, também tem de ter funções adicionais concedidas no seu projeto e na conta de serviço do Cloud Build.

Para ver uma lista de funções e autorizações de IAM associadas ao Cloud Run, consulte os artigos Funções de IAM do Cloud Run e Autorizações de IAM do Cloud Run. Se o seu serviço do Cloud Run interage com Google Cloud APIs, como as bibliotecas cliente da Google Cloud, consulte o guia de configuração da identidade do serviço. Para mais informações sobre a atribuição de funções, consulte as autorizações de implementação e faça a gestão do acesso.

Serviços HTTP/2 suportados

O HTTP/2 é ideal para várias aplicações. Seguem-se alguns exemplos de utilização comuns:

  • Serviços gRPC: crie microsserviços de alto desempenho e baixa latência que comunicam através do gRPC.
  • APIs com elevado débito: reduza a sobrecarga para aplicações que requerem um processamento eficiente de vários pedidos pequenos ou precisam de enviar dados para clientes.

Defina e atualize o HTTP/2 ponto a ponto

Qualquer alteração de configuração leva à criação de uma nova revisão. As revisões subsequentes também vão receber automaticamente esta definição de configuração, a menos que faça atualizações explícitas para a alterar.

Pode especificar a utilização de HTTP/2 ponto a ponto através da Google Cloud consola, da CLI Google Cloud ou de YAML quando cria um novo serviço ou implementa uma nova revisão:

Consola

  1. Na Google Cloud consola, aceda ao Cloud Run:

    Aceda ao Cloud Run

  2. Selecione Serviços no menu e clique em Implementar contentor para configurar um novo serviço. Se estiver a configurar um serviço existente, clique no serviço e, de seguida, em Editar e implementar nova revisão.

  3. Se estiver a configurar um novo serviço, preencha a página de definições iniciais do serviço e, de seguida, clique em Contentores, volumes, rede, segurança para expandir a página de configuração do serviço.

  4. Clique no separador Rede.

    imagem

    • Selecione Ativar ligações http/2
  5. Clique em Criar ou Implementar.

gcloud

Pode atualizar um determinado serviço para usar HTTP/2 através do seguinte comando:

gcloud run services update SERVICE --use-http2

Substitua SERVICE pelo nome do seu serviço.

Também pode definir o seu serviço para usar HTTP/2 durante a implementação através do comando:

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

Substitua IMAGE_URL por uma referência à imagem do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se usar o Artifact Registry, o repositório REPO_NAMEtem de já estar criado. O URL segue o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .

YAML

  1. Se estiver a criar um novo serviço, ignore este passo. Se estiver a atualizar um serviço existente, transfira a respetiva configuração YAML:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Atualize ports com o nomeh2c e containerPort com a porta à sua escolha, conforme mostrado no exemplo seguinte:

    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

    Substitua o seguinte:

    • SERVICE: o nome do seu serviço do Cloud Run
    • IMAGE_URL: uma referência à imagem do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se usar o Artifact Registry, o repositório REPO_NAMEtem de já estar criado. O URL segue o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
    • REVISION com um novo nome de revisão ou elimine-o (se existir). Se fornecer um novo nome de revisão, este tem de cumprir os seguintes critérios:
      • Começa com SERVICE-
      • Contém apenas letras minúsculas, números e -
      • Não termina com um -
      • Não exceder 63 carateres
  3. Crie ou atualize o serviço com o seguinte comando:

    gcloud run services replace service.yaml

Terraform

Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.

Adicione o seguinte a um recurso google_cloud_run_v2_service na sua configuração do 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
      }
    }
  }
}

Se o seu contentor estiver à escuta de pedidos HTTP numa porta diferente de 8080, substitua 8080 por esse número de porta.

Veja as definições de http/2

Para ver as definições atuais de HTTP/2 do seu serviço do Cloud Run:

Consola

  1. Na Google Cloud consola, aceda ao Cloud Run:

    Aceda ao Cloud Run

  2. Clique no serviço que lhe interessa para abrir a página Detalhes do serviço.

  3. Clique no separador Revisões.

  4. No painel de detalhes à direita, a definição http/2 é apresentada no separador Rede.

gcloud

  1. Use o seguinte comando:

    gcloud run services describe SERVICE
  2. Localize a definição http/2 na configuração devolvida.

Use HTTP/2 atrás de um balanceador de carga

Quando configurado para ouvir HTTP/2, o Cloud Run processa automaticamente o tráfego HTTP/2 ou gRPC proveniente do Application Load Balancer. Não é necessária nenhuma configuração específica no serviço de back-end do balanceador de carga.

Para configurar o Cloud Run para usar HTTP/2 ou gRPC, use um dos seguintes métodos: