Configurar um balanceador de carga de rede de proxy externo regional com back-ends de grupos de instâncias de VM

Um balanceador de carga de rede de proxy regional externo é um balanceador de carga regional de camada 4 baseado em proxy que permite executar e escalonar o tráfego do serviço TCP em uma única região atrás de um endereço IP regional externo. Esses balanceadores de carga distribuem o tráfego TCP externo da Internet para back-ends na mesma região.

Antes de começar, leia a Visão geral do balanceador de carga de rede de proxy externo.

Este guia contém instruções para configurar um balanceador de carga de rede de proxy externo regional com um back-end de grupo de instâncias gerenciadas (MIG, na sigla em inglês). Neste exemplo, você configura a implantação mostrada no diagrama a seguir.

Exemplo de configuração do balanceador de carga de rede de proxy externo com back-ends de grupo de instâncias.
Exemplo de configuração do balanceador de carga de rede de proxy externo com back-ends de grupos de instâncias

Neste exemplo, vamos usar o balanceador de carga para distribuir o tráfego TCP entre as VMs de back-end em dois grupos gerenciados de instâncias zonais na região A. Para o propósito deste exemplo, o serviço é um conjunto de servidores Apache configurados para responder na porta 110. Muitos navegadores não permitem a porta 110, portanto, a seção de teste usa curl.

Um balanceador de carga de rede de proxy externo regional é um balanceador de carga regional. Todos os componentes do balanceador de carga precisam estar na mesma região que o balanceador de carga.

Permissões

Para seguir as instruções deste guia, você precisa ser capaz de criar instâncias e modificar uma rede em um projeto. É necessário ser um Proprietário ou Editor de projeto, ou ter todos os seguintes papéis do IAM do Compute Engine:

Tarefa Papel necessário
Criar redes, sub-redes e componentes do balanceador de carga Administrador de rede do Compute (roles/compute.networkAdmin)
Adicionar e remover regras de firewall Administrador de segurança do Compute (roles/compute.securityAdmin)
Criar instâncias Administrador da instância do Compute (roles/compute.instanceAdmin)

Para mais informações, consulte estes guias:

Opcional: usar endereços BYOIP

Com o BYOIP, é possível importar seus próprios endereços públicos para Cloud de Confiance by S3NS e usar os endereços com recursos do Cloud de Confiance . Por exemplo, se você importar seus próprios endereços IPv4, poderá atribuir um deles à regra de encaminhamento ao configurar o balanceador de carga. Ao seguir as instruções neste documento para configurar o balanceador de carga, forneça o endereço BYOIP como o endereço IP.

Para mais informações sobre o uso do BYOIP, consulte Trazer seus próprios endereços IP.

Configurar a rede e as sub-redes

Você precisa de uma rede VPC compartilhada com duas sub-redes: uma para os back-ends do balanceador de carga e outra para os proxies do balanceador de carga. Esse balanceador de carga é regional. O tráfego na rede VPC será direcionado ao balanceador de carga se a origem do tráfego estiver em uma sub-rede na mesma região que o balanceador de carga.

Neste exemplo, usamos a seguinte rede VPC, região e sub-redes:

  • Rede: uma rede VPC de modo personalizado chamada lb-network

  • Sub-rede para back-ends: uma sub-rede chamada backend-subnet em Região A que usa 10.1.2.0/24 como o intervalo de endereços IP principal

  • Sub-rede para proxies: uma sub-rede chamada proxy-only-subnet no Região B que usa 10.129.0.0/23 como o intervalo de endereços IP principal

Criar a rede e as sub-redes

Console

  1. No console do Cloud de Confiance , 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. Crie uma sub-rede para os back-ends do balanceador de carga. Na seção Nova sub-rede, insira as informações a seguir:

    • Name: backend-subnet
    • Região: REGION_A
    • Intervalo de endereços IP: 10.1.2.0/24
  6. Clique em Concluído.

  7. Clique em Criar.

gcloud

  1. Para criar a rede VPC personalizada, use o comando gcloud compute networks create:

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. Para criar uma sub-rede na rede lb-network na região REGION_A, use o comando gcloud compute networks subnets create:

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

Criar a sub-rede somente proxy

Uma sub-rede somente proxy fornece um conjunto de endereços IP que o Google 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 baseados no Envoy na Região A da rede VPC lb-network.

Console

Se você estiver usando o console Cloud de Confiance , poderá esperar e criar a sub-rede somente proxy depois na página Balanceamento de carga.

Se você quiser criar a sub-rede somente proxy agora, siga estas etapas:

  1. No console do Cloud de Confiance , acesse a página Redes VPC.

    Acessar redes VPC

  2. Clique no nome da rede VPC: lb-network.

  3. Clique em Add subnet.

  4. Em Nome, insira proxy-only-subnet.

  5. Em Região, selecione REGION_A.

  6. Defina Finalidade como Proxy gerenciado regional.

  7. Em Intervalo de endereços IP, insira 10.129.0.0/23.

  8. Clique em Adicionar.

gcloud

Para criar a sub-rede somente proxy, use o comando gcloud compute networks subnets create:

gcloud compute networks subnets create proxy-only-subnet \
    --purpose=REGIONAL_MANAGED_PROXY \
    --role=ACTIVE \
    --region=REGION_A \
    --network=lb-network \
    --range=10.129.0.0/23

Crie regras de firewall

Neste exemplo, você cria as regras de firewall a seguir:

  • fw-allow-ssh: uma regra de entrada, aplicável às instâncias cuja carga está sendo balanceada, que permite a conectividade SSH de entrada na porta TCP 22 proveniente de qualquer endereço. Escolha um intervalo de IP de origem mais restritivo para esta regra. Por exemplo, é possível especificar apenas os intervalos de IP do sistema do qual você inicia sessões SSH. Neste exemplo, usamos a tag de destino allow-ssh.

  • fw-allow-health-check.Uma regra de entrada, aplicável às instâncias submetidas a balanceamento de carga, que permite todo o tráfego TCP dos intervalos de sondagem de verificação de integridadeCloud de Confiance . Neste exemplo, usamos a tag de destino allow-health-check.

  • fw-allow-proxy-only-subnet. uma regra de entrada que permite que as conexões da sub-rede somente proxy alcancem os back-ends.

Sem essas regras de firewall, a regra padrão de negação de entrada bloqueará o tráfego que chega para as instâncias de back-end.

As tags de destino definem as instâncias de back-end. Sem as tags de destino, as regras de firewall se aplicam a todas as instâncias de back-end na rede VPC. Ao criar as VMs de back-end, inclua as tags de destino especificadas, conforme mostrado em Criar um grupo gerenciado de instâncias.

Console

  1. No console do Cloud de Confiance , acesse a página Políticas de firewall.

    Acesse as políticas de firewall

  2. Clique em Criar regra de firewall novamente para criar uma regra que autorize conexões SSH de entrada. Preencha os seguintes campos:

    • Name: 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.

  4. Clique em Criar regra de firewall pela segunda vez para criar a regra que permite verificações de integridade doCloud de Confiance :

    • Nome: fw-allow-health-check
    • Rede: lb-network
    • Direção do tráfego: entrada
    • Ação na correspondência: permitir
    • Destinos: tags de destino especificadas
    • Tags de meta: allow-health-check
    • Filtro de origem: intervalos IPv4
    • Intervalos IPv4 de origem: 177.222.80.0/23
    • Protocolos e portas:

      • Escolha Protocolos e portas especificados.
      • Marque a caixa de seleção tcp e insira 80 como o número da porta.

      Como prática recomendada, limite esta regra somente aos protocolos e portas que correspondem aos usados por sua verificação de integridade. Se você usar tcp:80 para o protocolo e a porta, Cloud de Confiance poderá usar HTTP na porta 80 para entrar em contato com suas VMs, mas não poderá usar HTTPS na porta 443 para entrar em contato com elas.

  5. Clique em Criar.

  6. Clique em Criar regra de firewall uma terceira vez para criar a regra que permite que os servidores proxy do balanceador de carga se conectem aos back-ends:

    • Name: fw-allow-proxy-only-subnet
    • Rede: lb-network
    • Direção do tráfego: entrada
    • Ação na correspondência: permitir
    • Destinos: tags de destino especificadas
    • Tags de meta: allow-proxy-only-subnet
    • Filtro de origem: intervalos IPv4
    • Intervalos IPv4 de origem: 10.129.0.0/23
    • Protocolos e portas:
      • Escolha Protocolos e portas especificados.
      • Marque a caixa de seleção tcp e insira 80 como o número da porta.
  7. 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, oCloud de Confiance 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
    
  2. Crie a regra fw-allow-health-check para permitir verificações de integridade do Cloud de Confiance. Neste exemplo, é permitido todo o tráfego TCP de sondagens de verificação de integridade. No entanto, é possível configurar um conjunto mais restrito de portas para atender às suas necessidades.

    gcloud compute firewall-rules create fw-allow-health-check \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --source-ranges=177.222.80.0/23 \
        --target-tags=allow-health-check \
        --rules=tcp:80
    
  3. Crie a regra fw-allow-proxy-only-subnet para permitir que os proxies Envoy da região se conectem aos seus back-ends. Defina --source-ranges como os intervalos alocados da sua sub-rede somente proxy, neste exemplo, 10.129.0.0/23.

    gcloud compute firewall-rules create fw-allow-proxy-only-subnet \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --source-ranges=10.129.0.0/23 \
        --target-tags=allow-proxy-only-subnet \
        --rules=tcp:80
    

Reserve o endereço IP do balanceador de carga

Reserve um endereço IP estático para o balanceador de carga.

Console

  1. No console do Cloud de Confiance , acesse a página Reservar um endereço estático.

    Acessar "Reservar um endereço estático"

  2. Escolha um nome para o novo endereço.

  3. Em Nível de serviço de rede, selecione Padrão.

  4. Em Versão IP, selecione IPv4. Os endereços IPv6 não são aceitos.

  5. Em Tipo, selecione Regional.

  6. Em Região, selecione REGION_A.

  7. Deixe a opção Anexado a definida como Nenhum. Depois de criar o balanceador de carga, esse endereço IP será anexado à regra de encaminhamento do balanceador de carga.

  8. Clique em Reservar para reservar o IP.

gcloud

  1. Para reservar um endereço IP externo estático, use o comando gcloud compute addresses create:

    gcloud compute addresses create ADDRESS_NAME  \
        --region=REGION_A \
        --network-tier=STANDARD
    

    Substitua ADDRESS_NAME pelo nome que você quer chamar com esse endereço.

  2. Para ver o resultado, use o comando gcloud compute addresses describe:

    gcloud compute addresses describe ADDRESS_NAME
    

Criar um grupo gerenciado de instâncias

Nesta seção, mostramos como criar dois back-ends de grupos gerenciados de instâncias (MIG, na sigla em inglês) na região A para o balanceador de carga. O MIG fornece instâncias de VM que executam os servidores Apache de back-end para este exemplo. Normalmente, um balanceador de carga de rede de proxy externo regional não é usado para o tráfego HTTP, mas O software Apache é normalmente usado para testes.

Console

Criar um modelo de instância

  1. No console do Cloud de Confiance , acesse a página Modelos de instância.

    Acessar "Modelos de instância"

  2. Clique em Criar modelo de instância.

  3. Em Nome, insira ext-reg-tcp-proxy-backend-template.

  4. Verifique se Disco de inicialização está definido como uma imagem Debian, como Debian GNU/Linux 12 (bookworm): Estas instruções usam comandos que estão disponíveis apenas no Debian, como apt-get.

  5. Clique em Opções avançadas.

  6. Clique em Rede e configure os seguintes campos:

    1. Em Tags de rede, insira allow-ssh, allow-health-check e allow-proxy-only-subnet.
    2. Em Interfaces de rede, selecione o seguinte:
      • Rede: lb-network
      • Sub-rede: backend-subnet
  7. 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
     
  8. Clique em Criar.

Criar um grupo gerenciado de instâncias

  1. No console, do Cloud de Confiance , acesse a página Grupos de instâncias.

    Acesse grupo de instâncias

  2. Clique em Criar grupo de instâncias.

  3. Selecione Novo grupo gerenciado de instâncias (sem estado). Para mais informações, consulte Criar um MIG com discos com estado.

  4. Em Nome, insira mig-a.

  5. Em Local, selecione Zona única.

  6. Em Região, selecione REGION_A.

  7. Em Zona, selecione ZONE_A.

  8. Em Modelo de instância, selecione ext-reg-tcp-proxy-backend-template.

  9. 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.
  10. Em Mapeamento de portas, clique em Adicionar porta.

    • Em Nome da porta, insira tcp80.
    • Em Número da porta, digite 80.
  11. Clique em Criar.

  12. Para criar um segundo grupo de instâncias gerenciadas, repita as etapas Criar um grupo de instâncias gerenciadas e use as configurações a seguir:

    • Name: mig-b
    • Zona: ZONE_B

    Mantenha todas as outras configurações iguais.

gcloud

As instruções da Google Cloud CLI neste guia pressupõem que você esteja usando o Cloud Shell ou outro ambiente com bash instalado.

  1. Para criar um modelo de instância de VM com o servidor HTTP, use o comando gcloud compute instance-templates create:

    gcloud compute instance-templates create ext-reg-tcp-proxy-backend-template \
        --region=REGION_A \
        --network=lb-network \
        --subnet=backend-subnet \
        --tags=allow-ssh,allow-health-check,allow-proxy-only-subnet \
        --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. Criar um grupo gerenciado de instâncias na zona ZONE_A:

    gcloud compute instance-groups managed create mig-a \
        --zone=ZONE_A \
        --size=2 \
        --template=ext-reg-tcp-proxy-backend-template
    
  3. Criar um grupo gerenciado de instâncias na zona ZONE_B:

    gcloud compute instance-groups managed create mig-b \
        --zone=ZONE_B \
        --size=2 \
        --template=ext-reg-tcp-proxy-backend-template
    

Configurar o balanceador de carga

Console

Iniciar a configuração

  1. No console do Cloud de Confiance , acesse a página Balanceamento de carga.

    Acesse Balanceamento de carga

  2. Clique em Criar balanceador de carga.
  3. Em Tipo de balanceador de carga, selecione Balanceador de carga de rede (TCP/UDP/SSL) e clique em Próxima.
  4. Em Proxy ou passagem, selecione Balanceador de carga de proxy e clique em Próxima.
  5. Em Voltado ao público ou interno, selecione Voltado ao público (externo) e clique em Próxima.
  6. Em Implantação global ou de região única, selecione Melhor para cargas de trabalho regionais e clique em Próxima.
  7. Clique em Configurar.

Configuração básica

  1. Em Nome, insira my-ext-tcp-lb.
  2. Em Região, selecione REGION_A.
  3. Em Rede, selecione lb-network.

Reservar uma sub-rede somente proxy

  1. Clique em Reservar.
  2. No campo Nome, use proxy-only-subnet.
  3. No campo Intervalo de endereços IP, insira 10.129.0.0/23.
  4. Clique em Adicionar.

Configurar os back-ends

  1. Clique em Configuração de back-end.
  2. Na lista Tipo de back-end, selecione Grupo de instâncias.
  3. Na lista Protocolo, selecione TCP.
  4. No campo Porta nomeada, insira tcp80.
  5. Configure a verificação de integridade:
    1. Na lista Verificação de integridade, selecione Criar verificação de integridade.
    2. No campo Nome, use tcp-health-check.
    3. Na lista Protocolo, selecione TCP.
    4. No campo Porta, insira 80.
    5. Clique em Criar.
  6. Configure o primeiro back-end:
    1. Em Novo back-end, selecione o grupo de instâncias mig-a.
    2. Em Números de portas, insira 80.
    3. Mantenha os valores padrão restantes e clique em Concluído.
  7. Configure o segundo back-end:
    1. Clique em Adicionar back-end.
    2. Em Novo back-end, selecione o grupo de instâncias mig-b.
    3. Em Números de portas, insira 80.
    4. Mantenha os valores padrão restantes e clique em Concluído.
  8. Mantenha os valores padrão restantes e clique em Salvar.
  9. No console do Cloud de Confiance , verifique se há uma marca de seleção ao lado de Configuração de back-end. Se não houver, verifique se você concluiu todas as etapas.

Configure o front-end

  1. Clique em Configuração de front-end.
  2. Em Nome, insira ext-reg-tcp-forwarding-rule.
  3. Em Nível de serviço de rede, selecione Padrão.
  4. Em Endereço IP, selecione o endereço IP reservado anteriormente: LB_IP_ADDRESS
  5. Em Número da porta, digite 110. A regra de encaminhamento encaminha pacotes com uma porta de destino correspondente.
  6. Em Protocolo de proxy, selecione Desativado porque o protocolo PROXY não funciona com o software Apache HTTP Server. Para mais informações, consulte Protocolo de proxy.
  7. Clique em Concluído.
  8. No console Cloud de Confiance , verifique se há uma marca de seleção ao lado de Configuração de front-end. Se não houver, verifique se você concluiu todas as etapas anteriores.

Revisar e finalizar

  1. Clique em Analisar e finalizar.
  2. Revise suas configurações do balanceador de carga.
  3. Opcional: clique em Código equivalente para ver a solicitação da API REST usada para criar o balanceador de carga.
  4. Clique em Criar.

gcloud

  1. Criar uma verificação de integridade regional:

    gcloud compute health-checks create tcp tcp-health-check \
        --region=REGION_A \
        --use-serving-port
    
  2. Crie um serviço de back-end:

    gcloud compute backend-services create ext-reg-tcp-proxy-bs \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --protocol=TCP \
        --port-name=tcp80 \
        --region=REGION_A \
        --health-checks=tcp-health-check \
        --health-checks-region=REGION_A
    
  3. Adicionar grupos de instâncias ao serviço de back-end:

    gcloud compute backend-services add-backend ext-reg-tcp-proxy-bs \
        --region=REGION_A \
        --instance-group=mig-a \
        --instance-group-zone=ZONE_A \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.8
     
    gcloud compute backend-services add-backend ext-reg-tcp-proxy-bs \
        --region=REGION_A \
        --instance-group=mig-b \
        --instance-group-zone=ZONE_B \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.8
    
  4. Crie um proxy TCP de destino:

    gcloud compute target-tcp-proxies create ext-reg-tcp-target-proxy \
        --backend-service=ext-reg-tcp-proxy-bs \
        --proxy-header=NONE \
        --region=REGION_A
    

    Se quiser ativar o cabeçalho proxy, defina-o como PROXY_V1 em vez de NONE. Neste exemplo, não ative o Protocolo de PROXY, porque ele não funciona com o software servidor HTTP Apache. Para mais informações, consulte Protocolo de proxy.

  5. Crie a regra de encaminhamento. Para --ports, especifique um único número de porta de 1-65535. Este exemplo usa a porta 110. A regra de encaminhamento encaminha pacotes com uma porta de destino correspondente.

    gcloud compute forwarding-rules create ext-reg-tcp-forwarding-rule \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --network-tier=STANDARD \
        --network=lb-network \
        --region=REGION_A \
        --target-tcp-proxy=ext-reg-tcp-target-proxy \
        --target-tcp-proxy-region=REGION_A \
        --address=LB_IP_ADDRESS \
        --ports=110
    

Testar o balanceador de carga

Agora que você configurou o balanceador de carga, é possível testar o envio de tráfego para o endereço IP dele.

  1. Anote o endereço IP do balanceador de carga.

    Para encontrar o endereço IPv4, execute o seguinte comando:

    gcloud compute addresses describe ADDRESS_NAME
    
  2. Envie tráfego para o balanceador de carga executando o comando a seguir. Substitua LB_IP_ADDRESS pelo endereço IPv4 do balanceador de carga:

    curl -m1 LB_IP_ADDRESS:9090
    

Outras opções de configuração

Nesta seção, o exemplo é detalhado para fornecer outras opções de configuração. Todas as tarefas são opcionais. É possível realizá-las em qualquer ordem.

Criar um balanceador de carga com rotas TLS

Nesta seção, mostramos como criar um balanceador de carga que pode usar o roteamento baseado em SNI. O roteamento baseado em SNI permite que seus balanceadores de carga de rede de proxy roteiem o tráfego para serviços de back-end específicos com base no nome do host da indicação de nome do servidor (SNI) fornecido durante o handshake de TLS.

Para criar esse balanceador de carga, usamos as mesmas redes, sub-redes e regras de firewall criadas anteriormente nesta página. Você configura a implantação mostrada no diagrama a seguir:

Configuração do balanceador de carga de rede de proxy externo regional com rotas TLS.
Configuração do balanceador de carga de rede de proxy externo regional com rotas TLS.

Criar um back-end de grupo gerenciado de instâncias

Nesta seção, mostramos como criar back-ends de grupo gerenciado de instâncias (MIG) para o balanceador de carga. O MIG fornece instâncias de VM que executam os servidores de back-end para este exemplo.

As instruções da Google Cloud CLI neste guia pressupõem que você esteja usando o Cloud Shell ou outro ambiente com bash instalado.

  1. Crie um modelo de instância com um serviço HTTPS "echo" exposto na porta 443.

    gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --region=REGION_A \
    --network=NETWORK \
    --subnet=SUBNET_A \
    --stack-type=IPv4_ONLY \
    --tags=allow-ssh,allow-health-check,allow-proxy-only-subnet \
    --image-family=debian-12 \
    --image-project=debian-cloud \
    --metadata=startup-script='#! /bin/bash
    sudo sed -i "s/^#DNS=.*/DNS=8.8.8.8 8.8.4.4/" /etc/systemd/resolved.conf
    sudo systemctl restart systemd-resolved
    sudo rm -rf /var/lib/apt/lists/*
    sudo apt-get -y clean
    sudo apt-get -y update
    sudo apt-get -y install ca-certificates curl gnupg software-properties-common
    sudo curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
    sudo add-apt-repository -y "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
    sudo apt-get -y update
    sudo apt-get -y install docker-ce
    sudo which docker
    echo "{ \"registry-mirrors\": [\"https://mirror.gcr.io\"] }" | sudo tee -a /etc/docker/daemon.json
    sudo service docker restart
    sudo docker run -e HTTPS_PORT=9999 -p 443:9999 --rm -dt mendhak/http-https-echo:22'
    

    Substitua:

    • INSTANCE_TEMPLATE_NAME: um nome para o modelo de instância.
    • REGION_A: a região do modelo de instância.
    • NETWORK: o nome da rede.
    • SUBNET_A: o nome da sub-rede.
  2. Crie um grupo gerenciado de instâncias com base no modelo de instância:

    gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
      --zone=ZONE_A \
      --size=2 \
      --template=INSTANCE_TEMPLATE_NAME
    

    Substitua ZONE_A pela zona do grupo de instâncias.

  3. Defina o nome da porta de exibição para o grupo de instâncias gerenciadas:

    gcloud compute instance-groups managed set-named-ports INSTANCE_GROUP_NAME \
      --named-ports=PORT_NAME:PORT_NUMBER \
      --zone=ZONE_A
    

    Substitua:

    • PORT_NAME: um nome para a porta de serviço, por exemplo, tcp443.
    • PORT_NUMBER: um número de porta para a porta de serviço, por exemplo, 443.

Configurar o firewall

Configure uma regra de firewall para permitir o tráfego do balanceador de carga e das sondagens de verificação de integridade para as instâncias de back-end.

gcloud compute firewall-rules create FIREWALL_RULE_NAME \
    --network=NETWORK \
    --action=allow \
    --direction=ingress \
    --source-ranges=177.222.80.0/23 \
    --target-tags=allow-health-check \
    --rules=tcp:443

Substitua FIREWALL_RULE_NAME por um nome para a regra de firewall.

Configurar o balanceador de carga

  1. Crie uma verificação de integridade HTTPS:

    gcloud compute health-checks create http HTTPS_HEALTH_CHECK_NAME \
        --region=REGION_A \
        --port=HC_PORT
    

    Substitua:

    • HTTPS_HEALTH_CHECK_NAME: um nome para a verificação de integridade.
    • HC_PORT: a porta da verificação de integridade, por exemplo, 443.
    • REGION_A: a região da verificação de integridade.
  2. Crie um serviço de back-end:

    gcloud compute backend-services create BACKEND_SERVICE_NAME \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --protocol=TCP \
        --port-name=PORT_NAME \
        --health-checks=HTTPS_HEALTH_CHECK_NAME \
        --health-checks-region=REGION_A \
        --region=REGION_A
    

    Substitua:

    • BACKEND_SERVICE_NAME: um nome para o serviço de back-end.
    • PORT_NAME: o nome da porta do serviço de back-end. Use a mesma porta nomeada configurada no grupo de instâncias, por exemplo, tcp443.
    • HTTPS_HEALTH_CHECK_NAME: o nome da verificação de integridade HTTPS.
  3. Adicione o grupo de instâncias de back-end ao serviço de back-end:

    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.8
        --instance-group=INSTANCE_GROUP_NAME \
        --instance-group-zone=ZONE_A \
        --region=REGION_A
      

    Substitua:

    • INSTANCE_GROUP_NAME: o nome do grupo de instâncias de back-end.
    • ZONE_A: a zona do grupo de instâncias.
  4. Crie um proxy TCP de destino.

    gcloud beta compute target-tcp-proxies create TARGET_TCP_PROXY_NAME \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --proxy-header=NONE \
        --region=REGION_A
    

    Substitua TARGET_TCP_PROXY_NAME pelo nome do proxy TCP de destino.

  5. Crie uma especificação de rota TLS e salve-a em um arquivo YAML.

    cat <<EOF | tee YAML_FILE_NAME
    name: TLS_ROUTE_NAME
    targetProxies:
    - projects/PROJECT_NUMBER/locations/REGION_A/targetTcpProxies/TARGET_TCP_PROXY
    rules:
    - matches:
      - sniHost:
        - example.com
      action:
      destinations:
      - serviceName: projects/PROJECT_NUMBER/locations/REGION_A/backendServices/BACKEND_SERVICE_NAME
    EOF
    

    Substitua:

    • YAML_FILE_NAME: um nome para o arquivo YAML, por exemplo, tls-route.yaml.
    • TLS_ROUTE_NAME: um nome para a rota TLS.
    • PROJECT_NUMBER: o número do projeto.
  6. Use o arquivo de especificação YAML para criar o recurso de rota TLS.

    gcloud network-services tls-routes import TLS_ROUTE_NAME \
      --source=YAML_FILE_NAME \
      --location=REGION_A
    
  7. Crie a regra de encaminhamento.

    gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
      --load-balancing-scheme=EXTERNAL_MANAGED \
      --network-tier=STANDARD \
      --network=NETWORK \
      --region=REGION_A \
      --target-tcp-proxy=TARGET_TCP_PROXY_NAME \
      --target-tcp-proxy-region=REGION_A \
      --address=IP_ADDRESS \
      --ports=PORT_NUMBER
    

    Substitua:

    • FORWARDING_RULE_NAME: um nome para a regra de encaminhamento.
    • NETWORK: o nome da rede.
    • SUBNET_A: o nome da sub-rede na mesma região do balanceador de carga.
    • IP_ADDRESS: o endereço IP do balanceador de carga.
    • PORT_NUMBER: a porta usada pela regra de encaminhamento, por exemplo, 443.

Testar o balanceador de carga

Agora que você configurou o balanceador de carga, é possível testar o envio de tráfego para o endereço IP dele.

  1. Verifique se é possível acessar o serviço HTTPS pelo balanceador de carga.

    curl https://example.com --resolve example.com:443:IP_ADDRESS -k
    

    O comando vai retornar uma resposta de uma das VMs no grupo gerenciado de instâncias com o seguinte impresso no console.

    "path": "/",
    "headers": {
      "host": "example.com",
      "user-agent": "curl/7.81.0",
      "accept": "*/*"
    },
    "method": "GET",
    "body": "",
    "fresh": false,
    "hostname": "example.com",
    "ip": "::ffff:10.142.0.2",
    "ips": [],
    "protocol": "https",
    "query": {},
    "subdomains": [],
    "xhr": false,
    "os": {
      "hostname": "0cd3aec9b351"
    },
    "connection": {
      "servername": "example.com"
    }
    

    Você pode verificar ainda mais isso se fornecer um nome do host SNI diferente que não corresponda a uma rota TLS ou se não fornecer um nome do host SNI, a solicitação será descartada.

    • Execute um teste com um nome de host SNI que não corresponda a example.com para garantir que a conexão seja rejeitada.
    curl https://unknown.com --resolve unknown.com:443:IP_ADDRESS -k
    
    • Faça um teste com uma conexão de texto simples sem TLS para garantir que a conexão seja rejeitada.
    curl example.com:443 --resolve example.com:443:IP_ADDRESS -k
    

    Esses comandos retornam o seguinte erro.

    curl: (35) OpenSSL SSL_connect: Connection reset by peer in connection
    

    O código de erro connection_refused aparece nos registros do proxyStatus quando o balanceador de carga rejeita essas conexões inválidas.

Ativar a afinidade de sessão

A configuração de exemplo cria um serviço de back-end sem afinidade da sessão.

Nestes procedimentos, você verá um exemplo de como atualizar um serviço de back-end para um balanceador de carga criado anteriormente. Com isso, o serviço de back-end usa a afinidade de IP do cliente ou a afinidade de cookie gerado.

Quando a afinidade de IP do cliente está ativada, o balanceador de carga direciona as solicitações de um determinado cliente para a mesma VM de back-end. Isso é feito com base em um hash criado a partir do endereço IP do cliente e do endereço IP do balanceador de carga (o endereço IP externo de uma regra de encaminhamento externo).

Para ativar a afinidade da sessão de IP do cliente, conclua as etapas a seguir.

Console

  1. No console do Cloud de Confiance , acesse a página Balanceamento de carga.

    Acessar o "Balanceamento de carga"

  2. Clique em Back-ends.

  3. Clique em ext-reg-tcp-proxy-bs (o nome do serviço de back-end que você criou para este exemplo) e, em seguida, clique em Editar.

  4. Na página Detalhes do serviço de back-end, clique em Configuração avançada.

  5. Em Afinidade da sessão, selecione IP do cliente.

  6. Clique em Atualizar.

gcloud

Para atualizar o serviço de back-end ext-reg-tcp-proxy-bs e especificar a afinidade da sessão de IP do cliente, use o comando gcloud compute backend-services update ext-reg-tcp-proxy-bs:

gcloud compute backend-services update ext-reg-tcp-proxy-bs \
    --region=REGION_A \
    --session-affinity=CLIENT_IP

A seguir