Esta página inclui dois exemplos do balanceador de carga clássico do aplicativo:
- Configurar o roteamento com base em parâmetros de consulta
- Configurar o roteamento baseado em cabeçalho HTTP
Para configurar o gerenciamento de tráfego para o balanceador de carga de aplicativo externo global e o balanceador de carga de aplicativo externo regional, consulte as seguintes páginas:
- Configure o gerenciamento de tráfego para o balanceador de carga de aplicativo externo global
- Configurar o gerenciamento de tráfego do balanceador de carga de aplicativo externo regional
Antes de começar
- Leia a Visão geral do gerenciamento de tráfego para balanceadores de carga de aplicativo externos.
- Familiarize-se com a API URL map.
Configurar o roteamento com base em parâmetros de consulta
Este exemplo mostra o uso de parâmetros de consulta para fazer testes A/B por meio da correspondência na string de consulta.
Adicionar dois grupos de instâncias de back-end
Para que o roteamento seja útil, você precisa ter vários back-ends.
Para configurar dois back-ends, as VMs precisam estar em dois grupos de instâncias. Neste guia, descrevemos como criar grupos de instâncias gerenciadas com VMs do Linux que têm o Apache em execução para, em seguida, configurar o balanceamento de carga.
Os grupos de instâncias gerenciadas fornecem VMs que executam os servidores de back-end de um balanceador de carga HTTP externo. Para fins de demonstração, os back-ends exibem nomes de host próprios.
Para simplificar, os back-ends residem na mesma região. Se você quiser uma configuração multirregional, precisará ter um modelo de instância configurado para a segunda região.
Console
Criar um modelo de instância. No console do Google Cloud, acesse a página Modelos de instância.
Acessar "Modelos de instância"
- Clique em Criar modelo de instância.
- Em Nome, insira
lb-backend-template
. - Verifique se o disco de inicialização está definido como uma imagem Debian. Por exemplo, Debian GNU/Linux 10 (buster). Estas instruções usam comandos que
estão disponíveis apenas no Debian, como
apt-get
. - Clique em Opções avançadas.
- Clique em Rede e configure o seguinte campo:
- Em Tags de rede, insira
allow-health-check
.
- Em Tags de rede, insira
Clique em Gerenciamento. Insira o script a seguir no campo Script de inicialização.
#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2
Clique em Criar.
Crie um grupo de instâncias gerenciadas. Acesse a página Grupos de instâncias no console do Google Cloud.
- Clique em Criar grupo de instâncias.
- Selecione Novo grupo gerenciado de instâncias (sem estado). Para mais informações, consulte MIGs sem estado ou com estado.
- Em Nome, insira
first-example-ig
. - Em Local, selecione Única zona.
- Em Região, selecione a região de sua preferência. O exemplo usa
us-east1
. - Em Zona, selecione
us-east1-b
. - Em Modelo de instância, selecione o modelo de instância
lb-backend-template
. - Em Número máximo de instâncias, insira
2
. - Em Modo de escalonamento automático, selecione
Off:do not autoscale
. - Clique em Criar.
Crie outro grupo de instâncias gerenciadas como este. Nomeie o segundo grupo como
second-example-ig
e baseie-o no modelo lb-backend-template
.
gcloud
Crie um modelo de instância.
gcloud compute instance-templates create `lb-backend-template` \ --region=us-east1 \ --network=default \ --subnet=default \ --tags=allow-health-check \ --image-family=debian-10 \ --image-project=debian-cloud \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2'
Crie o primeiro grupo de instâncias gerenciadas com base no modelo.
gcloud compute instance-groups managed create first-example-ig \ --template=lb-backend-template --size=2 --zone=us-east1-b
Crie o segundo grupo de instâncias gerenciadas com base no modelo.
gcloud compute instance-groups managed create second-example-ig \ --template=lb-backend-template --size=2 --zone=us-east1-c
Como configurar uma regra de firewall
Neste exemplo, você criará a regra de firewall fw-allow-health-check
.
Essa é uma regra de entrada que permite o tráfego dos sistemas de verificação de
integridade do Google Cloud (130.211.0.0/22
e 35.191.0.0/16
). Este exemplo usa a
tag de destino allow-health-check
para identificar as VMs.
Console
- No Console do Google Cloud, acesse a página políticas de Firewall.
Acessar políticas de firewall - Clique em Criar regra de firewall para gerar a segunda regra:
- Informe um Nome de
fw-allow-health-check
. - Em Rede, selecione
Default
. - Em Destinos, selecione Tags de destino especificadas.
- Preencha o campo Tags de destino com
allow-health-check
. - Defina Filtro de origem como Intervalos IPv4.
- Defina Intervalos IPv4 de origem como
130.211.0.0/22
e35.191.0.0/16
. - Em Protocolos e portas, selecione Portas e protocolos especificados.
- Marque a caixa de seleção TCP e insira
80
como números de porta. - Clique em Criar.
gcloud
gcloud compute firewall-rules create fw-allow-health-check \ --network=default \ --action=allow \ --direction=ingress \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --target-tags=allow-health-check \ --rules=tcp
Como reservar um endereço IP externo
Agora que suas instâncias estão funcionando, configure um endereço IP externo, estático e global que seus clientes possam usar para alcançar seu balanceador de carga.
Console
- Acesse a página "Endereços IP externos" no Console do Google Cloud.
Acessar a página "Endereços IP externos" - Clique em Reservar endereço estático para reservar um endereço IPv4.
- Atribua um Nome de
lb-ipv4-1
. - Defina o "Nível de rede" como Padrão.
- Defina Versão IP como IPv4.
- Defina Tipo como Global.
- Clique em Reservar.
- Certifique-se de que o Tipo esteja definido como Global.
- Clique em Reservar.
gcloud
gcloud compute addresses create lb-ipv4-1 \ --ip-version=IPV4 \ --network-tier=PREMIUM \ --global
Anote o endereço IPv4 que foi reservado:
gcloud compute addresses describe lb-ipv4-1 \ --format="get(address)" \ --global
Como configurar os back-ends do balanceador de carga
Console
No momento, o console do Google Cloud não é compatível com a configuração de
roteamento com base em cabeçalho e parâmetro. Use gcloud
ou a API.
gcloud
- Crie uma verificação de integridade.
gcloud compute health-checks create http http-basic-check \ --port 80
- Crie o primeiro serviço de back-end.
-
Para um balanceador de carga de aplicativo externo global, use o comando
da CLI gcloud com
load-balancing-scheme=EXTERNAL_MANAGED
. Essa configuração oferece recursos avançados de gerenciamento de tráfego. - Para um balanceador de carga de aplicativo clássico, use
load-balancing-scheme=EXTERNAL
.
gcloud compute backend-services create service-a \ --load-balancing-scheme=LOAD_BALANCING_SCHEME \ --global-health-checks \ --protocol HTTP \ --health-checks http-basic-check \ --global
-
Para um balanceador de carga de aplicativo externo global, use o comando
da CLI gcloud com
- Crie o segundo serviço de back-end
gcloud compute backend-services create service-b \ --load-balancing-scheme=LOAD_BALANCING_SCHEME \ --global-health-checks \ --protocol HTTP \ --health-checks http-basic-check \ --global
- Inclua o primeiro grupo de instâncias como back-end do primeiro serviço
de back-end.
gcloud compute backend-services add-backend service-a \ --balancing-mode=UTILIZATION \ --max-utilization=0.8 \ --capacity-scaler=1 \ --instance-group=first-example-ig \ --instance-group-zone=us-east1-b \ --global
- Inclua o segundo grupo de instâncias como back-end do segundo serviço
de back-end.
gcloud compute backend-services add-backend service-b \ --balancing-mode=UTILIZATION \ --max-utilization=0.8 \ --capacity-scaler=1 \ --instance-group=second-example-ig \ --instance-group-zone=us-east1-c \ --global
Como criar o mapa de URLs
Console
No momento, o console do Google Cloud não é compatível com a configuração de
roteamento com base em cabeçalho e parâmetro. Use gcloud
ou a API.
gcloud
Crie um arquivo YAML
/tmp/web-map-http.yaml
. SubstituaPROJECT_ID
pelo ID do projeto:defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a hostRules: - hosts: - '*' pathMatcher: path-matcher-1 name: web-map-http pathMatchers: - defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a name: path-matcher-1 routeRules: - matchRules: - prefixMatch: / queryParameterMatches: - name: ABTest exactMatch: A priority: 0 service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a - matchRules: - prefixMatch: / queryParameterMatches: - name: ABTest exactMatch: B priority: 1 service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-b selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/web-map-http tests: - description: Test routing for query ABTest with A host: example.com path: /?ABTest=A service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a expectedOutputUrl: http://example.com/?ABTest=A - description: Test routing for query ABTest with B host: example.com path: /?ABTest=B service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-b expectedOutputUrl: http://example.com/?ABTest=B
Validar o mapa de URL.
gcloud compute url-maps validate --source /tmp/web-map-http.yaml
Se os testes forem aprovados e o comando resultar em uma mensagem de êxito, salve as alterações no mapa de URL.
Atualize o mapa de URL.
gcloud compute url-maps import web-map-http \ --source /tmp/web-map-http.yaml \ --global
Como criar o proxy de destino e a regra de encaminhamento
Console
No momento, o console do Google Cloud não é compatível com a configuração de
roteamento com base em cabeçalho e parâmetro. Use gcloud
ou a API.
gcloud
- Crie um proxy HTTP de destino para encaminhar solicitações ao mapa de URLs.
gcloud compute target-http-proxies create http-lb-proxy \ --url-map web-map-http
- Crie uma regra de encaminhamento global para encaminhar as solicitações recebidas para
o proxy.
-
Para um balanceador de carga de aplicativo externo global, use o comando
da CLI gcloud com
load-balancing-scheme=EXTERNAL_MANAGED
. Essa configuração oferece recursos avançados de gerenciamento de tráfego. - Para um balanceador de carga de aplicativo clássico, use
load-balancing-scheme=EXTERNAL
.
gcloud compute forwarding-rules create http-content-rule \ --load-balancing-scheme=LOAD_BALANCING_SCHEME \ --network-tier=PREMIUM \ --address=lb-ipv4-1 \ --global \ --target-http-proxy=http-lb-proxy \ --ports=80
-
Para um balanceador de carga de aplicativo externo global, use o comando
da CLI gcloud com
Teste
Anote o endereço IPv4 que foi reservado:
gcloud compute addresses describe lb-ipv4-1 \ --format="get(address)" \ --global
Teste essa configuração executando:
curl http://IP_ADDRESS?ABTest=A
curl http://IP_ADDRESS?ABTest=B
Em um navegador, abra
http://IP_ADDRESS?ABTest=A
e
http://IP_ADDRESS?ABTest=B
.
Configurar o roteamento baseado em cabeçalho HTTP
Este exemplo demonstra como adicionar e remover cabeçalhos HTTP para fazer o roteamento inteligente.
Antes de começar
Use um balanceador de carga de aplicativo externo existente ou crie um novo.
Use esse recurso com qualquer um dos tipos de back-end compatíveis. Neste exemplo, pressupomos que você esteja usando VMs em um grupo de instâncias.
Para configurar um balanceador de carga simples, consulte o exemplo baseado em parâmetros de consulta acima.
Como atualizar o mapa de URL
Console
No momento, o console do Google Cloud não é compatível com a configuração de
roteamento com base em cabeçalho e parâmetro. Use gcloud
ou a API.
gcloud
Este exemplo demonstra o uso de cabeçalhos de solicitação HTTP para fazer testes A/B por meio da correspondência de valores nos cabeçalhos HTTP da solicitação.
Crie um arquivo YAML
/tmp/web-map-http.yaml
. SubstituaPROJECT_ID
pelo ID do projeto:defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a kind: compute#urlMap name: web-map-http hostRules: - hosts: - '*' pathMatcher: path-matcher-1 pathMatchers: - defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a name: path-matcher-1 routeRules: - matchRules: - prefixMatch: / headerMatches: - headerName: ABTest exactMatch: A priority: 0 service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a - matchRules: - prefixMatch: / headerMatches: - headerName: ABTest exactMatch: B priority: 1 service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-b tests: - description: Test routing for query ABTest with A host: example.com path: / headers: - name: ABTest value: A service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a - description: Test routing for query ABTest with B host: example.com path: / headers: - name: ABTest value: B service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-b
Validar o mapa de URL.
gcloud compute url-maps validate --source /tmp/web-map-http.yaml
Se os testes forem aprovados e o comando resultar em uma mensagem de êxito, salve as alterações no mapa de URL.
Atualize o mapa de URL.
gcloud compute url-maps import web-map-http \ --source /tmp/web-map-http.yaml \ --global
Teste
Usando o endereço IPv4 do balanceador de carga associado, teste essa configuração executando:
curl http://IP_ADDRESS -H "ABTest: A"
curl http://IP_ADDRESS -H "ABTest: B"