Configurar um balanceador de carga de aplicativo interno entre regiões com buckets do Cloud Storage

Neste documento, mostramos como criar um balanceador de carga de aplicativo interno entre regiões 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 o documento Instalar a CLI gcloud.

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

Permissões

Para seguir este guia, você precisa criar buckets do Cloud Storage e recursos de rede no seu projeto. É necessário ser proprietário ou editor de um projeto ou ter os seguintes papéis de IAM do Compute Engine:

Tarefa Papel necessário
Criar componentes do balanceador de carga, sub-redes e redes Papel Administrador de rede do Compute (roles/compute.networkAdmin)
Adicionar e remover regras de firewall Papel Administrador de segurança do Compute (roles/compute.securityAdmin)
Criar buckets do Cloud Storage Papel de administrador de objetos do Storage (roles/storage.objectAdmin)

Para mais informações, consulte estes guias:

Configurar um recurso de certificado SSL

Para um balanceador de carga de aplicativo interno entre regiões que usa HTTPS como o protocolo de solicitação e resposta, crie um recurso de certificado SSL usando o Certificate Manager, 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 ao serem usados como back-ends de um balanceador de carga de aplicativo interno entre regiões:

  • 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 interno entre regiões.

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

Visão geral da configuração

É possível configurar um balanceador de carga de aplicativo interno entre regiões em várias regiões, conforme mostrado no diagrama a seguir:

Um balanceador de carga de aplicativo interno entre regiões envia tráfego para um back-end do Cloud Storage.
Distribuição de tráfego para o Cloud Storage (clique para ampliar).

Como mostrado no diagrama de arquitetura, este exemplo cria um balanceador de carga de aplicativo interno entre regiões 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 nas regiões us-east1 e asia-east1.

Essa arquitetura de implantação oferece alta disponibilidade. Se o balanceador de carga de aplicativo interno entre regiões falhar em uma região, as políticas de roteamento de DNS vão encaminhar o tráfego para um balanceador de carga de aplicativo interno entre regiões em outra região.

Configurar a rede e as sub-redes

Na rede VPC, configure uma sub-rede em cada região em que a regra de encaminhamento dos balanceadores de carga será configurada. Além disso, configure um proxy-only-subnet em cada região 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-redes para 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. Uma sub-rede chamada subnet-asia na região asia-east1 usa 10.1.3.0/24 como o intervalo de IP primário.

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

Os balanceadores de carga de aplicativo internos entre regiões podem ser acessados de qualquer região dentro da VPC. Assim, clientes de qualquer região podem acessar globalmente os back-ends do balanceador de carga.

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

Console

  1. No console Trusted 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:

    • Nome: subnet-us
    • Selecione uma Região: us-east1
    • Intervalo de endereços IP: 10.1.2.0/24
  6. Clique em Concluído.

  7. Clique em Add subnet.

  8. Crie outra sub-rede para a regra de encaminhamento do balanceador de carga em uma região diferente. Na seção Nova sub-rede, insira as seguintes informações:

    • Nome: subnet-asia
    • Região: asia-east1
    • Intervalo de endereços IP: 10.1.3.0/24
  9. Clique em Concluído.

  10. 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
    
  3. Crie uma sub-rede na rede VPC lb-network na região asia-east1 com o comando gcloud compute networks subnets create.

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

Configurar as sub-redes somente proxy

Uma sub-rede somente proxy fornece um conjunto de endereços IP que o Trusted Cloud by S3NS 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 duas sub-redes somente proxy: uma na região us-east1 e outra na região asia-east1.

Console

  1. No console Trusted 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:

    • Em Nome, insira proxy-only-subnet-us.
    • Em Região, insira us-east1.
    • Em Finalidade, selecione Proxy gerenciado entre regiões.
    • Em Intervalo de endereços IP, insira 10.129.0.0/23.
  5. Clique em Adicionar.

  6. Crie outra sub-rede somente proxy na região asia-east1. Na guia Sub-rede, clique em Adicionar sub-rede.

  7. Digite as seguintes informações:

    • Em Nome, insira proxy-only-subnet-asia.
    • Em Região, insira asia-east1.
    • Em Finalidade, selecione Proxy gerenciado entre regiões.
    • Em Intervalo de endereços IP, insira 10.130.0.0/23.
  8. Clique em Adicionar.

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=GLOBAL_MANAGED_PROXY \
        --role=ACTIVE \
        --region=us-east1 \
        --network=lb-network \
        --range=10.129.0.0/23
    
  2. Crie uma sub-rede somente proxy na região asia-east1 com o comando gcloud compute networks subnets create.

    gcloud compute networks subnets create proxy-only-subnet-asia \
        --purpose=GLOBAL_MANAGED_PROXY \
        --role=ACTIVE \
        --region=asia-east1 \
        --network=lb-network \
        --range=10.130.0.0/23
    

Configurar uma regra de firewall

Este exemplo usa a seguinte regra de firewall:

  • Uma regra de entrada que permite o acesso SSH na porta 22 à VM do cliente. Neste exemplo, a regra de firewall é chamada de fw-allow-ssh.

Console

  1. No console Trusted 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:

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

gcloud

  1. 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, oTrusted 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:

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

Criar buckets do Cloud Storage

Neste exemplo, você cria dois buckets do Cloud Storage, um na região us-east1 e outro na região asia-east1. Para implantações de produção, recomendamos que você escolha um bucket multirregional, que replica automaticamente objetos em várias regiões do Trusted Cloud . Isso pode melhorar a disponibilidade do seu conteúdo e a tolerância a falhas em todo o aplicativo.

Console

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

    Acessar buckets

  2. Clique em Criar.

  3. Na caixa Nomear seu bucket, digite 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, mas defina Localização como asia-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 na região asia-east1 com o comando gcloud storage buckets create.

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

Substitua as variáveis BUCKET1_NAME e BUCKET2_NAME pelos nomes dos seus bucket 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 bucket do Cloud Storage:

gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET1_NAME/never-fetch/
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 Trusted 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 na parte superior da página.

  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

Substitua as variáveis de nome do bucket pelos nomes exclusivos do bucket do Cloud Storage.

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 interno entre regiões:

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 CLI gcloud, siga estas etapas:

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

    gcloud compute backend-buckets create backend-bucket-cats \
        --gcs-bucket-name=BUCKET1_NAME \
        --load-balancing-scheme=INTERNAL_MANAGED
    
    gcloud compute backend-buckets create backend-bucket-dogs \
        --gcs-bucket-name=BUCKET2_NAME \
        --load-balancing-scheme=INTERNAL_MANAGED
    
  2. Crie um mapa de URL para encaminhar solicitações recebidas para o bucket de back-end com o comando gcloud compute url-maps create.

    gcloud compute url-maps create lb-map \
        --default-backend-bucket=backend-bucket-cats \
        --global
    
  3. Configure as regras de host e de caminho do mapa de URL com o comando gcloud 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 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
    
  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 \
        --global
    

    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 \
        --global
    

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

  5. Crie duas regras de encaminhamento global, uma com um endereço IP na região us-east1 e outra com um endereço IP na região asia-east1 usando o comando gcloud compute forwarding-rules create.

    Se você quiser reservar um endereço IP interno estático para a regra de encaminhamento do balanceador de carga, consulte Reservar um endereço IP interno estático. 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 e recriar a regra de encaminhamento, ela poderá receber um novo endereço IP.

    Para o tráfego HTTP, crie as regras de encaminhamento globais para encaminhar as solicitações recebidas para o 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 \
        --global-target-http-proxy \
        --global
    
    gcloud compute forwarding-rules create http-fw-rule-2 \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --network=lb-network \
        --subnet=subnet-asia \
        --subnet-region=asia-east1 \
        --ports=80 \
        --target-http-proxy=http-proxy \
        --global-target-http-proxy \
        --global
    

    Para o tráfego HTTPS, crie as regras de encaminhamento globais 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 \
        --global-target-https-proxy \
        --global
    
    gcloud compute forwarding-rules create https-fw-rule-2 \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --network=lb-network \
        --subnet=subnet-asia \
        --subnet-region=asia-east1 \
        --address=RESERVED_IP_ADDRESS \
        --ports=443 \
        --target-https-proxy=https-proxy \
        --global-target-https-proxy \
        --global
    

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

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

    gcloud compute forwarding-rules describe http-fw-rule-1 \
        --global
    
  2. Anote o endereço IP da regra de encaminhamento do balanceador de carga (http-fw-rule-2), que está na região asia-east1.

    gcloud compute forwarding-rules describe http-fw-rule-2 \
        --global
    

Criar uma VM cliente para testar a conectividade

  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 balanceador de carga de aplicativo interno entre regiões tem endereços IP virtuais (VIPs) de front-end nas regiões us-east1 e asia-east1 da rede VPC. Faça uma solicitação HTTP para o VIP em qualquer uma das regiões usando curl.

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

Testar a alta disponibilidade

  1. Exclua a regra de encaminhamento (http-fw-rule-1) na região us-east1 para simular uma interrupção regional e verifique se o cliente na região us-east ainda pode acessar dados do bucket de back-end.

    gcloud compute forwarding-rules delete http-fw-rule-1 \
        --global
    
  2. Faça uma solicitação HTTP para o VIP da regra de encaminhamento em qualquer uma das regiões usando curl.

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

    Se você fizer uma solicitação HTTP para o VIP na região us-east1, as políticas de roteamento de DNS vão detectar que esse VIP não está respondendo e retornar o próximo VIP mais ideal para o cliente (neste exemplo, asia-east1). Esse comportamento ajuda a garantir que o aplicativo permaneça ativo mesmo durante interrupções regionais.

A seguir