Configure um balanceador de carga de aplicações interno regional com back-ends do grupo de instâncias de VM

Este documento fornece instruções para configurar um Application Load Balancer interno regional para os seus serviços executados em VMs do Compute Engine.

Para configurar o equilíbrio de carga para os seus serviços executados em pods do Google Kubernetes Engine (GKE), consulte o artigo Equilíbrio de carga nativo de contentores através de NEGs autónomos e a secção Anexar um Application Load Balancer interno a NEGs autónomos.

Para configurar o equilíbrio de carga para aceder às APIs e aos serviços Google através do Private Service Connect, consulte o artigo Aceda às APIs Google regionais através de back-ends.

A configuração dos balanceadores de carga de aplicações internos tem duas partes:

  • Realize tarefas de pré-requisitos, como garantir que as contas necessárias têm as autorizações corretas e preparar a rede de nuvem virtual privada (VPC).
  • Configure os recursos do balanceador de carga.

Antes de seguir este guia, familiarize-se com o seguinte:

Autorizações

Para seguir este guia, tem de conseguir criar instâncias e modificar uma rede num projeto. Tem de ser proprietário ou editor do projeto, ou ter todas as funções do IAM do Compute Engine seguintes.

Tarefa Função necessária
Crie redes, sub-redes e componentes do balanceador de carga Administrador da rede de computação (roles/compute.networkAdmin)
Adicione e remova regras de firewall Administrador de segurança do Compute (roles/compute.securityAdmin)
Crie instâncias Administrador da instância de computação (roles/compute.instanceAdmin.v1)

Para mais informações, consulte os seguintes guias:

Vista geral da configuração

Pode configurar um Application Load Balancer interno conforme descrito no seguinte fluxo de configuração de alto nível. Os passos numerados referem-se aos números no diagrama.

Componentes numerados do balanceador de carga de aplicações interno.
Componentes numerados do balanceador de carga da aplicação interno (clique para aumentar).

Conforme mostrado no diagrama, este exemplo cria um Application Load Balancer interno numa rede VPC na região us-west1, com um serviço de back-end e dois grupos de back-end.

O diagrama mostra o seguinte:

  1. Uma rede VPC com duas sub-redes:

    • Uma sub-rede é usada para back-ends (grupos de instâncias) e a regra de encaminhamento. O respetivo intervalo de endereços IP principal é 10.1.2.0/24.

    • Uma sub-rede é uma sub-rede só de proxy na região us-west1. Tem de criar uma sub-rede apenas de proxy em cada região de uma rede VPC onde usa equilibradores de carga de aplicações internos. A sub-rede apenas de proxy da região é partilhada entre todos os balanceadores de carga de aplicações internos na região. Os endereços de origem dos pacotes enviados do Application Load Balancer interno para os back-ends do seu serviço são atribuídos a partir da sub-rede apenas de proxy. Neste exemplo, a sub-rede apenas de proxy para a região tem um intervalo de endereços IP principal de 10.129.0.0/23, que é o tamanho da sub-rede recomendado. Para mais informações, consulte o artigo Sub-redes apenas de proxy para equilibradores de carga baseados no Envoy.

  2. Duas regras de firewall:

    • Uma regra de firewall que permite fluxos de tráfego de sub-rede só de proxy na sua rede. Isto significa adicionar uma regra que permita o tráfego da porta TCP 80, 443 e 8080 de 10.129.0.0/23 (o intervalo da sub-rede só de proxy neste exemplo).
    • Outra regra da firewall para as sondas de verificação de funcionamento.
  3. Instâncias de VM do Compute Engine de back-end.

  4. Grupos de instâncias geridos ou não geridos para implementações de VMs do Compute Engine.

    Em cada zona, pode ter uma combinação de tipos de grupos de back-end com base nos requisitos da sua implementação.

  5. Uma verificação de saúde regional que comunica a disponibilidade dos seus back-ends.

  6. Um serviço de back-end regional que monitoriza a utilização e o estado de funcionamento dos back-ends.

  7. Um mapa de URLs regional que analisa o URL de um pedido e encaminha pedidos para serviços de back-end específicos com base no anfitrião e no caminho do URL do pedido.

  8. Um proxy HTTP ou HTTPS de destino regional que recebe um pedido do utilizador e o encaminha para o mapa de URLs. Para HTTPS, configure um recurso de certificado SSL regional. O proxy de destino usa o certificado SSL para desencriptar o tráfego SSL se configurar o equilíbrio de carga HTTPS. O proxy de destino pode encaminhar o tráfego para as suas instâncias através de HTTP ou HTTPS.

  9. Uma regra de encaminhamento que tem o endereço IP interno do seu balanceador de carga para encaminhar cada pedido recebido para o proxy de destino.

    O endereço IP interno associado à regra de encaminhamento pode ser proveniente de qualquer sub-rede na mesma rede e região. Tenha em atenção as seguintes condições:

    • O endereço IP pode (mas não tem de) ser proveniente da mesma sub-rede que os grupos de instâncias de back-end.
    • O endereço IP não pode ser proveniente de uma sub-rede só de proxy reservada com a respetiva flag --purpose definida como REGIONAL_MANAGED_PROXY.
    • Se quiser partilhar o endereço IP interno com várias regras de encaminhamento, defina a flag --purpose do endereço IP como SHARED_LOADBALANCER_VIP.

    O exemplo nesta página usa um endereço IP interno reservado para a regra de encaminhamento do Application Load Balancer interno regional, em vez de permitir a atribuição de um endereço IP interno efémero. Como prática recomendada, recomendamos que reserve endereços IP para regras de encaminhamento.

Configure a rede e as sub-redes

Precisa de uma rede VPC com duas sub-redes: uma para os back-ends do balanceador de carga e outra para os proxies do balanceador de carga. Um balanceador de carga de aplicações interno é regional. O tráfego na rede da VPC é encaminhado para o balanceador de carga se a origem do tráfego estiver numa sub-rede na mesma região que o balanceador de carga.

Este exemplo usa a seguinte rede de VPC, região e sub-redes:

  • Rede. A rede é uma rede VPC no modo personalizado denominada lb-network.

  • Sub-rede para back-ends. Uma sub-rede denominada backend-subnet na região us-west1 usa 10.1.2.0/24 para o respetivo intervalo de IP principal.

  • Sub-rede para proxies. Uma sub-rede denominada proxy-only-subnet na região us-west1 usa 10.129.0.0/23 para o respetivo intervalo de IP principal.

Para demonstrar o acesso global, este exemplo também cria uma segunda VM de cliente de teste numa região e sub-rede diferentes:

  • Região: europe-west1
  • Sub-rede: europe-subnet, com o intervalo de endereços IP principal 10.3.4.0/24

Configure a rede e as sub-redes

Consola

  1. Na Google Cloud consola, aceda à página Redes VPC.

    Aceda a redes de VPC

  2. Clique em Criar rede de VPC.

  3. Em Nome, introduza lb-network.

  4. Na secção Sub-redes, defina o Modo de criação de sub-redes como Personalizado.

  5. Crie uma sub-rede para os back-ends do balanceador de carga. Na secção Nova sub-rede, introduza as seguintes informações:

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

  7. Clique em Adicionar sub-rede.

  8. Crie uma sub-rede para demonstrar o acesso global. Na secção Nova sub-rede, introduza as seguintes informações:

    • Nome: europe-subnet
    • Região: europe-west1
    • Intervalo de endereços IP: 10.3.4.0/24
  9. Clique em Concluído.

  10. Clique em Criar.

gcloud

  1. Crie a rede VPC personalizada com o comando gcloud compute networks create:

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. Crie uma sub-rede na rede lb-network na região us-west1 com o comando gcloud compute networks subnets create:

    gcloud compute networks subnets create backend-subnet \
        --network=lb-network \
        --range=10.1.2.0/24 \
        --region=us-west1
    
  3. Crie uma sub-rede na rede lb-network na região europe-west1 com o comando gcloud compute networks subnets create:

    gcloud compute networks subnets create europe-subnet \
        --network=lb-network \
        --range=10.3.4.0/24 \
        --region=europe-west1
    

API

Faça um pedido POST ao método networks.insert. Substitua PROJECT_ID pelo ID do seu projeto.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks

{
 "routingConfig": {
   "routingMode": "REGIONAL"
 },
 "name": "lb-network",
 "autoCreateSubnetworks": false
}

Faça um pedido POST ao método subnetworks.insert. Substitua PROJECT_ID pelo ID do seu projeto.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks

{
 "name": "backend-subnet",
 "network": "projects/PROJECT_ID/global/networks/lb-network",
 "ipCidrRange": "10.1.2.0/24",
 "region": "projects/PROJECT_ID/regions/us-west1",
}

Faça um pedido POST ao método subnetworks.insert. Substitua PROJECT_ID pelo ID do seu projeto.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/europe-west1/subnetworks

{
 "name": "europe-subnet",
 "network": "projects/PROJECT_ID/global/networks/lb-network",
 "ipCidrRange": "10.3.4.0/24",
 "region": "projects/PROJECT_ID/regions/europe-west1",
}

Configure a sub-rede só de proxy

Esta sub-rede apenas de proxy destina-se a todos os balanceadores de carga regionais baseados no Envoy na região us-west1 de lb-network.

Consola

Se estiver a usar a Google Cloud consola, pode esperar e criar a sub-rede apenas de proxy mais tarde na página Equilíbrio de carga.

Se quiser criar a sub-rede apenas de proxy agora, siga estes passos:

  1. Na Google Cloud consola, aceda à página Redes VPC.

    Aceda a redes de VPC

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

  3. Clique em Adicionar sub-rede.

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

  5. Para Região, selecione us-west1.

  6. Defina Purpose como Regional Managed Proxy.

  7. Para o Intervalo de endereços IP, introduza 10.129.0.0/23.

  8. Clique em Adicionar.

gcloud

Crie a sub-rede só de proxy com o comando gcloud compute networks subnets create.

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

API

Crie a sub-rede apenas de proxy com o método subnetworks.insert, substituindo PROJECT_ID pelo ID do projeto.

POST https://compute.googleapis.com/compute/projects/PROJECT_ID/regions/us-west1/subnetworks

{
  "name": "proxy-only-subnet",
  "ipCidrRange": "10.129.0.0/23",
  "network": "projects/PROJECT_ID/global/networks/lb-network",
  "region": "projects/PROJECT_ID/regions/us-west1",
  "purpose": "REGIONAL_MANAGED_PROXY",
  "role": "ACTIVE"
}

Configure regras de firewall

Este exemplo usa as seguintes regras de firewall:

  • fw-allow-ssh. Uma regra de entrada, aplicável às instâncias com balanceamento de carga, que permite a conetividade SSH de entrada na porta TCP 22 a partir de qualquer endereço. Pode escolher um intervalo de IPs de origem mais restritivo para esta regra. Por exemplo, pode especificar apenas os intervalos de IPs do sistema a partir do qual inicia sessões SSH. Este exemplo usa a etiqueta de destino allow-ssh para identificar as VMs às quais a regra de firewall se aplica.

  • fw-allow-health-check. Uma regra de entrada, aplicável às instâncias com balanceamento de carga, que permite todo o tráfego TCP dos Google Cloud sistemas de verificação de estado (em 130.211.0.0/22 e 35.191.0.0/16). Este exemplo usa a etiqueta de destino load-balanced-backend para identificar as VMs às quais a regra de firewall se aplica.

  • fw-allow-proxies. Uma regra de entrada, aplicável às instâncias com balanceamento de carga, que permite o tráfego TCP nas portas 80, 443 e 8080 dos proxies geridos do balanceador de carga de aplicações interno. Este exemplo usa a etiqueta de destino load-balanced-backend para identificar as VMs às quais a regra de firewall se aplica.

Sem estas regras de firewall, a regra de negação predefinida de entrada bloqueia o tráfego de entrada para as instâncias de back-end.

As etiquetas de destino definem as instâncias de back-end. Sem as etiquetas de destino, as regras da firewall aplicam-se a todas as instâncias de back-end na rede VPC. Quando criar as VMs de back-end, certifique-se de que inclui as etiquetas de destino especificadas, conforme mostrado em Crie um back-end de grupo de instâncias de VMs geridas.

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 regra que permite ligações SSH de entrada:

    • Nome: fw-allow-ssh
    • Rede: lb-network
    • Direção do tráfego: entrada
    • Ação na correspondência: Permitir
    • Objetivos: etiquetas de destino especificadas
    • Etiquetas de segmentação: allow-ssh
    • Filtro de origem: intervalos IPv4
    • Intervalos IPv4 de origem: 0.0.0.0/0
    • Protocolos e portas:
      • Escolha Protocolos e portas especificados.
      • Selecione a caixa de verificação TCP e, de seguida, introduza 22 para o número da porta.
  3. Clique em Criar.

  4. Clique em Criar regra de firewall uma segunda vez para criar a regra que permite as Google Cloud verificações de funcionamento:

    • Nome: fw-allow-health-check
    • Rede: lb-network
    • Direção do tráfego: entrada
    • Ação na correspondência: Permitir
    • Objetivos: etiquetas de destino especificadas
    • Etiquetas de segmentação: load-balanced-backend
    • Filtro de origem: intervalos IPv4
    • Intervalos de IPv4 de origem: 130.211.0.0/22 e 35.191.0.0/16
    • Protocolos e portas:
      • Escolha Protocolos e portas especificados.
      • Selecione a caixa de verificação TCP e, de seguida, introduza 80 para o número da porta.
        Como prática recomendada, limite esta regra apenas aos protocolos e às portas que correspondem aos usados pela sua verificação de estado. Se usar tcp:80 para o protocolo e a porta, Google Cloud pode usar o HTTP na porta 80 para contactar as suas VMs, mas não pode usar o HTTPS na porta 443 para as contactar.
  5. Clique em Criar.

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

    • Nome: fw-allow-proxies
    • Rede: lb-network
    • Direção do tráfego: entrada
    • Ação na correspondência: Permitir
    • Objetivos: etiquetas de destino especificadas
    • Etiquetas de segmentação: load-balanced-backend
    • Filtro de origem: intervalos IPv4
    • Intervalos IPv4 de origem: 10.129.0.0/23
    • Protocolos e portas:
      • Escolha Protocolos e portas especificados.
      • Selecione a caixa de verificação TCP e, de seguida, introduza 80, 443, 8080 para os números de porta.
  7. Clique em Criar.

gcloud

  1. Crie a regra de firewall fw-allow-ssh para permitir a conetividade SSH a VMs com a etiqueta de rede allow-ssh. Quando omite source-ranges, Google Cloud interpreta a regra como 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 Google Cloud verificações de funcionamento. Este exemplo permite todo o tráfego TCP de sondas de verificação de estado. No entanto, pode configurar um conjunto mais restrito de portas para satisfazer as suas necessidades.

    gcloud compute firewall-rules create fw-allow-health-check \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --source-ranges=130.211.0.0/22,35.191.0.0/16 \
        --target-tags=load-balanced-backend \
        --rules=tcp
    
  3. Crie a regra fw-allow-proxies para permitir que os proxies do balanceador de carga de aplicações interno se liguem aos seus back-ends. Defina source-ranges para os intervalos atribuídos da sua sub-rede só de proxy, por exemplo, 10.129.0.0/23.

    gcloud compute firewall-rules create fw-allow-proxies \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --source-ranges=source-range \
        --target-tags=load-balanced-backend \
        --rules=tcp:80,tcp:443,tcp:8080
    

API

Crie a regra de firewall fw-allow-ssh fazendo um pedido POST ao método firewalls.insert, substituindo PROJECT_ID pelo ID do seu projeto.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls

{
 "name": "fw-allow-ssh",
 "network": "projects/PROJECT_ID/global/networks/lb-network",
 "sourceRanges": [
   "0.0.0.0/0"
 ],
 "targetTags": [
   "allow-ssh"
 ],
 "allowed": [
  {
    "IPProtocol": "tcp",
    "ports": [
      "22"
    ]
  }
 ],
"direction": "INGRESS"
}

Crie a regra de firewall fw-allow-health-check fazendo um pedido POST ao método firewalls.insert, substituindo PROJECT_ID pelo ID do seu projeto.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls

{
 "name": "fw-allow-health-check",
 "network": "projects/PROJECT_ID/global/networks/lb-network",
 "sourceRanges": [
   "130.211.0.0/22",
   "35.191.0.0/16"
 ],
 "targetTags": [
   "load-balanced-backend"
 ],
 "allowed": [
   {
     "IPProtocol": "tcp"
   }
 ],
 "direction": "INGRESS"
}

Crie a regra de firewall fw-allow-proxies para permitir o tráfego TCP na sub-rede de proxy para o método firewalls.insert, substituindo PROJECT_ID pelo ID do seu projeto.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls

{
 "name": "fw-allow-proxies",
 "network": "projects/PROJECT_ID/global/networks/lb-network",
 "sourceRanges": [
   "10.129.0.0/23"
 ],
 "targetTags": [
   "load-balanced-backend"
 ],
 "allowed": [
   {
     "IPProtocol": "tcp",
     "ports": [
       "80"
     ]
   },
 {
     "IPProtocol": "tcp",
     "ports": [
       "443"
     ]
   },
   {
     "IPProtocol": "tcp",
     "ports": [
       "8080"
     ]
   }
 ],
 "direction": "INGRESS"
}

Reserve o endereço IP do balanceador de carga

Por predefinição, é usado um endereço IP para cada regra de encaminhamento. Pode reservar um endereço IP partilhado, que lhe permite usar o mesmo endereço IP com várias regras de encaminhamento. No entanto, se quiser publicar o balanceador de carga através do Private Service Connect, não use um endereço IP partilhado para a regra de encaminhamento.

Para o endereço IP da regra de encaminhamento, use backend-subnet. Se tentar usar a sub-rede apenas de proxy, a criação da regra de encaminhamento falha.

Consola

Pode reservar um endereço IP interno autónomo através da Google Cloud consola.

  1. Aceda à página Redes VPC.

    Aceda a redes de VPC

  2. Clique na rede que foi usada para configurar a conetividade híbrida entre os ambientes.
  3. Clique em Endereços IP internos estáticos e, de seguida, clique em Reservar endereço estático.
  4. Em Nome, introduza l7-ilb-ip-address.
  5. Para a Sub-rede, selecione backend-subnet.
  6. Se quiser especificar o endereço IP a reservar, em Endereço IP estático, selecione Permitir-me escolher e, em seguida, preencha um Endereço IP personalizado. Caso contrário, o sistema atribui automaticamente um endereço IP na sub-rede.
  7. Se quiser usar este endereço IP com várias regras de encaminhamento, em Finalidade, escolha Partilhado.
  8. Clique em Reservar para concluir o processo.

gcloud

  1. Usando a CLI gcloud, execute o comando gcloud compute addresses create:

    gcloud compute addresses create l7-ilb-ip-address \
        --region=us-west1 \
        --subnet=backend-subnet
    

    Se quiser usar o mesmo endereço IP com várias regras de encaminhamento, especifique --purpose=SHARED_LOADBALANCER_VIP.

  2. Use o gcloud compute addresses describecomando para ver o endereço IP atribuído:

    gcloud compute addresses describe l7-ilb-ip-address \
        --region=us-west1
    

Crie um back-end de grupo de instâncias de VM geridas

Esta secção mostra como criar um modelo de grupo de instâncias e um grupo de instâncias gerido. O grupo de instâncias geridas fornece instâncias de VMs que executam os servidores de back-end de um exemplo de balanceador de carga de aplicações interno regional. Para o seu grupo de instâncias, pode definir um serviço HTTP e mapear um nome de porta para a porta relevante. O serviço de back-end do balanceador de carga encaminha o tráfego para as portas denominadas. O tráfego dos clientes é balanceado por carga para servidores de back-end. Para fins de demonstração, os back-ends publicam os seus próprios nomes de anfitriões.

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 l7-ilb-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 os seguintes campos:
      1. Para Etiquetas de rede, introduza allow-ssh e load-balanced-backend.
      2. Para Interfaces de rede, selecione o seguinte:
        • Rede: lb-network
        • Subnet: backend-subnet
    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. Na Google Cloud consola, aceda à página Grupos de instâncias.

    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 os grupos de instâncias geridas com estado.
    3. Em Nome, introduza l7-ilb-backend-example.
    4. Para Localização, selecione Zona única.
    5. Para Região, selecione us-west1.
    6. Para Zona, selecione us-west1-a.
    7. Para Modelo de instância, selecione l7-ilb-backend-template.
    8. Especifique o número de instâncias que quer criar no grupo.

      Para este exemplo, especifique as seguintes opções em Ajuste automático de escala:

      • Para o Modo de ajuste automático de escala, selecione Off:do not autoscale.
      • Para Número máximo de instâncias, introduza 2.

      Opcionalmente, na secção Ajuste de escala automático da IU, pode configurar o grupo de instâncias para adicionar ou remover automaticamente instâncias com base na utilização do CPU das instâncias.

    9. Clique em Criar.

gcloud

As instruções gcloud neste guia pressupõem que está a usar o Cloud Shell ou outro ambiente com o bash instalado.

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

     gcloud compute instance-templates create l7-ilb-backend-template \
         --region=us-west1 \
         --network=lb-network \
         --subnet=backend-subnet \
         --tags=allow-ssh,load-balanced-backend \
         --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 um grupo de instâncias gerido na zona com o comando gcloud compute instance-groups managed create.

      gcloud compute instance-groups managed create l7-ilb-backend-example \
          --zone=us-west1-a \
          --size=2 \
          --template=l7-ilb-backend-template
    

API

Crie o modelo de instância com o método instanceTemplates.insert, substituindo PROJECT_ID pelo ID do projeto.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates
{
  "name":"l7-ilb-backend-template",
  "properties":{
     "machineType":"e2-standard-2",
     "tags":{
       "items":[
         "allow-ssh",
         "load-balanced-backend"
       ]
     },
     "metadata":{
        "kind":"compute#metadata",
        "items":[
          {
            "key":"startup-script",
            "value":"#! /bin/bash\napt-get update\napt-get install
            apache2 -y\na2ensite default-ssl\na2enmod ssl\n
            vm_hostname=\"$(curl -H \"Metadata-Flavor:Google\"
            \\\nhttp://metadata.google.internal/computeMetadata/v1/instance/name)\"\n
            echo \"Page served from: $vm_hostname\" | \\\ntee
            /var/www/html/index.html\nsystemctl restart apache2"
          }
        ]
     },
     "networkInterfaces":[
       {
         "network":"projects/PROJECT_ID/global/networks/lb-network",
         "subnetwork":"regions/us-west1/subnetworks/backend-subnet",
         "accessConfigs":[
           {
             "type":"ONE_TO_ONE_NAT"
           }
         ]
       }
     ],
     "disks":[
       {
         "index":0,
         "boot":true,
         "initializeParams":{
           "sourceImage":"projects/debian-cloud/global/images/family/debian-12"
         },
         "autoDelete":true
       }
     ]
  }
}

Crie um grupo de instâncias gerido em cada zona com o método instanceGroupManagers.insert, substituindo PROJECT_ID pelo ID do seu projeto.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/{zone}/instanceGroupManagers
{
  "name": "l7-ilb-backend-example",
  "zone": "projects/PROJECT_ID/zones/us-west1-a",
  "instanceTemplate": "projects/PROJECT_ID/global/instanceTemplates/l7-ilb-backend-template",
  "baseInstanceName": "l7-ilb-backend-example",
  "targetSize": 2
}

Configure o balanceador de carga

Este exemplo mostra como criar os seguintes recursos do balanceador de carga de aplicações interno regional:

  • Verificação de funcionamento de HTTP
  • Serviço de back-end com um grupo de instâncias geridas como back-end
  • Um mapa de URLs
    • Certifique-se de que faz referência a um mapa de URLs regional se for definida uma região para o proxy HTTP(S) de destino. Um mapa de URLs regional encaminha pedidos para um serviço de back-end regional com base em regras que define para o anfitrião e o caminho de um URL recebido. Um mapa de URLs regional só pode ser referenciado por uma regra de proxy de destino regional na mesma região.
  • Certificado SSL (para HTTPS)
  • Proxy de destino
  • Regra de encaminhamento

Disponibilidade do proxy

Por vezes, Google Cloud as regiões não têm capacidade de proxy suficiente para um novo balanceador de carga. Se isto acontecer, a Google Cloud consola apresenta uma mensagem de aviso de disponibilidade de proxy quando estiver a criar o equilibrador de carga. Para resolver este problema, pode fazer uma das seguintes ações:

  • Selecione uma região diferente para o balanceador de carga. Esta pode ser uma opção prática se tiver back-ends noutra região.
  • Selecione uma rede de VPC que já tenha uma sub-rede apenas de proxy atribuída.
  • Aguarde pela resolução do problema de capacidade.

Consola

Selecione o tipo de balanceador de carga

  1. Na Google Cloud consola, aceda à página Equilíbrio de carga.

    Aceda a Balanceamento de carga

  2. Clique em Criar equilibrador de carga.
  3. Em Tipo de balanceador de carga, selecione Balanceador de carga de aplicações (HTTP/HTTPS) e clique em Seguinte.
  4. Para Público ou interno, selecione Interno e clique em Seguinte.
  5. Para a Implementação em várias regiões ou numa única região, selecione Melhor para cargas de trabalho regionais e clique em Seguinte.
  6. Clique em Configurar.

Configuração básica

  1. Para o Nome do balanceador de carga, introduza l7-ilb-map.
  2. Para Região, selecione us-west1.
  3. Para Rede, selecione lb-network.

Reserve uma sub-rede só de proxy

Reserve uma sub-rede só de proxy:

  1. Clique em Reservar uma sub-rede.
  2. Em Nome, introduza proxy-only-subnet.
  3. Para o Intervalo de endereços IP, introduza 10.129.0.0/23.
  4. Clique em Adicionar.

Configure o serviço de back-end

  1. Clique em Configuração de back-end.
  2. No menu Criar ou selecionar serviços de back-end, selecione Criar um serviço de back-end.
  3. Defina o nome do serviço de back-end como l7-ilb-backend-service.
  4. Defina o Tipo de back-end como Grupo de instâncias.
  5. Na secção Novo back-end:
    1. Defina Grupo de instâncias como l7-ilb-backend-example.
    2. Defina Transferir números como 80.
    3. Defina o Modo de equilíbrio como Utilização.
    4. Clique em Concluído.
  6. Na lista Verificação do estado, clique em Criar uma verificação do estado com os seguintes parâmetros:
    1. Nome: l7-ilb-basic-check
    2. Protocolo: HTTP
    3. Porta: 80
    4. Clique em Guardar.
  7. Opcional: configure uma política de segurança do back-end predefinida. A política de segurança predefinida limita o tráfego acima de um limite configurado pelo utilizador. Para mais informações sobre as políticas de segurança predefinidas, consulte a vista geral da limitação de taxa.

    1. Para desativar a política de segurança predefinida do Cloud Armor, selecione None na lista Política de segurança de back-end do Cloud Armor.
    2. Para configurar a política de segurança predefinida do Cloud Armor, selecione Política de segurança predefinida na lista Política de segurança de back-end do Cloud Armor.
    3. No campo Nome da política, aceite o nome gerado automaticamente ou introduza um nome para a sua política de segurança.
    4. No campo Contagem de pedidos, aceite a contagem de pedidos predefinida ou introduza um número inteiro entre 1 e 10,000.
    5. No campo Intervalo, selecione um intervalo.
    6. No campo Aplicar à chave, escolha um dos seguintes valores: Tudo, Endereço IP ou Endereço IP X-Forwarded-For. Para mais informações acerca destas opções, consulte o artigo Identificar clientes para a limitação de taxa.
  8. Clique em Criar.

Configure o mapa de URLs

  1. Clique em Regras de anfitrião e caminho.

  2. Para Modo, selecione Regra de anfitrião e caminho simples.

  3. Certifique-se de que o l7-ilb-backend-service é o único serviço de back-end para qualquer anfitrião não correspondente e qualquer caminho não correspondente.

Para ver informações sobre a gestão de tráfego, consulte o artigo Configure a gestão de tráfego para balanceadores de carga de aplicações internos.

Configure a interface

Para HTTP:

  1. Clique em Configuração do front-end.
  2. Defina o nome da regra de encaminhamento como l7-ilb-forwarding-rule.
  3. Defina Protocol como HTTP.
  4. Defina Subnetwork como backend-subnet.
  5. Defina a Porta para 80.
  6. Na lista Endereço IP, selecione l7-ilb-ip-address.
  7. Clique em Concluído.

Para HTTPS:

  1. Clique em Configuração do front-end.
  2. Defina o nome da regra de encaminhamento como l7-ilb-forwarding-rule.
  3. Defina Protocol como HTTPS (includes HTTP/2).
  4. Defina Subnetwork como backend-subnet.
  5. Certifique-se de que a Porta está definida como 443 para permitir o tráfego HTTPS.
  6. Na lista Endereço IP, selecione l7-ilb-ip-address.
  7. Clique na lista Certificado.
    1. Se já tiver um recurso de certificado SSL autogerido que quer usar como certificado SSL principal, selecione-o na lista.
    2. Caso contrário, selecione Criar um novo certificado.
      1. Defina o nome do certificado como l7-ilb-cert.
      2. Nos campos adequados, carregue os seus ficheiros formatados em PEM:
        • Certificado de chave pública
        • Cadeia de certificados
        • Chave privada
      3. Clique em Criar.
  8. Para adicionar recursos de certificados além do recurso de certificado SSL principal:
    1. Clique em Adicionar certificado.
    2. Selecione um certificado na lista Certificados ou clique em Criar um novo certificado e siga as instruções.
  9. Selecione uma política SSL na lista Política SSL. Opcionalmente, para criar uma política de SSL, faça o seguinte:

    1. Na lista Política de SSL, selecione Criar uma política.
    2. Introduza um nome para a política SSL.
    3. Selecione uma versão de TLS mínima. O valor predefinido é TLS 1.0.
    4. Selecione um dos perfis pré-configurados geridos pela Google ou selecione um perfil Personalizado que lhe permite selecionar funcionalidades SSL individualmente. São apresentadas as Funcionalidades ativadas e as Funcionalidades desativadas.
    5. Clique em Guardar.

    Se não tiver criado políticas de SSL, é aplicada uma política de SSL Google Cloud predefinida Google Cloud .

  10. Clique em Concluído.

Reveja a configuração

  1. Clique em Rever e finalizar.
  2. Reveja as definições de configuração do equilibrador de carga.
  3. Opcional: clique em Código equivalente para ver o pedido da API REST que vai ser usado para criar o equilibrador de carga.
  4. Clique em Criar.

gcloud

  1. Defina a verificação de funcionamento de HTTP com o comando gcloud compute health-checks create http.

     gcloud compute health-checks create http l7-ilb-basic-check \
         --region=us-west1 \
         --use-serving-port
    
  2. Defina o serviço de back-end com o comando gcloud compute backend-services create.

    gcloud compute backend-services create l7-ilb-backend-service \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --protocol=HTTP \
        --health-checks=l7-ilb-basic-check \
        --health-checks-region=us-west1 \
        --region=us-west1
    
  3. Adicione back-ends ao serviço de back-end com o comando gcloud compute backend-services add-backend.

    gcloud compute backend-services add-backend l7-ilb-backend-service \
        --balancing-mode=UTILIZATION \
        --instance-group=l7-ilb-backend-example \
        --instance-group-zone=us-west1-a \
        --region=us-west1
    
  4. Crie o mapa de URLs com o comando gcloud compute url-maps create.

    gcloud compute url-maps create l7-ilb-map \
        --default-service=l7-ilb-backend-service \
        --region=us-west1
    
  5. Crie o proxy de destino.

    Para HTTP:

    Para um balanceador de carga HTTP interno, crie o proxy de destino com o comando gcloud compute target-http-proxies create.

    gcloud compute target-http-proxies create l7-ilb-proxy \
        --url-map=l7-ilb-map \
        --url-map-region=us-west1 \
        --region=us-west1
    

    Para HTTPS:

    Pode criar certificados do Compute Engine ou do Certificate Manager. Use qualquer um dos seguintes métodos para criar certificados através do gestor de certificados:

    Depois de criar os certificados, anexe-os diretamente ao proxy de destino.

    Atribua os caminhos de ficheiros a nomes de variáveis.

    export LB_CERT=path to PEM-formatted file
    
    export LB_PRIVATE_KEY=path to PEM-formatted file
    

    Crie um certificado SSL regional com o comando gcloud compute ssl-certificates create.

    gcloud compute ssl-certificates create l7-ilb-cert \
        --certificate=$LB_CERT \
        --private-key=$LB_PRIVATE_KEY \
        --region=us-west1
    

    Use o certificado SSL regional para criar um proxy de destino com o comando gcloud compute target-https-proxies create.

    gcloud compute target-https-proxies create l7-ilb-proxy \
        --url-map=l7-ilb-map \
        --region=us-west1 \
        --ssl-certificates=l7-ilb-cert
    
  6. Crie a regra de encaminhamento.

    Para redes personalizadas, tem de fazer referência à sub-rede na regra de encaminhamento. Tenha em atenção que esta é a sub-rede da VM e não a sub-rede do proxy.

    Para HTTP:

    Use o comando gcloud compute forwarding-rules create com as flags corretas.

    gcloud compute forwarding-rules create l7-ilb-forwarding-rule \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --network=lb-network \
        --subnet=backend-subnet \
        --address=l7-ilb-ip-address \
        --ports=80 \
        --region=us-west1 \
        --target-http-proxy=l7-ilb-proxy \
        --target-http-proxy-region=us-west1
    

    Para HTTPS:

    Crie a regra de encaminhamento com o comando gcloud compute forwarding-rules create com os sinalizadores corretos.

    gcloud compute forwarding-rules create l7-ilb-forwarding-rule \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --network=lb-network \
        --subnet=backend-subnet \
        --address=l7-ilb-ip-address \
        --ports=443 \
        --region=us-west1 \
        --target-https-proxy=l7-ilb-proxy \
        --target-https-proxy-region=us-west1
    

API

Crie a verificação de funcionamento fazendo um pedido POST ao método regionHealthChecks.insert, substituindo PROJECT_ID pelo ID do seu projeto.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/{region}/healthChecks

{
"name": "l7-ilb-basic-check",
"type": "HTTP",
"httpHealthCheck": {
  "portSpecification": "USE_SERVING_PORT"
}
}

Crie o serviço de back-end regional fazendo um pedido POST ao método regionBackendServices.insert, substituindo PROJECT_ID pelo ID do projeto.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices

{
"name": "l7-ilb-backend-service",
"backends": [
  {
    "group": "projects/PROJECT_ID/zones/us-west1-a/instanceGroups/l7-ilb-backend-example",
    "balancingMode": "UTILIZATION"
  }
],
"healthChecks": [
  "projects/PROJECT_ID/regions/us-west1/healthChecks/l7-ilb-basic-check"
],
"loadBalancingScheme": "INTERNAL_MANAGED"
}

Crie o mapa de URLs fazendo um pedido POST ao método regionUrlMaps.insert, substituindo PROJECT_ID pelo ID do seu projeto.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/urlMaps

{
"name": "l7-ilb-map",
"defaultService": "projects/PROJECT_ID/regions/us-west1/backendServices/l7-ilb-backend-service"
}

Para HTTP:

Crie o proxy HTTP de destino fazendo um pedido POST ao método regionTargetHttpProxies.insert, substituindo PROJECT_ID pelo ID do seu projeto.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/targetHttpProxy

{
"name": "l7-ilb-proxy",
"urlMap": "projects/PROJECT_ID/global/urlMaps/l7-ilb-map",
"region": "us-west1"
}

Crie a regra de encaminhamento fazendo um pedido POST ao método forwardingRules.insert, substituindo PROJECT_ID pelo ID do seu projeto.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules

{
"name": "l7-ilb-forwarding-rule",
"IPAddress": "IP_ADDRESS",
"IPProtocol": "TCP",
"portRange": "80-80",
"target": "projects/PROJECT_ID/regions/us-west1/targetHttpProxies/l7-ilb-proxy",
"loadBalancingScheme": "INTERNAL_MANAGED",
"subnetwork": "projects/PROJECT_ID/regions/us-west1/subnetworks/backend-subnet",
"network": "projects/PROJECT_ID/global/networks/lb-network",
"networkTier": "PREMIUM"
}

Para HTTPS:

Pode criar certificados do Compute Engine ou do Certificate Manager. Use qualquer um dos seguintes métodos para criar certificados através do gestor de certificados:

Depois de criar os certificados, anexe-os diretamente ao proxy de destino.

Ler os ficheiros de certificado e chave privada e, em seguida, criar o certificado SSL. O exemplo seguinte mostra como o fazer com Python.

from pathlib import Path
from pprint import pprint
from typing import Union

from googleapiclient import discovery


def create_regional_certificate(
    project_id: str,
    region: str,
    certificate_file: Union[str, Path],
    private_key_file: Union[str, Path],
    certificate_name: str,
    description: str = "Certificate created from a code sample.",
) -> dict:
    """
    Create a regional SSL self-signed certificate within your Google Cloud project.

    Args:
        project_id: project ID or project number of the Cloud project you want to use.
        region: name of the region you want to use.
        certificate_file: path to the file with the certificate you want to create in your project.
        private_key_file: path to the private key you used to sign the certificate with.
        certificate_name: name for the certificate once it's created in your project.
        description: description of the certificate.

        Returns:
        Dictionary with information about the new regional SSL self-signed certificate.
    """
    service = discovery.build("compute", "v1")

    # Read the cert into memory
    with open(certificate_file) as f:
        _temp_cert = f.read()

    # Read the private_key into memory
    with open(private_key_file) as f:
        _temp_key = f.read()

    # Now that the certificate and private key are in memory, you can create the
    # certificate resource
    ssl_certificate_body = {
        "name": certificate_name,
        "description": description,
        "certificate": _temp_cert,
        "privateKey": _temp_key,
    }
    request = service.regionSslCertificates().insert(
        project=project_id, region=region, body=ssl_certificate_body
    )
    response = request.execute()
    pprint(response)

    return response

Crie o proxy HTTPS de destino fazendo um pedido POST ao método regionTargetHttpsProxies.insert, substituindo PROJECT_ID pelo ID do seu projeto.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/regionTargetHttpsProxy

{
"name": "l7-ilb-proxy",
"urlMap": "projects/PROJECT_ID/regions/us-west1/urlMaps/l7-ilb-map",
"sslCertificates": /projects/PROJECT_ID/regions/us-west1/sslCertificates/SSL_CERT_NAME
}

Crie a regra de encaminhamento fazendo um pedido POST ao método forwardingRules.insert, substituindo PROJECT_ID pelo ID do seu projeto.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules

{
"name": "l7-ilb-forwarding-rule",
"IPAddress": "IP_ADDRESS",
"IPProtocol": "TCP",
"portRange": "80-80",
"target": "projects/PROJECT_ID/regions/us-west1/targetHttpsProxies/l7-ilb-proxy",
"loadBalancingScheme": "INTERNAL_MANAGED",
"subnetwork": "projects/PROJECT_ID/regions/us-west1/subnetworks/backend-subnet",
"network": "projects/PROJECT_ID/global/networks/lb-network",
"networkTier": "PREMIUM",
}

Teste o balanceador de carga

Para testar o balanceador de carga, crie uma VM de cliente. Em seguida, estabeleça uma sessão SSH com a VM e envie tráfego da VM para o balanceador de carga.

Crie uma instância de VM para testar a conetividade

Consola

  1. Na Google Cloud consola, aceda à página Instâncias de VM.

    Aceder às instâncias de VM

  2. Clique em Criar instância.

  3. Defina Nome como l7-ilb-client-us-west1-a.

  4. Defina a zona como us-west1-a.

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

  6. Clique em Rede e configure os seguintes campos:

    1. Para etiquetas de rede, introduza allow-ssh.
    2. Para Interfaces de rede, selecione o seguinte:
      1. Rede: lb-network
      2. Subnet: backend-subnet
  7. Clique em Criar.

gcloud

  gcloud compute instances create l7-ilb-client-us-west1-a \
      --image-family=debian-12 \
      --image-project=debian-cloud \
      --network=lb-network \
      --subnet=backend-subnet \
      --zone=us-west1-a \
      --tags=allow-ssh

Envie tráfego para o balanceador de carga

Inicie sessão na instância que acabou de criar e teste se os serviços HTTP(S) nos back-ends estão acessíveis através do endereço IP da regra de encaminhamento do Application Load Balancer interno regional e se o tráfego está a ser balanceado de carga nas instâncias de back-end.

Ligue-se através de SSH a cada instância do cliente

gcloud compute ssh l7-ilb-client-us-west1-a \
    --zone=us-west1-a

Obtenha o endereço IP do balanceador de carga

Use o gcloud compute addresses describecomando para ver o endereço IP atribuído:

gcloud compute addresses describe l7-ilb-ip-address \
    --region=us-west1

Verifique se o endereço IP está a publicar o respetivo nome do anfitrião

Substitua IP_ADDRESS pelo endereço IP do balanceador de carga.

Para testes HTTP:

curl IP_ADDRESS

Para testes HTTPS:

curl -k -s 'https://DOMAIN_NAME:443' --connect-to DOMAIN_NAME:443:IP_ADDRESS:443

Substitua DOMAIN_NAME pelo nome do domínio da sua aplicação, por exemplo, test.example.com.

A flag -k faz com que o curl ignore a validação de certificados.

Execute 100 pedidos e confirme que têm o balanceamento de carga

Substitua IP_ADDRESS pelo endereço IP do balanceador de carga.

Para HTTP:

{
  RESULTS=
  for i in {1..100}
  do
      RESULTS="$RESULTS:$(curl --silent IP_ADDRESS)"
  done
  echo "***"
  echo "*** Results of load-balancing: "
  echo "***"
  echo "$RESULTS" | tr ':' '\n' | grep -Ev "^$" | sort | uniq -c
  echo
}

Para HTTPS:

Substitua DOMAIN_NAME pelo nome do domínio da sua aplicação, por exemplo, test.example.com.

{
  RESULTS=
  for i in {1..100}
  do
      RESULTS="$RESULTS:$(curl -k -s 'https://DOMAIN_NAME:443' --connect-to DOMAIN_NAME:443:IP_ADDRESS:443)"
  done
  echo "***"
  echo "*** Results of load-balancing: "
  echo "***"
  echo "$RESULTS" | tr ':' '\n' | grep -Ev "^$" | sort | uniq -c
  echo
}

Opções de configuração adicionais

Esta secção expande o exemplo de configuração para oferecer opções de configuração alternativas e adicionais. Todas as tarefas são opcionais. Pode realizá-las por qualquer ordem.

Ative o acesso global

Pode ativar o acesso global para o Application Load Balancer interno regional e o Network Load Balancer de proxy interno regional para os tornar acessíveis a clientes em todas as regiões. Os back-ends do balanceador de carga de exemplo têm de estar localizados numa região (us-west1).

Balanceador de carga de aplicações interno regional com acesso global.
Balanceador de carga de aplicações interno regional com acesso global (clique para aumentar).

Não pode modificar uma regra de encaminhamento regional existente para ativar o acesso global. Tem de criar uma nova regra de encaminhamento para este fim e eliminar a regra de encaminhamento anterior. Além disso, depois de criar uma regra de encaminhamento com o acesso global ativado, não é possível modificá-la. Para desativar o acesso global, tem de criar uma nova regra de encaminhamento de acesso regional e eliminar a regra de encaminhamento de acesso global anterior.

Para configurar o acesso global, faça as seguintes alterações de configuração.

Consola

Crie uma nova regra de encaminhamento para o balanceador de carga:

  1. Na Google Cloud consola, aceda à página Equilíbrio de carga.

    Aceda a Balanceamento de carga

  2. Na coluna Nome, clique no equilibrador de carga.

  3. Clique em Configuração do front-end.

  4. Clique em Adicionar IP e porta do front-end.

  5. Introduza o nome e os detalhes da sub-rede para a nova regra de encaminhamento.

  6. Para Sub-rede, selecione backend-subnet.

  7. Para o Endereço IP, pode selecionar o mesmo endereço IP que uma regra de encaminhamento existente, reservar um novo endereço IP ou usar um endereço IP efémero. A partilha do mesmo endereço IP em várias regras de encaminhamento só é possível se definir a flag --purpose do endereço IP como SHARED_LOADBALANCER_VIP ao criar o endereço IP.

  8. Em Número da porta, introduza 110.

  9. Para Acesso global, selecione Ativar.

  10. Clique em Concluído.

  11. Clique em Atualizar.

gcloud

  1. Crie uma nova regra de encaminhamento para o balanceador de carga com a flag --allow-global-access.

    Para HTTP:

    gcloud compute forwarding-rules create l7-ilb-forwarding-rule-global-access \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --network=lb-network \
        --subnet=backend-subnet \
        --address=10.1.2.99 \
        --ports=80 \
        --region=us-west1 \
        --target-http-proxy=l7-ilb-proxy \
        --target-http-proxy-region=us-west1 \
        --allow-global-access
    

    Para HTTPS:

    gcloud compute forwarding-rules create l7-ilb-forwarding-rule-global-access \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --network=lb-network \
        --subnet=backend-subnet \
        --address=10.1.2.99 \
        --ports=443 \
        --region=us-west1 \
        --target-https-proxy=l7-ilb-proxy \
        --target-https-proxy-region=us-west1 \
        --allow-global-access
    
  2. Pode usar o comando gcloud compute forwarding-rules describe para determinar se uma regra de encaminhamento tem o acesso global ativado. Por exemplo:

     gcloud compute forwarding-rules describe l7-ilb-forwarding-rule-global-access \
         --region=us-west1 \
         --format="get(name,region,allowGlobalAccess)"
    

    Quando o acesso global está ativado, a palavra True aparece no resultado após o nome e a região da regra de encaminhamento.

Crie uma VM cliente para testar o acesso global

Consola

  1. Na Google Cloud consola, aceda à página Instâncias de VM.

    Aceder às instâncias de VM

  2. Clique em Criar instância.

  3. Defina Nome como europe-client-vm.

  4. Defina a zona como europe-west1-b.

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

  6. Clique em Rede e configure os seguintes campos:

    1. Para etiquetas de rede, introduza allow-ssh.
    2. Para Interfaces de rede, selecione o seguinte:
      • Rede: lb-network
      • Subnet: europe-subnet
  7. Clique em Criar.

gcloud

Crie uma VM de cliente na zona europe-west1-b.

gcloud compute instances create europe-client-vm \
    --zone=europe-west1-b \
    --image-family=debian-12 \
    --image-project=debian-cloud \
    --tags=allow-ssh \
    --subnet=europe-subnet

Ligue-se ao cliente de VM e teste a conetividade

  1. Use ssh para se ligar à instância do cliente.

    gcloud compute ssh europe-client-vm \
        --zone=europe-west1-b
    
  2. Teste as ligações ao balanceador de carga, tal como fez a partir da região vm-clientus-west1.

    curl http://10.1.2.99
    

Ative a afinidade de sessão

Estes procedimentos mostram como atualizar um serviço de back-end para o exemplo de balanceador de carga de aplicações interno regional ou balanceador de carga de aplicações interno entre regiões, de modo que o serviço de back-end use afinidade de cookies gerados, afinidade de campos de cabeçalho ou afinidade de cookies HTTP.

Quando a afinidade de cookie gerado está ativada, o equilibrador de carga emite um cookie no primeiro pedido. Para cada pedido subsequente com o mesmo cookie, o balanceador de carga direciona o pedido para a mesma instância de máquina virtual (VM) ou ponto final de back-end. Neste exemplo, o cookie tem o nome GCILB.

Quando a afinidade do campo de cabeçalho está ativada, o balanceador de carga encaminha pedidos para VMs ou pontos finais de back-end num grupo de pontos finais de rede (NEG) com base no valor do cabeçalho HTTP denominado no parâmetro --custom-request-header. A afinidade do campo de cabeçalho só é válida se a política de localidade de equilíbrio de carga for RING_HASH ou MAGLEV e o hash consistente do serviço de back-end especificar o nome do cabeçalho HTTP.

Quando a afinidade de cookies HTTP está ativada, o balanceador de carga encaminha pedidos para VMs ou pontos finais de back-end num NEG, com base num cookie HTTP denominado no parâmetro HTTP_COOKIE com o parâmetro --affinity-cookie-ttl opcional. Se o cliente não fornecer o cookie no respetivo pedido HTTP, o proxy gera o cookie e devolve-o ao cliente num cabeçalho Set-Cookie. A afinidade de cookies HTTP só é válida se a política de localidade de equilíbrio de carga for RING_HASH ou MAGLEV e o hash consistente do serviço de back-end especificar o cookie HTTP.

Consola

Para ativar ou alterar a afinidade de sessão para um serviço de back-end:

  1. Na Google Cloud consola, aceda à página Equilíbrio de carga.

    Aceda a Balanceamento de carga

  2. Clique em Back-ends.
  3. Clique em l7-ilb-backend-service (o nome do serviço de back-end que criou para este exemplo) e clique em Editar.
  4. Na página Detalhes do serviço de back-end, clique em Configuração avançada.
  5. Em Afinidade de sessão, selecione o tipo de afinidade de sessão que quer.
  6. Clique em Atualizar.

gcloud

Use os seguintes comandos da CLI gcloud para atualizar o serviço de back-end para diferentes tipos de afinidade de sessão:

    gcloud compute backend-services update l7-ilb-backend-service \
        --session-affinity=[GENERATED_COOKIE | HEADER_FIELD | HTTP_COOKIE | CLIENT_IP] \
        --region=us-west1
    

API

Para definir a afinidade da sessão, faça um pedido `PATCH` ao método backendServices/patch.

    PATCH https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-west1/regionBackendServices/l7-ilb-backend-service
    {
      "sessionAffinity": ["GENERATED_COOKIE" | "HEADER_FIELD" | "HTTP_COOKIE" | "CLIENT_IP" ]
    }
    

Restrinja os clientes que podem enviar tráfego para o balanceador de carga

Pode restringir a ligação de clientes a um VIP de regra de encaminhamento do Application Load Balancer interno configurando regras de firewall de saída nestes clientes. Defina estas regras de firewall em VMs de cliente específicas com base em contas de serviço ou etiquetas.

Não pode usar regras de firewall para restringir o tráfego de entrada a VIPs de regras de encaminhamento de balanceadores de carga de aplicações internos específicos. Geralmente, qualquer cliente na mesma rede VPC e na mesma região que o VIP da regra de encaminhamento pode enviar tráfego para o VIP da regra de encaminhamento.

Além disso, todos os pedidos para back-ends provêm de proxies que usam endereços IP no intervalo de sub-rede apenas de proxy. Não é possível criar regras de firewall que permitam ou neguem o tráfego de entrada nestes back-ends com base no VIP da regra de encaminhamento usado por um cliente.

Seguem-se alguns exemplos de como usar regras de firewall de saída para restringir o tráfego ao VIP da regra de encaminhamento do equilibrador de carga.

Consola

Para identificar as VMs de cliente, etiquete as VMs específicas que quer restringir. Estas etiquetas são usadas para associar regras de firewall às VMs de cliente etiquetadas. Em seguida, adicione a etiqueta ao campo TARGET_TAG nos passos seguintes.

Use uma única regra de firewall ou várias regras para configurar esta opção.

Regra de firewall de saída única

Pode configurar uma regra de saída da firewall para negar todo o tráfego de saída que vai das VMs de cliente etiquetadas para o VIP de um equilibrador de carga.

  1. Na Google Cloud consola, aceda à página Regras de firewall.

    Aceda às regras de firewall

  2. Clique em Criar regra de firewall para criar a regra que recusa o tráfego de saída de VMs de cliente etiquetadas para o VIP de um balanceador de carga.

    • Nome: fr-deny-access
    • Rede: lb-network
    • Prioridade: 100
    • Direção do tráfego: saída
    • Ação na correspondência: Recusar
    • Objetivos: etiquetas de destino especificadas
    • Etiquetas de segmentação: TARGET_TAG
    • Filtro de destino: Intervalos de IP
    • Intervalos de IP de destino: 10.1.2.99
    • Protocolos e portas:
      • Escolha Protocolos e portas especificados.
      • Selecione a caixa de verificação tcp e, de seguida, introduza 80 para o número da porta.
  3. Clique em Criar.

Várias regras de firewall de saída

Uma abordagem mais escalável envolve a definição de duas regras. Uma regra predefinida de baixa prioridade que restringe o acesso de todos os clientes ao VIP do equilibrador de carga. Uma segunda regra de prioridade mais elevada que permite que um subconjunto de clientes etiquetados aceda ao VIP do balanceador de carga. Apenas as VMs etiquetadas podem aceder ao VIP.

  1. Na Google Cloud consola, aceda à página Regras de firewall.

    Aceda às regras de firewall

  2. Clique em Criar regra de firewall para criar a regra de prioridade inferior para negar o acesso por predefinição:

    • Nome: fr-deny-all-access-low-priority
    • Rede: lb-network
    • Prioridade: 200
    • Direção do tráfego: saída
    • Ação na correspondência: Recusar
    • Objetivos: etiquetas de destino especificadas
    • Etiquetas de segmentação: TARGET_TAG
    • Filtro de destino: Intervalos de IP
    • Intervalos de IP de destino: 10.1.2.99
    • Protocolos e portas:
      • Escolha Protocolos e portas especificados.
      • Selecione a caixa de verificação TCP e, de seguida, introduza 80 para o número da porta.
  3. Clique em Criar.

  4. Clique em Criar regra de firewall para criar a regra de prioridade mais elevada para permitir tráfego de determinadas instâncias etiquetadas.

    • Nome: fr-allow-some-access-high-priority
    • Rede: lb-network
    • Prioridade: 100
    • Direção do tráfego: saída
    • Ação na correspondência: Permitir
    • Objetivos: etiquetas de destino especificadas
    • Etiquetas de segmentação: TARGET_TAG
    • Filtro de destino: Intervalos de IP
    • Intervalos de IP de destino: 10.1.2.99
    • Protocolos e portas:
      • Escolha Protocolos e portas especificados.
      • Selecione a caixa de verificação TCP e, de seguida, introduza 80 para o número da porta.
  5. Clique em Criar.

gcloud

Para identificar as VMs de cliente, etiquete as VMs específicas que quer restringir. Em seguida, adicione a etiqueta ao campo TARGET_TAG nestes passos.

Use uma única regra de firewall ou várias regras para configurar esta opção.

Regra de firewall de saída única

Pode configurar uma regra de saída da firewall para negar todo o tráfego de saída que vai das VMs de cliente etiquetadas para o VIP de um equilibrador de carga.

gcloud compute firewall-rules create fr-deny-access \
    --network=lb-network \
    --action=deny \
    --direction=egress \
    --rules=tcp \
    --priority=100 \
    --destination-ranges=10.1.2.99 \
    --target-tags=TARGET_TAG

Várias regras de firewall de saída

Uma abordagem mais escalável envolve a definição de duas regras: uma regra predefinida de baixa prioridade que restringe o acesso de todos os clientes ao VIP do balanceador de carga e uma segunda regra de prioridade mais elevada que permite que um subconjunto de clientes etiquetados aceda ao VIP do balanceador de carga. Apenas as VMs etiquetadas podem aceder ao VIP.

  1. Crie a regra de prioridade inferior:

    gcloud compute firewall-rules create fr-deny-all-access-low-priority \
        --network=lb-network \
        --action=deny \
        --direction=egress \
        --rules=tcp \
        --priority=200 \
        --destination-ranges=10.1.2.99
    
  2. Crie a regra de prioridade mais elevada:

    gcloud compute firewall-rules create fr-allow-some-access-high-priority \
        --network=lb-network \
        --action=allow \
        --direction=egress \
        --rules=tcp \
        --priority=100 \
        --destination-ranges=10.1.2.99 \
        --target-tags=TARGET_TAG
    

Para usar contas de serviço em vez de etiquetas para controlar o acesso, use a opção --target-service-accounts em vez da flag --target-tags ao criar regras de firewall.

Dimensione o acesso restrito a back-ends do balanceador de carga de aplicações internos com base em sub-redes

A manutenção de regras de firewall separadas ou a adição de novos endereços IP com balanceamento de carga às regras existentes, conforme descrito na secção anterior, torna-se inconveniente à medida que o número de regras de encaminhamento aumenta. Uma forma de evitar esta situação é atribuir endereços IP de regras de encaminhamento a partir de uma sub-rede reservada. Em seguida, o tráfego de instâncias etiquetadas ou contas de serviço pode ser permitido ou bloqueado através da sub-rede reservada como o intervalo de destino para regras de firewall. Isto permite-lhe controlar eficazmente o acesso a um grupo de VIPs de regras de encaminhamento sem ter de manter regras de saída da firewall por VIP.

Seguem-se os passos gerais para configurar esta opção, partindo do princípio de que vai criar todos os outros recursos do balanceador de carga necessários separadamente.

gcloud

  1. Crie uma sub-rede regional para usar na atribuição de endereços IP com balanceamento de carga para regras de encaminhamento:

    gcloud compute networks subnets create l7-ilb-restricted-subnet \
        --network=lb-network \
        --region=us-west1 \
        --range=10.127.0.0/24
    
  2. Crie uma regra de encaminhamento que obtenha um endereço da sub-rede. O exemplo seguinte usa o endereço 10.127.0.1 da sub-rede criada no passo anterior.

    gcloud compute forwarding-rules create l7-ilb-forwarding-rule-restricted \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --network=lb-network \
        --subnet=l7-ilb-restricted-subnet \
        --address=10.127.0.1 \
        --ports=80 \
        --region=us-west1 \
        --target-http-proxy=l7-ilb-proxy \
        --target-http-proxy-region=us-west1
    

  3. Crie uma regra de firewall para restringir o tráfego destinado aos endereços IP no intervalo da sub-rede da regra de encaminhamento (l7-ilb-restricted-subnet):

    gcloud compute firewall-rules create restrict-traffic-to-subnet \
        --network=lb-network \
        --action=deny \
        --direction=egress \
        --rules=tcp:80 \
        --priority=100 \
        --destination-ranges=10.127.0.0/24 \
        --target-tags=TARGET_TAG
    

Configure a restrição de subconjuntos do back-end

A restrição de subconjuntos no back-end melhora o desempenho e a escalabilidade ao atribuir um subconjunto de back-ends a cada uma das instâncias de proxy. Quando ativada para um serviço de back-end, a subdivisão do back-end ajusta o número de back-ends usados por cada instância de proxy da seguinte forma:

  • À medida que o número de instâncias de proxy que participam no equilibrador de carga aumenta, o tamanho do subconjunto diminui.

  • Quando o número total de back-ends numa rede excede a capacidade de uma instância de proxy única, o tamanho do subconjunto é reduzido automaticamente para cada serviço que tenha a subdivisão de back-ends ativada.

Este exemplo mostra como criar recursos do balanceador de carga de aplicações interno regional e ativar a divisão em subconjuntos de back-ends:

  1. Use a configuração de exemplo para criar um serviço de back-end regional l7-ilb-backend-service.
  2. Ative a restrição de subconjuntos de back-end especificando a flag --subsetting-policy como CONSISTENT_HASH_SUBSETTING. Defina o esquema de balanceamento de carga para INTERNAL_MANAGED.

    gcloud

    Use o seguinte comando gcloud para atualizar l7-ilb-backend-service com a restrição de subconjuntos no back-end:

    gcloud beta compute backend-services update l7-ilb-backend-service \
        --region=us-west1 \
        --subsetting-policy=CONSISTENT_HASH_SUBSETTING
    

    API

    Faça um pedido PATCH ao método regionBackendServices/patch.

    PATCH https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/us-west1/backendServices/l7-ilb-backend-service
    
    {
     "subsetting":
    {
     "policy": CONSISTENT_HASH_SUBSETTING
    }
    }
    

Também pode refinar o equilíbrio de carga de back-end definindo a política localityLbPolicy. Para mais informações, consulte as políticas de tráfego.

Use o mesmo endereço IP entre várias regras de encaminhamento interno

Para que várias regras de encaminhamento interno partilhem o mesmo endereço IP interno, tem de reservar o endereço IP e definir a respetiva flag --purpose como SHARED_LOADBALANCER_VIP.

gcloud

gcloud compute addresses create SHARED_IP_ADDRESS_NAME \
    --region=REGION \
    --subnet=SUBNET_NAME \
    --purpose=SHARED_LOADBALANCER_VIP
Se precisar de redirecionar o tráfego HTTP para HTTPS, pode criar duas regras de encaminhamento que usem um endereço IP comum. Para mais informações, consulte o artigo Configure o redirecionamento de HTTP para HTTPS para balanceadores de carga de aplicações internos.

Atualize o tempo limite de manutenção ativa de HTTP do cliente

O balanceador de carga criado nos passos anteriores foi configurado com um valor predefinido para o tempo limite de manutenção ativa do HTTP do cliente.

Para atualizar o limite de tempo limite de manutenção ativa HTTP do cliente, siga as instruções abaixo.

Consola

  1. Na Google Cloud consola, aceda à página Equilíbrio de carga.

    Aceda a Balanceamento de carga.

  2. Clique no nome do equilibrador de carga que quer modificar.
  3. Clique em Editar.
  4. Clique em Configuração do front-end.
  5. Expanda Funcionalidades avançadas. Para Limite de tempo de manutenção ativa de HTTP, introduza um valor de limite de tempo.
  6. Clique em Atualizar.
  7. Para rever as alterações, clique em Rever e finalizar e, de seguida, clique em Atualizar.

gcloud

Para um balanceador de carga HTTP, atualize o proxy HTTP de destino através do comando gcloud compute target-http-proxies update.

      gcloud compute target-http-proxies update TARGET_HTTP_PROXY_NAME \
          --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \
          --region=REGION
      

Para um balanceador de carga HTTPS, atualize o proxy HTTPS de destino com o comando gcloud compute target-https-proxies update.

      gcloud compute target-https-proxies update TARGET_HTTP_PROXY_NAME \
          --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \
          --region REGION
      

Substitua o seguinte:

  • TARGET_HTTP_PROXY_NAME: o nome do proxy HTTP de destino.
  • TARGET_HTTPS_PROXY_NAME: o nome do proxy HTTPS de destino.
  • HTTP_KEEP_ALIVE_TIMEOUT_SEC: o valor de tempo limite de manutenção ativa de HTTP de 5 para 600 segundos.

O que se segue?