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

Neste documento, você verá como criar um regional internal Application Load Balancer 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 realizadas usando a CLI gcloud. Para instalar, consulte Instalar a Google Cloud CLI.

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 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, consulte Condições do IAM para regras de encaminhamento.

Configurar um recurso de certificado SSL

Para um regional internal Application Load Balancer que usa HTTPS como o protocolo de solicitação e resposta, 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 seguintes limitações se aplicam aos buckets do Cloud Storage ao serem usados como back-ends de um regional internal Application Load Balancer:

  • 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 regional internal Application Load Balancer.

  • Ao usar um regional internal Application Load Balancer para acessar buckets de back-end, apenas o método HTTP GET é compatível. Você pode fazer o download de conteúdo do bucket, mas não é possível fazer upload de conteúdo para ele usando o regional internal Application Load Balancer .

  • Para um regional internal Application Load Balancer, 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

É possível configurar um regional internal Application Load Balancer em uma região, conforme mostrado no diagrama de arquitetura a seguir:

Um regional internal Application Load Balancer envia tráfego para um back-end do Cloud Storage.
Distribuição de tráfego para o Cloud Storage (clique para ampliar).

Conforme mostrado no diagrama de arquitetura, este exemplo cria um regional internal Application Load Balancer em uma rede de nuvem privada virtual (VPC) com dois buckets de back-end, em que cada bucket de back-end faz referência a um bucket do Cloud Storage. Os buckets do Cloud Storage estão localizados na região us-east1, e é possível balancear a carga do tráfego entre eles.

Configurar a rede e as sub-redes

Na rede VPC, configure uma sub-rede na região us-east1 em que a regra de encaminhamento dos balanceadores de carga será configurada. Além disso, configure uma sub-rede somente proxy na região, us-east1, em que você quer configurar o balanceador de carga.

Neste exemplo, usamos a seguinte rede VPC, região e sub-redes:

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

  • Sub-rede para o balanceador de carga. uma sub-rede chamada subnet-us na região us-east1 usa 10.1.2.0/24 para o intervalo de IP primário.

  • Sub-rede para o proxy Envoy. Uma sub-rede chamada proxy-only-subnet-us na região us-east1 que usa 10.129.0.0/23 para o intervalo de IP principal.

Configurar as sub-redes para a regra de encaminhamento do balanceador de carga

Crie uma sub-rede na mesma região em que a regra de encaminhamento dos balanceadores de carga será configurada.

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. Na seção Sub-redes, defina o Modo de criação da sub-rede como Personalizado.

  5. Na seção Nova sub-rede, insira as seguintes informações:

    1. Nome: subnet-us
    2. Selecione uma Região: us-east1
    3. Intervalo de endereços IP: 10.1.2.0/24
    4. Clique em Concluído.
  6. 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
    
  2. Crie uma sub-rede na rede VPC lb-network na região us-east1 com o comando gcloud compute networks subnets create.

    gcloud compute networks subnets create subnet-us \
        --network=lb-network \
        --range=10.1.2.0/24 \
        --region=us-east1
    

Configurar as sub-redes 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. Neste exemplo, criamos uma sub-rede somente proxy na região us-east1.

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:

    1. Em Nome, insira proxy-only-subnet-us.
    2. Em Região, insira us-east1.
    3. Em Finalidade, selecione Regional Managed Proxy.
    4. Em Intervalo de endereços IP, insira 10.129.0.0/23.
  5. Clique em Adicionar.

gcloud

  • 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 uma regra de firewall

Este exemplo usa uma regra de firewall de entrada, fw-allow-ssh, que permite o acesso SSH na porta 22 à VM do cliente.

Console

  1. No console do Google Cloud , acesse a página Políticas de firewall.

    Acesse as políticas de firewall

  2. Clique em Criar regra de firewall para criar a regra que autorize conexões SSH de entrada na VM cliente:

  3. Na página Criar regra de firewall, insira as seguintes informações:

    1. Nome: fw-allow-ssh
    2. Rede: lb-network
    3. Direção do tráfego: entrada
    4. Ação na correspondência: permitir
    5. Destinos: tags de destino especificadas
    6. Tags de meta: allow-ssh
    7. Filtro de origem: intervalos IPv4
    8. Intervalos IPv4 de origem: 0.0.0.0/0
    9. Protocolos e portas:
      1. Escolha Protocolos e portas especificados.
      2. Marque a caixa de seleção tcp e insira 22 como o número da porta.
  4. Clique em Criar.

gcloud

  • Crie a regra de firewall fw-allow-ssh que permita a conectividade SSH para VMs com a tag de rede allow-ssh. Quando você omite --source-ranges, oGoogle Cloud interpreta a regra como sendo qualquer origem.

    gcloud compute firewall-rules create fw-allow-ssh \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-ssh \
        --rules=tcp:22
    

Configurar os buckets do Cloud Storage

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

  1. Crie os buckets.
  2. Copie conteúdo para os buckets.
  3. Torne os buckets publicamente legíveis.

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 as instruções anteriores para criar um segundo bucket na mesma região, us-east1.

gcloud

  • Crie os buckets 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
    
    gcloud storage buckets create gs://BUCKET2_NAME \
        --default-storage-class=standard \
        --location=us-east1 \
        --uniform-bucket-level-access
    

    Substitua 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.

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, marque a caixa de seleção de cada um que você quer tornar público.

  3. Clique no botão Permissões. A caixa de diálogo Permissões é exibida.

  4. Na caixa de diálogo Permissões, clique no botão Adicionar principal. 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

Reservar um endereço IP interno e estático

Reserve um endereço IPv4 interno estático para a regra de encaminhamento do balanceador de carga. Para mais informações, consulte Reservar um endereço IP interno estático.

Console

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

    Acessar "Reservar endereço IP estático interno"

  2. No campo Nome, insira um nome para o novo endereço.

  3. Na lista Versão IP, selecione IPv4.

  4. Na lista Rede, selecione lb-network.

  5. Na lista Sub-rede, selecione subnet-us.

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

  7. Na lista Endereço IP estático, selecione Atribuir automaticamente. Depois de criar o balanceador de carga, esse endereço IP será anexado à regra de encaminhamento do balanceador de carga.

  8. 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 \
         --subnet=subnet-us
    

    Substitua ADDRESS_NAME pelo nome do novo endereço.

  2. Para conferir as informações sobre o endereço, use o comando gcloud compute addresses describe.

    gcloud compute addresses describe ADDRESS_NAME
    

    Copie o endereço IP retornado para usar como 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 regional internal Application Load Balancer:

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 anteriormente usando a CLI gcloud, 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 INTERNAL_MANAGED.

    gcloud beta compute backend-buckets create backend-bucket-cats \
        --gcs-bucket-name=BUCKET1_NAME \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --region=us-east1
    
    gcloud beta compute backend-buckets create backend-bucket-dogs \
        --gcs-bucket-name=BUCKET2_NAME \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --region=us-east1
    
  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 lb-map \
        --default-backend-bucket=backend-bucket-cats \
        --region=us-east1
    
  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 lb-map \
        --path-matcher-name=path-matcher-pets \
        --new-hosts=* \
        --backend-bucket-path-rules="/love-to-fetch/*=backend-bucket-dogs" \
        --default-backend-bucket=backend-bucket-cats \
        --region=us-east1
    
  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=lb-map \
        --region=us-east1
    

    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.

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

    Substitua CERTIFICATE_NAME pelo nome do certificado SSL que você criou usando o Gerenciador de certificados.

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

    A reserva de um endereço IP é opcional para uma regra de encaminhamento HTTP. No entanto, é necessário reservar um endereço IP para uma regra de encaminhamento HTTPS.

    Neste exemplo, um endereço IP temporário está associado à regra de encaminhamento HTTP do balanceador de carga. Um endereço IP temporário permanece constante enquanto a regra de encaminhamento existir. Se você precisar excluir a regra de encaminhamento e recriá-la, ela poderá receber um novo endereço IP.

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

    gcloud compute forwarding-rules create http-fw-rule-1 \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --network=lb-network \
        --subnet=subnet-us \
        --subnet-region=us-east1 \
        --ports=80 \
        --target-http-proxy=http-proxy \
        --target-http-proxy-region=us-east1 \
        --region=us-east1
    

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

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

    Substitua RESERVED_IP_ADDRESS pelo nome do endereço que você copiou na seção Reservar um endereço IP interno estático.

Enviar uma solicitação HTTP ao balanceador de carga

Envie uma solicitação de uma VM cliente interna para a regra de encaminhamento do balanceador de carga.

Anotar o endereço IP da regra de encaminhamento do balanceador de carga

Receba o endereço IP da regra de encaminhamento do balanceador de carga (http-fw-rule-1) na região us-east1 para fazer uma solicitação HTTP ao endereço IP virtual (VIP) na região usando curl.

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

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

Criar uma VM cliente para testar a conectividade

Crie uma VM cliente e envie uma solicitação HTTP para os VIPs na rede VPC. A VM cliente pode estar em qualquer zona na mesma região que o balanceador de carga e usar qualquer sub-rede na mesma rede VPC. Neste exemplo, você cria a VM cliente na mesma sub-rede da regra de encaminhamento do balanceador de carga.

  1. Crie uma VM cliente na região us-east1.

    gcloud compute instances create client-a \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --network=lb-network \
        --subnet=subnet-us \
        --zone=us-east1-c \
        --tags=allow-ssh
    
  2. Estabeleça uma conexão SSH com a VM cliente.

    gcloud compute ssh client-a --zone=us-east1-c
    
  3. Neste exemplo, o regional internal Application Load Balancer tem um VIP de front-end na região us-east1 na rede VPC. Faça uma solicitação HTTP para o VIP nessa região 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
    

    Substitua FORWARDING_RULE_IP_ADDRESS pelo endereço IP que você copiou na seção Receber o endereço IP da regra de encaminhamento do balanceador de carga.

A seguir