Configurar um balanceador de carga de aplicativo externo regional com buckets do Cloud Storage

Neste documento, você vai aprender a criar um balanceador de carga de aplicativo externo regional para encaminhar solicitações de conteúdo estático para buckets do Cloud Storage.

Antes de começar

Certifique-se de que sua configuração atenda aos seguintes pré-requisitos.

Instalar a CLI do Google Cloud

Algumas das instruções neste guia só podem ser executadas usando a Google Cloud CLI. Para instalar, consulte Instalar a CLI gcloud.

Encontre os comandos relacionados ao balanceamento de carga no documento de referências da CLI gcloud e da API.

Funções exigidas

Se você for o criador do projeto, vai receber o papel de proprietário (roles/owner). Por padrão, o papel de proprietário (roles/owner) ou o papel de editor (roles/editor) inclui as permissões necessárias para seguir este documento.

Se você não é o criador do projeto, as permissões necessárias precisam ser concedidas ao principal apropriado. Por exemplo, um principal pode ser uma Conta do Google (para usuários finais) ou uma conta de serviço.

Para receber as permissões necessárias para criar buckets do Cloud Storage e recursos de rede, peça ao administrador para conceder a você os papéis do IAM a seguir no projeto:

Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Também é possível conseguir as permissões necessárias usando papéis personalizados ou outros papéis predefinidos.

Para mais informações sobre papéis e permissões do Cloud Load Balancing, consulte Papéis e permissões. Para mais informações sobre como definir políticas do IAM com concessões condicionais para regras de encaminhamento, consulte Condições do IAM para regras de encaminhamento.

Configurar um recurso de certificado SSL

Para um balanceador de carga de aplicativo externo regional que usa HTTPS como o protocolo de solicitação e resposta, é possível criar um recurso de certificado SSL usando um certificado SSL do Compute Engine ou do Certificate Manager.

Para este exemplo, crie um recurso de certificado SSL usando o Gerenciador de certificados, conforme descrito em um dos seguintes documentos:

Depois de criar o certificado, anexe-o ao proxy de destino HTTPS.

Recomendamos o uso de um certificado gerenciado pelo Google.

Limitações

As limitações a seguir se aplicam aos buckets do Cloud Storage quando usados como back-ends de um balanceador de carga de aplicativo externo regional:

  • O acesso privado a buckets não é compatível. Portanto, o bucket de back-end precisa estar acessível publicamente pela Internet.

  • URLs assinados não são compatíveis.

  • A integração do Cloud CDN não está disponível ao criar buckets de back-end para um balanceador de carga de aplicativo externo regional.

  • Ao usar um balanceador de carga de aplicativo regional externo para acessar buckets de back-end, somente o método HTTP GET é compatível. É possível fazer o download do conteúdo do bucket, mas não é possível fazer upload de conteúdo para ele usando o balanceador de carga de aplicativo externo regional.

  • Para um balanceador de carga de aplicativo externo regional, os buckets do Cloud Storage são compatíveis apenas na região em que o balanceador de carga está configurado. Não há suporte para buckets birregionais ou multirregionais.

Visão geral da configuração

O diagrama a seguir mostra um balanceador de carga de aplicativo externo regional com buckets de back-end localizados na mesma região que o balanceador de carga.

A regra de encaminhamento do balanceador de carga de aplicativo externo regional tem um endereço IP externo.

Um balanceador de carga de aplicativo externo regional envia tráfego para um back-end do Cloud Storage.
Distribuição de tráfego para o Cloud Storage (clique para ampliar).

Nas seções a seguir, você vai configurar os diferentes recursos conforme mostrado no diagrama anterior.

Configurar a rede e a sub-rede somente proxy

Este exemplo usa a seguinte rede VPC, região e sub-rede somente proxy:

  • Rede. Uma rede VPC de modo personalizado denominada lb-network.

  • Sub-rede para proxies Envoy. Uma sub-rede chamada proxy-only-subnet-us na região us-east1 usa 10.129.0.0/23 como o intervalo de IP primário.

Configurar uma rede VPC de modo personalizado

Console

  1. No console do Google Cloud , acesse a página Redes VPC.

    Acessar redes VPC

  2. Clique em Criar rede VPC.

  3. Em Nome, insira lb-network.

  4. Clique em Criar.

gcloud

  1. Crie uma rede VPC personalizada, chamada lb-network, com o comando gcloud compute networks create.

    gcloud compute networks create lb-network --subnet-mode=custom
    

Configurar a sub-rede somente proxy

Uma sub-rede somente proxy fornece um conjunto de endereços IP que o Google Cloud usa para executar proxies Envoy em seu nome. Os proxies encerram as conexões do cliente e criam novas conexões com os back-ends.

Essa sub-rede somente proxy é usada por todos os balanceadores de carga regionais baseados no Envoy que estão na mesma região que a rede VPC. Só pode haver uma sub-rede somente proxy ativa para uma determinada finalidade, por região e por rede.

Console

  1. No console do Google Cloud , acesse a página Redes VPC.

    Acessar redes VPC

  2. Clique no nome da rede VPC que você criou.

  3. Na guia Sub-rede, clique em Adicionar sub-rede.

  4. Digite as seguintes informações:

    • Nome: proxy-only-subnet-us
    • Região: us-east1
    • Finalidade: Proxy gerenciado regional
    • Intervalo de endereços IP: 10.129.0.0/23
  5. Clique em Add.

gcloud

  1. Crie uma sub-rede somente proxy na região us-east1 com o comando gcloud compute networks subnets create.

    gcloud compute networks subnets create proxy-only-subnet-us \
        --purpose=REGIONAL_MANAGED_PROXY \
        --role=ACTIVE \
        --region=us-east1 \
        --network=lb-network \
        --range=10.129.0.0/23
    

Configurar os buckets do Cloud Storage

O processo de configuração dos buckets do Cloud Storage é o seguinte:

  • Crie os buckets.
  • Copie conteúdo para os buckets.

Criar buckets do Cloud Storage

Neste exemplo, você cria dois buckets do Cloud Storage na região us-east1.

Console

  1. No console do Google Cloud , acesse a página Buckets do Cloud Storage.

    Acessar buckets

  2. Clique em Criar.

  3. Na seção Começar, insira um nome globalmente exclusivo que siga as diretrizes de nomenclatura.

  4. Clique em Escolha onde armazenar os dados.

  5. Defina o Tipo de local como Região.

  6. Na lista de regiões, selecione us-east1.

  7. Clique em Criar.

  8. Clique em Buckets para retornar à página "Buckets do Cloud Storage". Use estas instruções para criar um segundo bucket na região us-east1.

gcloud

  1. Crie o primeiro bucket na região us-east1 com o comando gcloud storage buckets create.

    gcloud storage buckets create gs://BUCKET1_NAME \
        --default-storage-class=standard \
        --location=us-east1 \
        --uniform-bucket-level-access
    
  2. Crie o segundo bucket também na região us-east1 com o comando gcloud storage buckets create.

    gcloud storage buckets create gs://BUCKET2_NAME \
        --default-storage-class=standard \
        --location=us-east1 \
        --uniform-bucket-level-access
    

Substitua as variáveis BUCKET1_NAME e BUCKET2_NAME pelos nomes dos seus buckets do Cloud Storage.

Copiar arquivos gráficos para os buckets do Cloud Storage

Para testar a configuração, copie um arquivo gráfico de um bucket público do Cloud Storage para seus próprios buckets do Cloud Storage.

Execute os comandos a seguir no Cloud Shell, substituindo as variáveis de nome do bucket pelos nomes exclusivos dos seus buckets do Cloud Storage:

gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET1_NAME/love-to-purr/
gcloud storage cp gs://gcp-external-http-lb-with-bucket/two-dogs.jpg gs://BUCKET2_NAME/love-to-fetch/

Tornar os buckets do Cloud Storage publicamente legíveis

Para tornar todos os objetos de um bucket legíveis para todos na Internet pública, conceda ao allUsers principal o papel Leitor de objetos do Storage (roles/storage.objectViewer).

Console

Para conceder acesso a todos os usuários para visualizar objetos nos seus buckets, repita o procedimento a seguir para cada bucket:

  1. No console do Google Cloud , acesse a página Buckets do Cloud Storage.

    Acessar buckets

  2. Na lista de buckets, clique no nome do bucket que você quer tornar público.

  3. Selecione a guia Permissões.

  4. Na seção Permissões, clique no botão Conceder acesso. A caixa de diálogo Conceder acesso será exibida.

  5. No campo Novos participantes, insira allUsers.

  6. No campo Selecionar um papel, insira Storage Object Viewer na caixa de filtro e selecione Visualizador de objetos do Storage nos resultados filtrados.

  7. Clique em Salvar.

  8. Clique em Permitir acesso público.

gcloud

Para conceder a todos os usuários acesso para visualizar objetos nos seus buckets, execute o comando buckets add-iam-policy-binding.

gcloud storage buckets add-iam-policy-binding gs://BUCKET1_NAME \
    --member=allUsers \
    --role=roles/storage.objectViewer
gcloud storage buckets add-iam-policy-binding gs://BUCKET2_NAME \
   --member=allUsers \
   --role=roles/storage.objectViewer

Reserve o endereço IP do balanceador de carga

Reserve um endereço IP externo estático para a regra de encaminhamento do balanceador de carga.

Console

  1. No console do Google Cloud , acesse a página Reservar um endereço estático.

    Acessar "Reservar um endereço estático"

  2. Escolha um nome para o novo endereço.

  3. Em Versão IP, selecione IPv4.

  4. Em Tipo, selecione Regional.

  5. Em Região, selecione us-east1.

  6. Deixe a opção Anexado a definida como Nenhum. Depois de criar o balanceador de carga, esse endereço IP será anexado à regra de encaminhamento do balanceador de carga.

  7. Clique em Reservar para reservar o IP.

gcloud

  1. Para reservar um endereço IP externo estático, use o comando gcloud compute addresses create.

    gcloud compute addresses create ADDRESS_NAME \
       --region=us-east1
    

    Substitua:

    • ADDRESS_NAME: o nome que você quer atribuir a esse endereço.
  2. Use o comando gcloud compute addresses describe para ver o resultado:

    gcloud compute addresses describe ADDRESS_NAME
    

O endereço IP retornado é chamado de RESERVED_IP_ADDRESS na seção a seguir.

Configurar o balanceador de carga com buckets de back-end

Nesta seção, mostramos como criar os seguintes recursos para um balanceador de carga de aplicativo externo regional:

  • Dois buckets de back-end. Os buckets de back-end servem como um wrapper para os buckets do Cloud Storage que você criou anteriormente.
  • Mapa de URL
  • Proxy de destino
  • Uma regra de encaminhamento com endereços IP regionais. A regra de encaminhamento tem um endereço IP externo.

Neste exemplo, é possível usar HTTP ou HTTPS como protocolo de solicitação e resposta entre o cliente e o balanceador de carga. Para criar um balanceador de carga HTTPS, é necessário adicionar um recurso de certificado SSL ao front-end do balanceador de carga.

Para criar os componentes de balanceamento de carga mencionados usando a gcloud CLI, siga estas etapas:

  1. Crie dois buckets de back-end na região us-east1 com o comando gcloud beta compute backend-buckets create. Os buckets de back-end têm um esquema de balanceamento de carga de EXTERNAL_MANAGED.

    gcloud beta compute backend-buckets create backend-bucket-cats \
        --gcs-bucket-name=BUCKET1_NAME \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --region=us-east1
    
    gcloud beta compute backend-buckets create backend-bucket-dogs \
        --gcs-bucket-name=BUCKET2_NAME \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --region=us-east1
    

    Substitua as variáveis BUCKET1_NAME e BUCKET2_NAME pelos nomes dos seus buckets do Cloud Storage.

  2. Crie um mapa de URL para encaminhar solicitações recebidas para o bucket de back-end com o comando gcloud beta compute url-maps create.

    gcloud beta compute url-maps create URL_MAP_NAME \
        --default-backend-bucket=backend-bucket-cats \
        --region=us-east1
    

    Substitua a variável URL_MAP_NAME pelo nome do mapa de URL.

  3. Configure as regras de host e de caminho do mapa de URL com o comando gcloud beta compute url-maps add-path-matcher.

    Neste exemplo, o bucket de back-end padrão é backend-bucket-cats, que processa todos os caminhos que existem nele. No entanto, qualquer solicitação direcionada a http://FORWARDING_RULE_IP_ADDRESS/love-to-fetch/two-dogs.jpg usa o back-end backend-bucket-dogs. Por exemplo, se a pasta /love-to-fetch/ também existir no seu back-end padrão (backend-bucket-cats), o balanceador de carga vai priorizar o back-end backend-bucket-dogs porque há uma regra de caminho específica para /love-to-fetch/*.

    gcloud beta compute url-maps add-path-matcher URL_MAP_NAME \
        --path-matcher-name=path-matcher-pets \
        --new-hosts=* \
        --backend-bucket-path-rules="/love-to-fetch/*=backend-bucket-dogs" \
        --default-backend-bucket=backend-bucket-cats
    

    Substitua a variável URL_MAP_NAME pelo nome do mapa de URL.

  4. Crie um proxy de destino com o comando gcloud compute target-http-proxies create.

    Para tráfego HTTP, crie um proxy HTTP de destino para encaminhar solicitações ao mapa de URL:

    gcloud compute target-http-proxies create http-proxy \
        --url-map=URL_MAP_NAME \
        --region=us-east1
    

    Substitua a variável URL_MAP_NAME pelo nome do mapa de URL.

    Para tráfego HTTPS, crie um proxy HTTPS de destino para encaminhar solicitações ao mapa de URL. O proxy é a parte do balanceador de carga que armazena o certificado SSL de um balanceador de carga HTTPS. Depois de criar o certificado, anexe-o ao proxy de destino HTTPS.

    Para anexar um certificado do Gerenciador de certificados, execute o seguinte comando:

    gcloud compute target-https-proxies create https-proxy \
        --url-map=URL_MAP_NAME \
        --certificate-manager-certificates=CERTIFICATE_NAME \
        --region=us-east1
    

    Substitua:

  5. Crie uma regra de encaminhamento com um endereço IP na região us-east1 usando o comando gcloud compute forwarding-rules create.

    Para tráfego HTTP, crie uma regra de encaminhamento regional para encaminhar solicitações recebidas ao proxy HTTP de destino:

    gcloud compute forwarding-rules create http-fw-rule \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --network=lb-network \
        --address=RESERVED_IP_ADDRESS \
        --ports=80 \
        --region=us-east1 \
        --target-http-proxy=http-proxy \
        --target-http-proxy-region=us-east1
    

    Para o tráfego HTTPS, crie uma regra de encaminhamento regional para encaminhar as solicitações recebidas para o proxy HTTPS de destino:

    gcloud compute forwarding-rules create https-fw-rule \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --network=lb-network \
        --address=RESERVED_IP_ADDRESS \
        --ports=443 \
        --region=us-east1 \
        --target-https-proxy=https-proxy \
        --target-https-proxy-region=us-east1
    

Enviar uma solicitação HTTP ao balanceador de carga

Agora que o serviço de balanceamento de carga está em execução, é possível enviar uma solicitação para a regra de encaminhamento do balanceador de carga.

  1. Anote o endereço IP da regra de encaminhamento do balanceador de carga (http-fw-rule), que está na região us-east1.

      gcloud compute forwarding-rules describe http-fw-rule \
          --region=us-east1
    

    Copie o endereço IP retornado para usar como FORWARDING_RULE_IP_ADDRESS na próxima etapa.

  2. Faça uma solicitação HTTP para o endereço IP virtual (VIP) da regra de encaminhamento usando curl.

      curl http://FORWARDING_RULE_IP_ADDRESS/love-to-purr/three-cats.jpg --output three-cats.jpg
    
      curl http://FORWARDING_RULE_IP_ADDRESS/love-to-fetch/two-dogs.jpg --output two-dogs.jpg
    

A seguir