Configurar um balanceador de carga de rede de passagem externa para vários protocolos IP

Neste guia, você verá instruções para criar balanceadores de carga de rede baseados em serviço de back-end que balanceiam a carga de tráfego TCP, UDP, ESP, GRE, ICMP e ICMPv6. Use essa configuração se quiser balancear a carga do tráfego que usa protocolos IP diferentes de TCP ou UDP. Os balanceadores de carga de rede de passagem externa baseados em pool de destino não são compatíveis com esse recurso.

Para configurar um balanceador de carga de rede de passagem externa para protocolos IP diferentes de TCP ou UDP, crie uma regra de encaminhamento com o protocolo definido como L3_DEFAULT. Essa regra de encaminhamento aponta para um serviço de back-end com o protocolo definido como UNSPECIFIED.

Neste exemplo, usamos dois balanceadores de carga de rede para distribuir o tráfego entre VMs de back-end em dois grupos gerenciados de instâncias zonais na região us-central1. Os dois balanceadores de carga recebem tráfego no mesmo endereço IP externo.

Um balanceador de carga tem uma regra de encaminhamento com o protocolo TCP e a porta 80, e o outro tem uma regra de encaminhamento com o protocolo L3_DEFAULT. O tráfego TCP que chega ao endereço IP na porta 80 é processado pela regra de encaminhamento TCP. Todo o outro tráfego que não corresponde à regra de encaminhamento específica do TCP é processado pela regra de encaminhamento L3_DEFAULT.

Balanceador de carga de rede de passagem externa com grupos de instâncias gerenciadas zonais
Balanceador de carga de rede de passagem externa com grupos de instâncias gerenciadas zonais

Esse cenário distribui o tráfego TCP entre instâncias íntegras. Para dar suporte a isso, crie verificações de integridade de TCP para garantir que o tráfego seja enviado apenas para instâncias íntegras.

O balanceador de carga de rede de passagem externa é um balanceador de carga regional. Todos os componentes do balanceador de carga precisam estar na mesma região.

Antes de começar

Instale a Google Cloud CLI. Para uma visão geral completa da ferramenta, consulte Visão geral da CLI gcloud. Encontre os comandos relacionados ao balanceamento de carga na referência da CLI gcloud e da API.

Se você não executou a gcloud CLI anteriormente, primeiro execute o comando gcloud init para autenticar.

Esse guia pressupõe que você esteja familiarizado com a ferramenta bash.

Configurar a rede e as sub-redes

O exemplo nesta página usa uma rede VPC de modo personalizado chamada lb-network. Você pode usar uma rede VPC no modo automático se quiser processar apenas o tráfego IPv4. No entanto, o tráfego IPv6 requer uma sub-rede de modo personalizado.

O tráfego IPv6 também requer uma sub-rede de pilha dupla (stack-type definido como IPv4_IPv6). Ao criar uma sub-rede de pilha dupla em uma rede VPC de modo personalizado, você escolhe um tipo de acesso IPv6 para a sub-rede. Neste exemplo, definimos o parâmetro ipv6-access-type da sub-rede como EXTERNAL. Isso significa que novas VMs nesta sub-rede podem ser atribuídas tanto a endereços IPv4 quanto IPv6 externos.

Os back-ends e os componentes do balanceador de carga usados neste exemplo estão localizados nesta região e sub-rede:

  • Região: us-central1
  • Sub-rede: lb-subnet, com intervalo de endereços IPv4 principal 10.1.2.0/24. Embora você escolha qual intervalo de endereços IPv4 será configurado na sub-rede, o intervalo de endereços IPv6 é atribuído automaticamente. O Google fornece um bloco CIDR IPv6 de tamanho fixo (/64).

Para criar o exemplo de rede e sub-rede, siga estas etapas.

Console

Para oferecer suporte a tráfego IPv4 e IPv6, siga estas etapas:

  1. No Console do Google Cloud, acesse a página Redes VPC.

    Acessar redes VPC

  2. Clique em Criar rede VPC.

  3. Informe um Nome de lb-network.

  4. Na seção Sub-redes:

    • Defina o Modo de criação de sub-rede como Personalizado.
    • Na seção Nova sub-rede, configure os campos a seguir e clique em Concluído:
      • Name: lb-subnet
      • Região: us-central1
      • Tipo de pilha de IP: IPv4 e IPv6 (pilha dupla)
      • Intervalo IPv4: 10.1.2.0/24
        É possível configurar um intervalo IPv4 de endereços para a sub-rede, mas não o intervalo de endereços IPv6 para sub-rede. O Google fornece um bloco CIDR IPv6 de tamanho fixo (/64).
      • Tipo de acesso IPv6: Externo
  5. Clique em Criar.

Para oferecer suporte apenas ao tráfego IPv4, siga estas etapas:

  1. No Console do Google Cloud, acesse a página Redes VPC.

    Acessar redes VPC

  2. Clique em Criar rede VPC.

  3. Informe um Nome de lb-network.

  4. Na seção Sub-redes:

    • Defina o Modo de criação de sub-rede como Personalizado.
    • Na seção Nova sub-rede, configure os campos a seguir e clique em Concluído:
      • Name: lb-subnet
      • Região: us-central1
      • Tipo de pilha de IP: IPv4 (pilha única)
      • Intervalo IPv4: 10.1.2.0/24
  5. Clique em Criar.

gcloud

  1. Crie a rede VPC de modo personalizado:

    gcloud compute networks create lb-network \
        --subnet-mode=custom
    
  2. Na rede lb-network, crie uma sub-rede para back-ends na região us-central1.

    Para o tráfego IPv4 e IPv6, use o seguinte comando para criar uma sub-rede de pilha dupla:

    gcloud compute networks subnets create lb-subnet \
      --stack-type=IPV4_IPv6 \
      --ipv6-access-type=EXTERNAL \
      --network=lb-network \
      --range=10.1.2.0/24 \
      --region=us-central1
    

    Para somente tráfego IPv4, use o seguinte comando:

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

Criar os grupos gerenciados de instâncias zonais

Neste cenário de balanceamento de carga, você criará dois grupos gerenciados de instâncias zonais do Compute Engine e instalará um servidor de Apache web em cada instância.

Para lidar com tráfego IPv4 e IPv6, configure as VMs de back-end para serem de pilha dupla. Defina o stack-type da VM como IPv4_IPv6. As VMs também herdam a configuração ipv6-access-type (neste exemplo, EXTERNAL) da sub-rede. Para mais detalhes sobre os requisitos do IPv6, consulte a Visão geral do balanceador de carga de rede de passagem externa: regras de encaminhamento.

Para usar VMs como back-ends, atualize-as para que sejam de pilha dupla usando o comando gcloud compute instances network-interfaces update.

As instâncias que participam como VMs de back-end para balanceadores de carga de rede de passagem externa precisam executar o ambiente convidado Linux, o ambiente convidado Windows ou outros processos com funcionalidade equivalente.

Crie o grupo de instâncias para o tráfego TCP na porta 80

Console

  1. Criar um modelo de instância. No Console do Google Cloud, acesse a página Modelos de instância.

    Acesse "Modelos de instância"

    1. Clique em Criar modelo de instância.
    2. Em Nome, insira ig-us-template-tcp-80.
    3. 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.
    4. Selecione Rede, discos, segurança, gerenciamento, locatário único.
    5. Clique em Gerenciamento e copie o seguinte script 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
      
    6. Clique em Rede.

      1. Em Tags de rede, adicione network-lb-tcp-80.
      2. Em Interfaces de rede, clique na interface padrão e configure os seguintes campos:
        1. Rede: lb-network
        2. Sub-rede: lb-subnet
    7. Clique em Criar.

  2. Crie um grupo de instâncias gerenciadas. Acesse a página Grupos de instâncias no console do Google Cloud.

    Acesse grupo de instâncias

    1. Clique em Criar grupo de instâncias.
    2. Selecione Novo grupo gerenciado de instâncias (sem estado). Para mais informações, consulte MIGs sem estado ou com estado.
    3. Em Nome, insira ig-us-tcp-80.
    4. Em Local, selecione Única zona.
    5. Em Região, selecione us-central1.
    6. Em Zona, selecione us-central1-a.
    7. Em Modelo de instância, selecione ig-us-template-tcp-80.
    8. Especifique o número de instâncias que você quer criar no grupo.

      Neste exemplo, especifique as seguintes opções em Escalonamento automático:

      • Em Modo de escalonamento automático, selecione Off:do not autoscale.
      • Em Número máximo de instâncias, insira 2.
    9. Clique em Criar.

gcloud

As instruções gcloud deste guia pressupõem que você está usando o Cloud Shell ou outro ambiente com o bash instalado.

  1. Crie um modelo de instância de VM com o servidor HTTP usando o comando gcloud compute instance-templates create.

    Para processar tanto tráfego IPv4 quanto IPv6, use o comando a seguir.

    gcloud compute instance-templates create ig-us-template-tcp-80 \
    --region=us-central1 \
    --network=lb-network \
    --subnet=lb-subnet \
    --ipv6-network-tier=PREMIUM \
    --stack-type=IPv4_IPv6 \
    --tags=network-lb-tcp-80 \
    --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'
    

    Ou, se quiser processar o tráfego Somente tráfego IPv4, use o comando a seguir.

    gcloud compute instance-templates create ig-us-template-tcp-80 \
    --region=us-central1 \
    --network=lb-network \
    --subnet=lb-subnet \
    --tags=network-lb-tcp-80 \
    --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'
    
  2. Crie um grupo gerenciado de instâncias na zona com o comando gcloud compute instance-groups managed create.

    gcloud compute instance-groups managed create ig-us-tcp-80 \
        --zone us-central1-a \
        --size 2 \
        --template ig-us-template-tcp-80
    

Crie o grupo de instâncias para TCP na porta 8080, UDP, ESP e tráfego ICMP.

Console

  1. Crie um modelo de instância. No Console do Google Cloud, acesse a página Modelos de instância.

    Acesse "Modelos de instância"

    1. Clique em Criar modelo de instância.
    2. Em Nome, insira ig-us-template-l3-default.
    3. 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.
    4. Selecione Rede, discos, segurança, gerenciamento, locatário único.
    5. Clique em Gerenciamento e copie o seguinte script no campo Script de inicialização. O script de inicialização também configura o servidor Apache para detectar na porta 8080 em vez da porta 80.

      #! /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
      sed -ire 's/^Listen 80$/Listen 8080/g' /etc/apache2/ports.conf
      systemctl restart apache2
      
    6. Clique em Rede.

      1. Em Tags de rede, adicione network-lb-l3-default.
      2. Em Interfaces de rede, clique na interface padrão e configure os seguintes campos:
        1. Rede: lb-network
        2. Sub-rede: lb-subnet
    7. Clique em Criar.

  2. Crie um grupo de instâncias gerenciadas. Acesse a página Grupos de instâncias no console do Google Cloud.

    Acesse grupo de instâncias

    1. Clique em Criar grupo de instâncias.
    2. Escolha Novo grupo gerenciado de instâncias (sem estado). Para mais informações, consulte MIGs sem estado ou com estado.
    3. Em Nome, insira ig-us-l3-default.
    4. Em Local, selecione Única zona.
    5. Em Região, selecione us-central1.
    6. Em Zona, selecione us-central1-c.
    7. Em Modelo de instância, selecione ig-us-template-l3-default.
    8. Especifique o número de instâncias que você quer criar no grupo.

      Neste exemplo, especifique as seguintes opções em Escalonamento automático:

      • Em Modo de escalonamento automático, selecione Off:do not autoscale.
      • Em Número máximo de instâncias, insira 2.
    9. Clique em Criar.

gcloud

As instruções gcloud deste guia pressupõem que você está usando o Cloud Shell ou outro ambiente com o bash instalado.

  1. Crie um modelo de instância de VM com o servidor HTTP usando o comando gcloud compute instance-templates create.

    O script de inicialização também configura o servidor Apache para detectar na porta 8080 em vez da porta 80.

    Para processar tanto tráfego IPv4 quanto IPv6, use o comando a seguir.

    gcloud compute instance-templates create ig-us-template-l3-default \
    --region=us-central1 \
    --network=lb-network \
    --subnet=lb-subnet \
    --ipv6-network-tier=PREMIUM \
    --stack-type=IPv4_IPv6 \
    --tags=network-lb-l3-default \
    --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
    sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf
    systemctl restart apache2'
    

    Ou, se quiser processar apenas tráfego IPv4, use o seguinte comando.

    gcloud compute instance-templates create ig-us-template-l3-default \
    --region=us-central1 \
    --network=lb-network \
    --subnet=lb-subnet \
    --tags=network-lb-l3-default \
    --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
    sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf
    systemctl restart apache2'
    
  2. Crie um grupo gerenciado de instâncias na zona com o comando gcloud compute instance-groups managed create.

    gcloud compute instance-groups managed create ig-us-l3-default \
        --zone us-central1-c \
        --size 2 \
        --template ig-us-template-l3-default
    

Configurar regras de firewall

Crie as regras de firewall a seguir:

  • Regras de firewall que permitem que o tráfego TCP externo alcance instâncias de back-end no grupo de instâncias ig-us-tcp-80 na porta 80 (usando a tag de destino network-lb-tcp-80). Crie regras de firewall separadas para permitir tráfego IPv4 e IPv6.
  • Regras de firewall que permitem que outros tráfegos externos (TCP na porta 8080, UDP, ESP e ICMP) alcancem instâncias de back-end no grupo de instâncias ig-us-l3-default (usando a tag de destino network-lb-l3-default). Crie regras de firewall separadas para permitir tráfego IPv4 e IPv6.

Este exemplo cria regras de firewall que permitem que o tráfego de todos os intervalos de origem alcancem suas instâncias de back-end nas portas configuradas. Se você quiser criar regras de firewall separadas para as sondagens de verificação de integridade, use os intervalos de endereços IP de origem documentados na Visão geral das verificações de integridade: sondar intervalos de IP e regras de firewall.

Console

  1. No Console do Google Cloud, acesse a página políticas de Firewall.
    Acesse as políticas de firewall
  2. Para permitir que o tráfego TCP IPv4 alcance back-ends no grupo de instâncias ig-us-tcp-80, crie a seguinte regra de firewall.
    1. Clique em Criar regra de firewall.
    2. Informe um Nome de allow-network-lb-tcp-80-ipv4.
    3. Selecione a Rede a que a regra de firewall se aplicará (Padrão).
    4. Em Destinos, selecione Tags de destino especificadas.
    5. No campo Tags de destino, insira network-lb-tcp-80.
    6. Defina Filtro de origem como Intervalos IPv4.
    7. Defina os Intervalos IPV4 de origem como 0.0.0.0/0, o que permite o tráfego de qualquer origem. Isso permite que as sondagens de verificação de integridade e tráfego externo alcancem as instâncias de back-end.
    8. Em Protocolos e portas, selecione Portas e protocolos especificados. Marque a caixa de seleção TCP e insira 80.
    9. Clique em Criar. Pode levar um tempo para que o console exiba a nova regra de firewall. Talvez seja necessário clicar em Atualizar para vê-la.
  3. Para permitir que o tráfego IPv4 UDP, ESP e ICMP alcance back-ends no grupo de instâncias ig-us-l3-default, crie a seguinte regra de firewall.
    1. Clique em Criar regra de firewall.
    2. Informe um Nome de allow-network-lb-l3-default-ipv4.
    3. Selecione a Rede a que a regra de firewall se aplicará (Padrão).
    4. Em Destinos, selecione Tags de destino especificadas.
    5. No campo Tags de destino, insira network-lb-l3-default.
    6. Defina Filtro de origem como Intervalos IPv4.
    7. Defina os Intervalos IPV4 de origem como 0.0.0.0/0, o que permite o tráfego de qualquer origem. Isso permite que as sondagens de verificação de integridade e tráfego externo alcancem as instâncias de back-end.
    8. Em Protocolos e portas, selecione Portas e protocolos especificados.
      1. Marque a caixa de seleção TCP e insira 8080.
      2. Marque a caixa de seleção UDP.
      3. Marque a caixa de seleção Outro e insira esp, icmp.
    9. Clique em Criar. Pode levar um tempo para que o console exiba a nova regra de firewall. Talvez seja necessário clicar em Atualizar para vê-la.
  4. Para permitir que o tráfego TCP IPv6 alcance back-ends no grupo de instâncias ig-us-tcp-80, crie a seguinte regra de firewall.
    1. Clique em Criar regra de firewall.
    2. Informe um Nome de allow-network-lb-tcp-80-ipv6.
    3. Selecione a Rede a que a regra de firewall se aplicará (Padrão).
    4. Em Destinos, selecione Tags de destino especificadas.
    5. No campo Tags de destino, insira network-lb-tcp-80.
    6. Defina Filtro de origem como Intervalos IPv6.
    7. Defina os Intervalos IPv6 de origem como ::/0, o que permite o tráfego de qualquer origem. Isso permite que as sondagens de verificação de integridade e tráfego externo alcancem as instâncias de back-end.
    8. Em Protocolos e portas, selecione Portas e protocolos especificados. Clique na caixa de seleção ao lado de TCP e insira 80.
    9. Clique em Criar. Pode levar um tempo para que o console exiba a nova regra de firewall. Talvez seja necessário clicar em Atualizar para vê-la.
  5. Para permitir que o tráfego IPv6 UDP, ESP e ICMPv6 alcance back-ends no grupo de instâncias ig-us-l3-default, crie a seguinte regra de firewall. Essa regra de firewall também permite que as sondagens de verificação de integridade do TCP alcancem as instâncias na porta 8080.
    1. Clique em Criar regra de firewall.
    2. Informe um Nome de allow-network-lb-l3-default-ipv6.
    3. Selecione a Rede a que a regra de firewall se aplicará (Padrão).
    4. Em Destinos, selecione Tags de destino especificadas.
    5. No campo Tags de destino, insira network-lb-l3-default.
    6. Defina Filtro de origem como Intervalos IPv6.
    7. Defina os Intervalos IPv6 de origem como ::/0, o que permite o tráfego de qualquer origem. Isso permite que as sondagens de verificação de integridade e tráfego externo alcancem as instâncias de back-end.
    8. Em Protocolos e portas, selecione Portas e protocolos especificados.
      1. Clique na caixa de seleção ao lado de TCP e insira 8080.
      2. Clique na caixa de seleção ao lado de UDP.
      3. Clique na caixa de seleção ao lado de Outros e insira esp, 58.
    9. Clique em Criar. Pode levar um tempo para que o console exiba a nova regra de firewall. Talvez seja necessário clicar em Atualizar para vê-la.

gcloud

  1. Para permitir que o tráfego TCP IPv4 alcance back-ends no grupo de instâncias ig-us-tcp-80, crie a seguinte regra de firewall.

    gcloud compute firewall-rules create allow-network-lb-tcp-80-ipv4 \
        --network=lb-network \
        --target-tags network-lb-tcp-80 \
        --allow tcp:80 \
        --source-ranges=0.0.0.0/0
    
  2. Para permitir que o tráfego IPv4 UDP, ESP e ICMP alcance back-ends no grupo de instâncias ig-us-l3-default, crie a seguinte regra de firewall. Essa regra de firewall também permite que as sondagens de verificação de integridade do TCP alcancem as instâncias na porta 8080.

    gcloud compute firewall-rules create allow-network-lb-l3-default-ipv4 \
        --network=lb-network \
        --target-tags network-lb-l3-default \
        --allow tcp:8080,udp,esp,icmp \
        --source-ranges=0.0.0.0/0
    
  3. Para permitir que o tráfego TCP IPv6 alcance back-ends no grupo de instâncias ig-us-tcp-80, crie a seguinte regra de firewall.

    gcloud compute firewall-rules create allow-network-lb-tcp-80-ipv6 \
        --network=lb-network \
        --target-tags network-lb-tcp-80 \
        --allow tcp:80 \
        --source-ranges=::/0
    
  4. Para permitir que o tráfego IPv6 UDP, ESP e ICMPv6 alcance back-ends no grupo de instâncias ig-us-l3-default, crie a seguinte regra de firewall. Essa regra de firewall também permite que as sondagens de verificação de integridade do TCP alcancem as instâncias na porta 8080.

    gcloud compute firewall-rules create allow-network-lb-l3-default-ipv6 \
        --network=lb-network \
        --target-tags network-lb-l3-default \
        --allow tcp:8080,udp,esp,58 \
        --source-ranges=::/0
    

Configurar os balanceadores de carga

Em seguida, configure os balanceadores de carga. Configure um balanceador de carga para processar o tráfego TCP na porta 80 e outro para lidar com o tráfego TCP na porta 8080, UDP, ESP e ICMP. Os dois balanceadores de carga usarão o mesmo endereço IP externo com suas respectivas regras de encaminhamento.

Quando você configura um balanceador de carga, as instâncias de VM de back-end recebem pacotes destinados ao endereço IP externo estático configurado. Se você usa uma imagem fornecida pelo Compute Engine, as instâncias são configuradas automaticamente para processar esse endereço IP. Se você estiver usando outra imagem, configure esse endereço como um alias em eth0 ou como um loopback em cada instância.

Console

gcloud

  1. Reserve um endereço IP externo estático.

    Para tráfego IPv4: crie um endereço IP externo estático para os balanceadores de carga.

    gcloud compute addresses create network-lb-ipv4 \
        --region us-central1
    

    Para tráfego IPv6: crie um intervalo de endereços IPv6 estáticos para o balanceadores de carga. A sub-rede usada precisa ser uma sub-rede de pilha dupla com um intervalo de sub-rede IPv6 externo.

    gcloud compute addresses create network-lb-ipv6 \
        --region us-central1 \
        --subnet lb-subnet \
        --ip-version IPV6 \
        --endpoint-type NETLB
    
  2. Crie uma verificação de integridade TCP para a porta 80. Essa verificação de integridade é usada para verificar a integridade dos back-ends no grupo de instâncias ig-us-tcp-80.

    gcloud compute health-checks create tcp tcp-health-check-80 \
        --region us-central1 \
        --port 80
    
  3. Crie uma verificação de integridade TCP para a porta 8080. Essa verificação de integridade é usada para verificar a integridade dos back-ends no grupo de instâncias ig-us-l3-default.

    gcloud compute health-checks create tcp tcp-health-check-8080 \
        --region us-central1 \
        --port 8080
    
  4. Crie o primeiro balanceador de carga para o tráfego TCP na porta 80.

    1. Crie um serviço de back-end com o protocolo definido como TCP.

      gcloud compute backend-services create backend-service-tcp-80 \
          --protocol TCP \
          --health-checks tcp-health-check-80 \
          --health-checks-region us-central1 \
          --region us-central1
      
    2. Adicione o grupo de instâncias de back-end ao serviço de back-end:

      gcloud compute backend-services add-backend backend-service-tcp-80 \
          --instance-group ig-us-tcp-80 \
          --instance-group-zone us-central1-a \
          --region us-central1
      
    3. Para tráfego IPv4: crie uma regra de encaminhamento para rotear o tráfego TCP de entrada na porta 80 para o serviço de back-end. TCP é o protocolo de regra de encaminhamento padrão e não precisa ser definido explicitamente.

      Use o endereço IP reservado na etapa 1 como o endereço IP externo estático do balanceador de carga.

      gcloud compute forwarding-rules create forwarding-rule-tcp-80-ipv4 \
          --load-balancing-scheme external \
          --region us-central1 \
          --ports 80 \
          --address network-lb-ipv4 \
          --backend-service backend-service-tcp-80
      
    4. Para tráfego IPv6: crie uma regra de encaminhamento para rotear o tráfego TCP de entrada na porta 80 para o serviço de back-end. TCP é o protocolo de regra de encaminhamento padrão e não precisa ser definido explicitamente.

      Use o intervalo de endereços IPv6 reservado na etapa 1 como o endereço IP externo estático do balanceador de carga. A sub-rede usada precisa ser uma sub-rede de pilha dupla com um intervalo de sub-rede IPv6 externo.

      gcloud compute forwarding-rules create forwarding-rule-tcp-80-ipv6 \
          --load-balancing-scheme external \
          --region us-central1 \
          --network-tier PREMIUM \
          --ip-version IPV6 \
          --subnet lb-subnet \
          --address network-lb-ipv6 \
          --ports 80 \
          --backend-service backend-service-tcp-80
      
  5. Crie o segundo balanceador de carga para tráfego TCP na porta 8080, UDP, ESP e ICMP.

    1. Crie um serviço de back-end com o protocolo definido como UNSPECIFIED.

      gcloud compute backend-services create backend-service-l3-default \
          --protocol UNSPECIFIED \
          --health-checks tcp-health-check-8080 \
          --health-checks-region us-central1 \
          --region us-central1
      
    2. Adicione o grupo de instâncias de back-end ao serviço de back-end:

      gcloud compute backend-services add-backend backend-service-l3-default \
          --instance-group ig-us-l3-default \
          --instance-group-zone us-central1-c \
          --region us-central1
      
    3. Para tráfego IPv4: crie uma regra de encaminhamento com o protocolo definido como L3_DEFAULT para lidar com todo o tráfego de protocolo IP compatível restante (TCP na porta 8080, UDP, ESP e ICMP). Todas as portas precisam ser configuradas com regras de encaminhamento L3_DEFAULT.

      Use o mesmo endereço IPv4 externo usado no balanceador de carga anterior.

      gcloud compute forwarding-rules create forwarding-rule-l3-default-ipv4 \
          --load-balancing-scheme external \
          --region us-central1 \
          --ports all \
          --ip-protocol L3_DEFAULT \
          --address network-lb-ipv4 \
          --backend-service backend-service-l3-default
      
    4. Para tráfego IPv6: crie uma regra de encaminhamento com o protocolo definido como L3_DEFAULT para lidar com todo o tráfego de protocolo IP compatível restante (TCP na porta 8080, UDP, ESP e ICMP). Todas as portas precisam ser configuradas com regras de encaminhamento L3_DEFAULT.

      Use o intervalo de endereços IPv6 reservado na etapa 1 como o endereço IP externo estático do balanceador de carga. A sub-rede usada precisa ser uma sub-rede de pilha dupla com um intervalo de sub-rede IPv6 externo.

      gcloud compute forwarding-rules create forwarding-rule-l3-default-ipv6 \
          --load-balancing-scheme external \
          --region us-central1 \
          --network-tier PREMIUM \
          --ip-version IPV6 \
          --subnet lb-subnet \
          --address network-lb-ipv6 \
          --ports all \
          --ip-protocol L3_DEFAULT \
          --backend-service backend-service-l3-default
      

Testar o balanceador de carga

Agora que o serviço de balanceamento de carga foi configurado, comece a enviar tráfego para o endereço IP externo do balanceador de carga e veja o tráfego ser distribuído às instâncias de back-end.

Procure o endereço IP externo do balanceador de carga.

Console

  1. Na página de balanceamento de carga Avançado, acesse a guia Regras de encaminhamento.
    Acessar a guia "Regras de encaminhamento"
  2. Localize as regras de encaminhamento usadas pelo balanceador de carga.
  3. Na coluna Endereço IP, anote o endereço IP externo listado para cada regra de encaminhamento IPv4 e IPv6.

gcloud: IPv4

Insira o comando a seguir para visualizar o endereço IP externo da regra de encaminhamento usada pelo balanceador de carga.

gcloud compute forwarding-rules describe forwarding-rule-tcp-80-ipv4 \
    --region us-central1

Este exemplo usa o mesmo endereço IP para as duas regras de encaminhamento. Portanto, o uso de forwarding-rule-l3-default-ipv4 também funcionará.

gcloud: IPv6

Insira o comando a seguir para visualizar o endereço IPv6 externo da regra de encaminhamento forwarding-rule-tcp-80-ipv6 usada pelo balanceador de carga.

gcloud compute forwarding-rules describe forwarding-rule-tcp-80-ipv6 \
    --region us-central1

Este exemplo usa o mesmo endereço IP para as duas regras de encaminhamento IPv6. Portanto, o uso de forwarding-rule-l3-default-ipv6 também funcionará.

Enviar tráfego ao balanceador de carga

Este procedimento envia tráfego externo ao balanceador de carga. Execute os testes a seguir para garantir que o tráfego TCP na porta 80 esteja sendo balanceado pelo grupo de instâncias ig-us-tcp-80 enquanto o restante do tráfego (TCP na porta 8080, UDP, ESP e ICMP) está sendo manipulado pelo grupo de instâncias ig-us-l3-default.

Como verificar o comportamento com solicitações TCP na porta 80

  1. Faça solicitações da Web (por TCP na porta 80) para o balanceador de carga usando curl para contatar o endereço IP dele.

    • Em clientes com conectividade IPv4, execute o seguinte comando:

      $ while true; do curl -m1 IP_ADDRESS; done
      
    • Em clientes com conectividade IPv6, execute o seguinte comando:

      $ while true; do curl -m1 http://IPV6_ADDRESS; done
      

      Por exemplo, se o endereço IPv6 atribuído for [2001:db8:1:1:1:1:1:1/96], o comando terá esta aparência:

      $ while true; do curl -m1 http://[2001:db8:1:1:1:1:1:1]; done
      
  2. Observe o texto retornado pelo comando curl. O nome da VM de back-end que gera a resposta é exibido nesse texto. Por exemplo: Page served from: VM_NAME. As respostas devem vir apenas de instâncias no grupo de instâncias ig-us-tcp-80.

    Se ocorrer falha na resposta, aguarde cerca de 30 segundos para que a configuração seja totalmente carregada e as instâncias sejam marcadas como íntegras antes de tentar novamente:

Como verificar o comportamento com solicitações TCP na porta 8080

Faça solicitações da Web (por TCP na porta 8080) para o balanceador de carga usando curl para contatar o endereço IP dele.

  • Em clientes com conectividade IPv4, execute o seguinte comando:

    $ while true; do curl -m1 IPV4_ADDRESS:8080; done
    
  • Em clientes com conectividade IPv6, execute o seguinte comando:

    $ while true; do curl -m1 http://IPV6_ADDRESS; done
    

    Por exemplo, se o endereço IPv6 atribuído for [2001:db8:1:1:1:1:1:1/96], o comando terá esta aparência:

    $ while true; do curl -m1 http://[2001:db8:1:1:1:1:1:1]:8080; done
    

Observe o texto retornado pelo comando curl. As respostas devem vir apenas de instâncias no grupo de instâncias ig-us-l3-default.

Isso mostra que qualquer tráfego enviado para o endereço IP do balanceador de carga na porta 8080 está sendo processado apenas por back-ends no grupo de instâncias ig-us-l3-default.

Como verificar o comportamento com solicitações ICMP

Para verificar o comportamento com o tráfego ICMP, capture a saída do comando tcpdump para confirmar que apenas VMs de back-end no grupo de instâncias ig-us-l3-default estão processando solicitações ICMP enviadas para o balanceador de carga.

  1. SSH para as VMs de back-end.

    1. No console do Google Cloud, acesse a página Instâncias de VMs.
      Acessar a página "Instâncias de VM"

    2. Na lista de instâncias de máquina virtual, clique em SSH na linha da instância à qual você quer se conectar.

  2. Execute o seguinte comando para usar tcpdump para começar a detectar o tráfego ICMP.

    sudo tcpdump icmp -w ~/icmpcapture.pcap -s0 -c 10000
    tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
    

    Deixe a janela SSH aberta.

  3. Repita as etapas 1 e 2 para as quatro VMs de back-end.

  4. Faça solicitações ICMP para o balanceador de carga.

    Para testar as respostas IPv4, use ping para entrar em contato com o endereço IPv4 do balanceador de carga.

    ping IPV4_ADDRESS
    

    Para testar as respostas IPv6, use ping6 para entrar em contato com o endereço IPv6 do balanceador de carga.

    ping6 IPV6_ADDRESS
    

    Por exemplo, se o endereço IPv6 atribuído for [2001:db8:1:1:1:1:1:1/96], o comando terá esta aparência:

    ping6 2001:db8:1:1:1:1:1:1
    
  5. Volte para a janela SSH aberta de cada VM e interrompa o comando de captura tcpdump. Use Ctrl+C para fazer isso.

  6. Para cada VM, verifique a saída do comando tcpdump no arquivo icmpcapture.pcap.

    sudo tcpdump -r ~/icmpcapture.pcap -n
    

    Para VMs de back-end no grupo de instâncias ig-us-l3-default, você verá entradas de arquivo como:

    reading from file /home/[user-directory]/icmpcapture.pcap, link-type EN10MB (Ethernet)
    22:13:07.814486 IP 35.230.115.24 > 35.193.84.93: ICMP echo request, id 1995, seq 1, length 64
    22:13:07.814513 IP 35.193.84.93 > 35.230.115.24: ICMP echo reply, id 1995, seq 1, length 64
    22:13:08.816150 IP 35.230.115.24 > 35.193.84.93: ICMP echo request, id 1995, seq 2, length 64
    22:13:08.816175 IP 35.193.84.93 > 35.230.115.24: ICMP echo reply, id 1995, seq 2, length 64
    22:13:09.817536 IP 35.230.115.24 > 35.193.84.93: ICMP echo request, id 1995, seq 3, length 64
    22:13:09.817560 IP 35.193.84.93 > 35.230.115.24: ICMP echo reply, id 1995, seq 3, length 64
    ...
    

    Para VMs de back-end no grupo de instâncias ig-us-tcp-80, você verá que nenhum pacote foi recebido e o arquivo estará em branco:

    reading from file /home/[user-directory]/icmpcapture.pcap, link-type EN10MB (Ethernet)
    

A seguir