Comece a usar o equilíbrio de carga para o API Gateway

Este tutorial mostra como criar um Application Load Balancer externo global para encaminhar pedidos para o API Gateway. O processo de configuração segue os mesmos passos usados para configurar a integração do Application Load Balancer externo global com outros produtos sem servidor, como o Cloud Run, as funções do Cloud Run e o App Engine.

Embora não seja necessário um equilibrador de carga para o Gateway da API funcionar, permite que o seu gateway tire partido das vantagens de um equilibrador de carga. Por exemplo, a utilização de um equilibrador de carga de aplicações externo global com o API Gateway permite-lhe:

  • Usar domínios personalizados.
  • Tire partido do Google Cloud Armor como um serviço de segurança de rede.
  • Faça a gestão do equilíbrio de carga eficiente em gateways em várias localizações.
  • Implemente a gestão avançada de tráfego.

Antes de começar

  1. Se ainda não o fez, transfira e instale a Google Cloud CLI.

    Transfira a CLI gcloud

  2. Atualize os gcloudcomponentes:

    gcloud components update
  3. Siga o início rápido do API Gateway para implementar um serviço do Cloud Run e criar um gateway que aponte para esse serviço.

  4. Configurar autorizações.

  5. Adicione um recurso de certificado SSL.

Implemente um serviço do Cloud Run e uma instância do API Gateway

Neste tutorial, vai implementar um serviço "hello-world" no Cloud Run, criar uma gateway que encaminha para o serviço do Cloud Run e configurar um Application Load Balancer externo global para encaminhar pedidos para um domínio personalizado.

Embora este tutorial use o Cloud Run como o serviço de back-end para o gateway de APIs, estes passos também se aplicam a quaisquer serviços de back-end suportados pelo gateway de APIs.

Após a conclusão bem-sucedida do início rápido do API Gateway, deve ter um URL de gateway implementado que aponte para o serviço do Cloud Run.

Configure autorizações

Neste tutorial, vai criar um grupo de pontos finais de rede (NEG) sem servidor e criar um balanceador de carga de aplicações externo global num projeto do Google Cloud. Isto requer a função de proprietário ou editor do projeto, ou as seguintes funções IAM do Compute Engine:

Tarefa Função necessária
Crie um balanceador de carga e componentes de rede Administrador da rede
Crie e modifique NEGs Administrador de instâncias do Compute
Crie e modifique certificados SSL Administrador de segurança

Crie um recurso de certificado SSL

Para criar um Application Load Balancer externo global, tem de adicionar um recurso de certificado SSL ao front-end do balanceador de carga. Crie um recurso de certificado SSL usando um certificado SSL gerido pela Google ou um certificado SSL autogerido.

  • Certificados geridos pela Google. Recomendamos a utilização de certificados geridos pela Google porque Google Cloud obtém, gere e renova estes certificados automaticamente. Para criar um certificado gerido pela Google, tem de ter um domínio e os registos de DNS desse domínio para que o certificado seja aprovisionado. Se ainda não tiver um domínio, pode obtê-lo no Google Domains. Além disso, tem de atualizar o registo A de DNS do domínio para apontar para o endereço IP do equilibrador de carga criado num passo posterior. Para instruções detalhadas, consulte o artigo Usar certificados geridos pela Google.

  • Certificados autoassinados. Se não quiser configurar um domínio neste momento, pode usar um certificado SSL autoassinado para testes.

Este tutorial pressupõe que já criou um recurso de certificado SSL.

Se quiser testar este processo sem criar um recurso de certificado SSL (ou um domínio, conforme exigido pelos certificados geridos pela Google), pode continuar a usar as instruções nesta página para configurar um balanceador de carga HTTP.

Crie o balanceador de carga de aplicações externo global

  1. Crie um NEG sem servidor para o API Gateway.

    Um grupo de pontos finais da rede (NEG) especifica um grupo de pontos finais de back-end para um balanceador de carga. Um NEG sem servidor é um back-end que aponta para um serviço como o API Gateway, conforme mostrado na figura seguinte:

    Diagrama de um NEG sem servidor como back-end para gateways multirregionais

    Para criar um NEG sem servidor para o gateway, execute o seguinte comando, em que:

    • SERVERLESS_NEG_NAME é o nome do NEG sem servidor a criar.
    • GATEWAY_ID especifica o nome da gateway.
    • REGION_ID é a região de implementação do NEG sem servidor (deve corresponder à região do gateway).
    gcloud beta compute network-endpoint-groups create SERVERLESS_NEG_NAME \
      --region=REGION_ID \
      --network-endpoint-type=serverless \
      --serverless-deployment-platform=apigateway.googleapis.com \
      --serverless-deployment-resource=GATEWAY_ID

    Por exemplo:

    gcloud beta compute network-endpoint-groups create api-gateway-serverless-neg \
      --region=us-central1 \
      --network-endpoint-type=serverless \
      --serverless-deployment-platform=apigateway.googleapis.com \
      --serverless-deployment-resource=my-gateway
  2. Crie um serviço de back-end para definir como o balanceador de carga de aplicações externo global distribui o tráfego.

    A configuração do serviço de back-end contém um conjunto de valores, como o protocolo usado para estabelecer ligação aos back-ends, várias definições de distribuição e de sessão, verificações de estado e limites de tempo, conforme mostrado na figura seguinte:

    Diagrama de um NEG sem servidor como back-end de um serviço de back-end

    Para criar um serviço de back-end, execute o seguinte comando:

    gcloud compute backend-services create BACKEND_SERVICE_NAME --global

    em que BACKEND_SERVICE_NAME é o nome do novo serviço de back-end.

    Por exemplo:

    gcloud compute backend-services create api-gateway-backend-service --global

    Para adicionar o NEG sem servidor como um back-end ao serviço de back-end, execute o seguinte comando, em que:

    • BACKEND_SERVICE_NAME é o nome do seu serviço de back-end.
    • SERVERLESS_NEG_NAME é o nome do NEG sem servidor criado no passo anterior.
    • REGION_ID é a região de implementação do NEG sem servidor (deve corresponder à região do gateway).
    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
      --global \
      --network-endpoint-group=SERVERLESS_NEG_NAME \
      --network-endpoint-group-region=REGION_ID

    Por exemplo:

    gcloud compute backend-services add-backend api-gateway-backend-service \
      --global \
      --network-endpoint-group=api-gateway-serverless-neg \
      --network-endpoint-group-region=us-central1
  3. Crie um mapa de URLs para encaminhar pedidos recebidos para o serviço de back-end, conforme mostrado na figura abaixo:

    diagrama do mapa de URL para o serviço de back-end

    Para criar o mapa de URLs, execute o seguinte comando, em que:

    • URL_MAP_NAME é o nome do mapa de URLs a criar.
    • BACKEND_SERVICE_NAME é o nome do seu serviço de back-end.
    gcloud compute url-maps create URL_MAP_NAME \
      --default-service BACKEND_SERVICE_NAME

    Por exemplo:

    gcloud compute url-maps create api-gateway-url-map \
      --default-service api-gateway-backend-service

    Este mapa de URLs de exemplo segmenta apenas um serviço de back-end que representa um único gateway, pelo que não são necessárias regras de anfitrião nem correspondências de caminhos. Se tiver mais do que um serviço de back-end, pode usar regras de anfitrião para direcionar pedidos para diferentes serviços com base no nome do anfitrião. Use correspondências de caminhos para direcionar pedidos para diferentes serviços com base no caminho do pedido.

    Por exemplo:

    gcloud compute url-maps add-path-matcher api-gateway-url-map \
      --path-matcher-name=my-pm2  \
      --default-service=my-host-default-backend \
      --path-rules="/video=video-service,/video/*=video-service" \
      --new-hosts my-hosts.com
    gcloud compute url-maps add-host-rule api-gateway-url-map \
      --hosts=my-app-domain \
      --path-matcher-name=my-app-path-matcher

    Para saber mais sobre as regras de anfitrião e os correspondentes de caminhos, consulte a documentação do mapa de URLs.

  4. Crie um certificado SSL para o proxy de destino, conforme mostrado na figura abaixo:

    Diagrama do certificado SSL para o proxy de destino

    Para criar um balanceador de carga de aplicações externo global, é necessário um recurso de certificado SSL para o proxy de destino HTTP(S). Pode criar um recurso de certificado SSL usando um certificado SSL gerido pela Google ou um certificado SSL autogerido. Recomendamos a utilização de certificados geridos pela Google. Se estiver a testar este processo sem um recurso de certificado SSL e quiser configurar um equilibrador de carga HTTP, pode ignorar este passo.

    Para criar um certificado gerido pela Google, tem de ter um domínio. Se não tiver um domínio, pode usar um certificado SSL autoassinado para testes.

    Para criar um recurso de certificado SSL gerido pela Google:

    gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
      --domains DOMAIN

    Para criar um recurso de certificado SSL autogerido:

    gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
      --certificate CRT_FILE_PATH \
      --private-key KEY_FILE_PATH
  5. Crie um proxy HTTP(S) de destino para encaminhar pedidos para o seu mapa de URLs, conforme mostrado na figura abaixo:

    diagrama do proxy HTTP para o mapa de URL

    Para criar o proxy de destino, use o seguinte comando, em que:

    • TARGET_HTTPS_PROXY_NAME é o nome do proxy HTTP(S) de destino a criar.
    • URL_MAP_NAME é o nome do mapa de URLs criado num passo anterior.
    • Opcional: SSL_CERT_NAME é o nome do certificado SSL criado.
    gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \
      --ssl-certificates=SSL_CERT_NAME \
      --url-map=URL_MAP_NAME

    Por exemplo:

    gcloud compute target-https-proxies create api-gateway-https-proxy \
      --ssl-certificates=hello-cert \
      --url-map=api-gateway-url-map

    Conforme mencionado anteriormente, pode criar um balanceador de carga HTTP sem criar um recurso de certificado SSL. Para tal, use o seguinte comando:

    gcloud compute target-http-proxies create TARGET_HTTP_PROXY_NAME \
          --url-map=URL_MAP_NAME

    Por exemplo:

    gcloud compute target-http-proxies create api-gateway-http-proxy \
      --url-map=api-gateway-url-map

    Os comandos subsequentes para proxies HTTP devem ser modificados para acomodar a flag --target-http-proxy e TARGET_HTTP_PROXY_NAME para as respetivas contrapartes HTTP(S).

  6. Crie uma regra de encaminhamento para encaminhar pedidos recebidos para o proxy, conforme mostrado na figura seguinte:

    Diagrama da regra de encaminhamento para o proxy HTTP

    Use o seguinte comando para criar a regra de encaminhamento, em que:

    • HTTPS_FORWARDING_RULE_NAME é o nome da regra a criar.
    • TARGET_HTTPS_PROXY_NAME é o nome do proxy HTTP(S) de destino.
    gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \
      --target-https-proxy=TARGET_HTTPS_PROXY_NAME \
      --global \
      --ports=443

    Por exemplo:

    gcloud compute forwarding-rules create my-fw \
      --target-https-proxy=api-gateway-https-proxy \
      --global \
      --ports=443

Atualize os registos de DNS com o endereço IP do balanceador de carga

Se tiver um domínio personalizado, este passo é necessário para configurar as definições de DNS do seu domínio de modo a apontarem para o novo endereço IP do seu serviço. Também é necessário se tiver criado um Application Load Balancer externo global com um certificado gerido pela Google (que requer um domínio). A atribuição e a utilização de um endereço IP estático são recomendadas quando usadas com o DNS. As instruções específicas para este passo dependem do seu fornecedor de DNS.

  1. Para enviar tráfego para o equilibrador de carga, o registo DNS do seu domínio (neste tutorial, my-app-domain) tem de apontar para os endereços IP do equilibrador de carga.

    Para encontrar o endereço IP da sua regra de encaminhamento global, use este comando:

    gcloud compute forwarding-rules list
  2. Atualize o registo A ou AAAA de DNS do seu domínio para apontar para o endereço IP do balanceador de carga, de modo que o tráfego enviado para o URL do domínio personalizado existente seja encaminhado através do balanceador de carga. O DNS pode demorar apenas alguns segundos ou até várias horas a propagar esta alteração ao servidor DNS.

  3. Teste para confirmar que o gateway está a receber tráfego através de curl ou visitando o URL no navegador. Por exemplo: https://my-app-domain

    Após o teste, deve ver a resposta gerada pelo serviço Cloud Run. Por exemplo, pode ser uma página HTML "Hello World" ou outra resposta esperada gerada diretamente pelo serviço de back-end. Isto significa que o seu pedido está a passar pelo balanceador de carga e que o serviço de back-end está a instruir o balanceador de carga para o enviar para a sua gateway.

Teste a configuração do balanceador de carga

Agora que configurou o balanceador de carga, pode começar a enviar tráfego para o endereço IP da regra de encaminhamento.

Para encontrar o endereço IP da sua regra de encaminhamento global, use o seguinte comando:

gcloud compute forwarding-rules list

Use o comando curl para testar a resposta de vários URLs dos seus serviços. Por exemplo:

curl https://HOST_URL/hello/
curl https://HOST_URL

Pode usar a consola do Google Cloud do API Gateway para verificar se os pedidos estão a chegar aos serviços corretos.

Parabéns! Configurou com êxito o balanceador de carga de aplicações externo global para o API GatewayPRÉ-VISUALIZAÇÃO.

Limpar

Para evitar incorrer em custos na sua Google Cloud conta pelos recursos usados neste início rápido, pode eliminar os recursos do Cloud Load Balancing que criou. Se estes recursos foram criados no respetivo projeto, pode eliminar o projeto completo. Caso contrário, pode eliminar os recursos individualmente.

Elimine o projeto

Execute o seguinte comando, substituindo PROJECT_ID pelo ID do seu projeto:

gcloud projects delete PROJECT_ID

Elimine recursos individuais

Elimine cada componente no balanceador de carga:

  1. Elimine as regras de encaminhamento:

    gcloud compute forwarding-rules delete HTTPS_FORWARDING_RULE_NAME --global
  2. Elimine os endereços IP externos globais:

    gcloud compute addresses delete IP_ADDRESSES --global
  3. Elimine o proxy de destino:

    gcloud compute target-https-proxies delete TARGET_HTTP_PROXY_NAME
  4. Elimine o mapa de URLs:

    gcloud compute url-maps delete URL_MAP_NAME
  5. Elimine os serviços de back-end:

    gcloud compute backend-services delete BACKEND_SERVICE_NAME --global
  6. (Opcional) Elimine o certificado SSL:

    gcloud compute ssl-certificates delete SSL_CERTIFICATE_NAME

Elimine o NEG sem servidor:

gcloud compute network-endpoint-groups delete SERVERLESS_NEG_NAME --region=REGION