Configure o encaminhamento baseado em cabeçalhos e parâmetros de consulta para o balanceador de carga de aplicações clássico

Esta página inclui dois exemplos para o balanceador de carga de aplicações clássico:

Para configurar a gestão de tráfego para o balanceador de carga de aplicações externo global e o balanceador de carga de aplicações externo regional, consulte as seguintes páginas:

Antes de começar

Configure o encaminhamento baseado em parâmetros de consulta

Este exemplo demonstra a utilização de parâmetros de consulta para fazer testes A/B através da correspondência na string de consulta.

Adicione dois grupos de instâncias de back-end

Para que o encaminhamento seja útil, tem de ter vários back-ends.

Para configurar dois back-ends, as VMs têm de estar em dois grupos de instâncias. Este guia descreve como criar grupos de instâncias geridos com VMs Linux que têm o Apache em execução e, em seguida, configurar o equilíbrio de carga.

Os grupos de instâncias geridos fornecem VMs que executam os servidores de back-end de um balanceador de carga HTTP externo. Para fins de demonstração, os back-ends publicam os respetivos nomes de anfitriões.

Para simplificar, os backends residem na mesma região. Se quiser uma configuração de várias regiões, tem de ter uma configuração de modelo de instância para a segunda região.

Consola

  1. Crie um modelo de instância. Na Google Cloud consola, aceda à página Modelos de instâncias.

    Aceda a Modelos de instâncias

    1. Clique em Criar modelo de instância.
    2. Em Nome, introduza lb-backend-template.
    3. Certifique-se de que o Disco de arranque está definido para uma imagem Debian, como Debian GNU/Linux 12 (bookworm). Estas instruções usam comandos que só estão disponíveis no Debian, como apt-get.
    4. Clique em Opções avançadas.
    5. Clique em Rede e configure o seguinte campo:
      1. Para etiquetas de rede, introduza allow-health-check.
    6. Clique em Gestão. Introduza o seguinte script no campo Script de arranque.

      #! /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
      
    7. Clique em Criar.

  2. Crie um grupo de instâncias gerido. Aceda à página Grupos de instâncias na Google Cloud consola.

    Aceda a Grupos de instâncias

    1. Clique em Criar grupo de instâncias.
    2. Selecione Novo grupo de instâncias gerido (sem estado). Para mais informações, consulte o artigo Grupos de instâncias geridos sem estado ou com estado.
    3. Em Nome, introduza first-example-ig.
    4. Em Localização, selecione Zona única.
    5. Em Região, selecione a sua região preferida. Este exemplo usa us-east1.
    6. Para Zona, selecione us-east1-b.
    7. Em Modelo de instância, selecione o modelo de instância lb-backend-template.
    8. Em Número máximo de instâncias, introduza 2.
    9. Em Modo de ajuste automático de escala, selecione Off:do not autoscale.
    10. Clique em Criar.

Crie outro grupo de instâncias geridas como este. Atribua o nome second-example-ig ao segundo modelo e baseie-o no modelo lb-backend-template.

gcloud

  1. 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-12 \
       --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'
    
  2. Crie o primeiro grupo de instâncias geridas com base no modelo.

    gcloud compute instance-groups managed create first-example-ig \
       --template=lb-backend-template --size=2 --zone=us-east1-b
    
  3. Crie o segundo grupo de instâncias geridas com base no modelo.

    gcloud compute instance-groups managed create second-example-ig \
       --template=lb-backend-template --size=2 --zone=us-east1-c
    

Configurar uma regra de firewall

Neste exemplo, cria a regra de firewall fw-allow-health-check. Esta é uma regra de entrada que permite o tráfego dos sistemas de verificação de estado (130.211.0.0/22 e 35.191.0.0/16). Este exemplo usa a etiqueta de destino allow-health-check para identificar as VMs. Google Cloud

Consola

  1. Na Google Cloud consola, aceda à página Políticas de firewall.
    Aceder a Políticas de firewall
  2. Clique em Criar regra de firewall para criar a segunda regra de firewall:
  3. Introduza um Nome de fw-allow-health-check.
  4. Em Rede, selecione Default.
  5. Em Segmentações, selecione Etiquetas de segmentação especificadas.
  6. Preencha o campo Etiquetas alvo com allow-health-check.
  7. Defina o Filtro de origem como Intervalos IPv4.
  8. Defina os Intervalos IPv4 de origem como 130.211.0.0/22 e 35.191.0.0/16.
  9. Em Protocolos e portas, selecione Protocolos e portas especificados.
  10. Selecione a caixa de verificação TCP e introduza 80 para os números das portas.
  11. 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

Reservar um endereço IP externo

Agora que as suas instâncias estão em funcionamento, configure um endereço IP externo estático global que os seus clientes usam para aceder ao balanceador de carga.

Consola

  1. Aceda à página Endereços IP externos na Google Cloud consola.
    Aceda à página Endereços IP externos
  2. Clique em Reservar endereço estático para reservar um endereço IPv4.
  3. Atribua um Nome de lb-ipv4-1.
  4. Defina o nível da rede como Padrão.
  5. Defina a versão do IP como IPv4.
  6. Defina o Tipo como Global.
  7. Clique em Reservar.
  8. Certifique-se de que o Tipo está definido como Global.
  9. Clique em Reservar.

gcloud

gcloud compute addresses create lb-ipv4-1 \
    --ip-version=IPV4 \
    --network-tier=PREMIUM \
    --global

Tome nota do endereço IPv4 que foi reservado:

gcloud compute addresses describe lb-ipv4-1 \
    --format="get(address)" \
    --global

Configurar os back-ends do balanceador de carga

Consola

A consola Google Cloud não é atualmente suportada para configurar o encaminhamento baseado em cabeçalhos e parâmetros. Em alternativa, use gcloud ou a API.

gcloud

  1. Crie uma verificação de funcionamento.
        gcloud compute health-checks create http http-basic-check \
            --port 80
        
  2. Crie o primeiro serviço de back-end.
    • Para um Application Load Balancer externo global, use o comando da CLI gcloud com load-balancing-scheme=EXTERNAL_MANAGED. Esta definição oferece capacidade de gestão avançada do tráfego.
    • Para um balanceador de carga de aplicações 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
        
  3. 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
        
  4. Adicione o primeiro grupo de instâncias como o 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
        
  5. Adicione o segundo grupo de instâncias como back-end ao 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
        

Criar o mapa de URLs

Consola

A consola Google Cloud não é atualmente suportada para configurar o encaminhamento baseado em cabeçalhos e parâmetros. Em alternativa, use gcloud ou a API.

gcloud

  1. Crie um ficheiro YAML /tmp/web-map-http.yaml. Substitua PROJECT_ID pelo ID do seu 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
    
  2. Valide o mapa de URLs.

    gcloud compute url-maps validate --source /tmp/web-map-http.yaml
    

    Se os testes forem aprovados e o comando gerar uma mensagem de êxito, guarde as alterações no mapa de URLs.

  3. Atualize o mapa de URLs.

    gcloud compute url-maps import web-map-http \
       --source /tmp/web-map-http.yaml \
       --global
    

Criar o proxy de destino e a regra de encaminhamento

Consola

A consola Google Cloud não é atualmente suportada para configurar o encaminhamento baseado em cabeçalhos e parâmetros. Em alternativa, use gcloud ou a API.

gcloud

  1. Crie um proxy HTTP de destino para encaminhar pedidos para o seu mapa de URLs.
        gcloud compute target-http-proxies create http-lb-proxy \
            --url-map web-map-http
        
  2. Crie uma regra de encaminhamento global para encaminhar pedidos recebidos para o proxy.
    • Para um Application Load Balancer externo global, use o comando da CLI gcloud com load-balancing-scheme=EXTERNAL_MANAGED. Esta definição oferece capacidade de gestão avançada do tráfego.
    • Para um balanceador de carga de aplicações 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
        

Testes

Tome nota do endereço IPv4 que foi reservado:

gcloud compute addresses describe lb-ipv4-1 \
    --format="get(address)" \
    --global

Teste esta configuração executando o seguinte comando:

curl http://IP_ADDRESS?ABTest=A
curl http://IP_ADDRESS?ABTest=B

Num navegador, abra http://IP_ADDRESS?ABTest=A e http://IP_ADDRESS?ABTest=B.

Configure o encaminhamento baseado em cabeçalhos HTTP

Este exemplo demonstra como adicionar e remover cabeçalhos HTTP para fazer um encaminhamento inteligente.

Antes de começar

Pode usar um Application Load Balancer externo existente ou criar um novo.

Pode usar esta funcionalidade com qualquer um dos tipos de back-end suportados. Este exemplo pressupõe que está a usar VMs num grupo de instâncias.

Para configurar um equilibrador de carga simples, consulte o exemplo baseado em parâmetros de consulta acima.

Atualizar o mapa de URLs

Consola

A consola Google Cloud não é atualmente suportada para configurar o encaminhamento baseado em cabeçalhos e parâmetros. Em alternativa, use gcloud ou a API.

gcloud

  1. Este exemplo demonstra a utilização de cabeçalhos de pedidos HTTP para fazer testes A/B através da correspondência com valores nos cabeçalhos HTTP do pedido.

    Crie um ficheiro YAML /tmp/web-map-http.yaml. Substitua PROJECT_ID pelo ID do seu 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
    
  2. Valide o mapa de URLs.

    gcloud compute url-maps validate --source /tmp/web-map-http.yaml
    

    Se os testes forem aprovados e o comando gerar uma mensagem de êxito, guarde as alterações no mapa de URLs.

  3. Atualize o mapa de URLs.

    gcloud compute url-maps import web-map-http \
       --source /tmp/web-map-http.yaml \
       --global
    

Testes

Usando o endereço IPv4 do equilibrador de carga associado, teste esta configuração executando o seguinte comando:

curl http://IP_ADDRESS -H "ABTest: A"
curl http://IP_ADDRESS -H "ABTest: B"

O que se segue?