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 concessão de funções, consulte as autorizações de implementação e 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 recebem 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 de navegação do Cloud Run 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 inicial 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. Certifique-se de que a imagem do contentor personalizado suporta pedidos HTTP/2.
  5. Clique em Criar ou Implementar.

gcloud

Pode atualizar um determinado serviço para usar o HTTP/2 com o 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 à sua imagem de contentor personalizada que suporte pedidos HTTP/2.

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 à sua imagem de contentor personalizada que suporta pedidos HTTP/2
    • REVISION com um novo nome de revisão ou eliminá-lo (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 excede 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 = IMAGE_URL
        # Enable HTTP/2
        ports {
          name           = "h2c"
          container_port = 8080
        }
      }
    }
  }

Substitua IMAGE_URL por uma referência à sua imagem de contentor personalizada que suporte pedidos HTTP/2.

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 à página Serviços do 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: