Essa página inclui dois exemplos:
- Como configurar o roteamento com base em parâmetros de consulta
- Como configurar o roteamento baseado em cabeçalho HTTP personalizado
Antes de começar
- Leia a Visão geral do gerenciamento de tráfego para balanceadores de carga HTTP(S) externos.
- Familiarize-se com a API URL map.
Como 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.
Como 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
- Acesse a página Grupos de instâncias no Console do Cloud.
- Clique em Criar grupo de instâncias.
- Escolha Novo grupo de instâncias gerenciadas à esquerda.
- Em Nome, insira
first-example-ig
. - Em Local, selecione Única zona.
- Em Região, selecione o local de sua preferência. O exemplo usa
us-east1
. - Em Zona, selecione
us-east1-b
. - Em Modelo de instância, selecione Criar um novo modelo de instância.
- Em Nome, insira
lb-backend-template
. - Certifique-se de que o disco de inicialização esteja configurado como uma imagem Debian. Por exemplo,
Debian GNU/Linux 9 (stretch). Estas instruções usam comandos que
estão disponíveis apenas no Debian, como
apt-get
. Na guia Gerenciamento, insira o seguinte script no campo Script de inicialização em Gerenciamento, segurança, discos, rede, locatário único.
#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ # See https://cloud.google.com/compute/docs/storing-retrieving-metadata#querying http://169.254.169.254/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html
Em Rede, adicione as tags:
allow-health-check
Clique em Salvar e continuar.
Em Número de instâncias, insira
2
.Em Modo de escalonamento automático, selecione Não fazer escalonamento automático.
Clique em Criar para criar o novo grupo.
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 o modelo.
gcloud compute instance-templates create lb-backend-template \ --region=us-east1 \ --network=default \ --subnet=default \ --tags=allow-health-check \ --image-family=debian-9 \ --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" \ # See https://cloud.google.com/compute/docs/storing-retrieving-metadata#querying http://169.254.169.254/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
- Acesse a página "Firewalls" no Console do Google Cloud.
Acessar a página "Firewalls" - 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
IP ranges
. - Defina Intervalos IP 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 ao lado de tcp e digite os números de porta,
80
. - 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 \ --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 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.
gcloud compute backend-services create service-a \ --global-health-checks \ --protocol HTTP \ --health-checks http-basic-check \ --global
- Crie o segundo serviço de back-end
gcloud compute backend-services create service-b \ --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 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: /?foo=bar&ABTest=A&bar=foo service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a expectedOutputUrl: https://example.com/?foo=bar&ABTest=A&bar=foo - description: Test routing for query ABTest with B host: example.com path: /?foo=bar&ABTest=B&bar=foo service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendService/service-b expectedOutputUrl: https://example.com/?foo=bar&ABTest=B&bar=foo
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 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 fazer o roteamento das solicitações recebidas
ao proxy.
gcloud compute forwarding-rules create http-content-rule \ --address=lb-ipv4-1\ --global \ --target-http-proxy=http-lb-proxy \ --ports=80
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
.
Como configurar o roteamento baseado em cabeçalho HTTP personalizado
Este exemplo demonstra como adicionar e remover cabeçalhos HTTP personalizados para fazer o roteamento inteligente.
Antes de começar
É possível usar um balanceador de carga HTTP(S) externo existente ou criar 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 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: foobar 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: foobar path: / - name: ABTest value: B service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendService/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