Este guia usa um exemplo para ensinar os fundamentos dos Google Cloud balanceadores de carga de rede de encaminhamento interno. Antes de seguir este guia, familiarize-se com o seguinte:
- Conceitos do balanceador de carga de rede de encaminhamento interno
- Como funcionam os equilibradores de carga de passagem internos da rede
- Vista geral das regras de firewall
- Conceitos de verificação de saúde
Para seguir orientações passo a passo para esta tarefa diretamente na Google Cloud consola, clique em Orientar-me:
Autorizações
Para seguir este guia, tem de criar instâncias e modificar uma rede num projeto. Tem de ser proprietário ou editor do projeto, ou ter todas as seguintes funções do IAM do Compute Engine:
Tarefa | Função necessária |
---|---|
Crie redes, sub-redes e componentes do balanceador de carga | Administrador de rede de Calcular ( roles/compute.networkAdmin )
|
Adicione e remova regras de firewall | Administrador de segurança do Compute ( roles/compute.securityAdmin )
|
Crie instâncias | Administrador de instância de computação ( roles/compute.instanceAdmin )
|
Para mais informações, consulte os seguintes guias:
Configure o balanceador de carga com sub-redes e back-ends apenas IPv4
Este guia mostra como configurar e testar um Network Load Balancer de encaminhamento interno. Os passos nesta secção descrevem como configurar o seguinte:
- Um exemplo que usa uma rede VPC no modo personalizado denominada
lb-network
. - Uma sub-rede de pilha única (
stack-type
definida comoIPv4
), que é necessária para o tráfego IPv4. Quando cria uma sub-rede de pilha única numa rede de VPC de modo personalizado, escolhe um intervalo de sub-redes IPv4 para a sub-rede. - Regras de firewall que permitem ligações de entrada a instâncias de máquinas virtuais (VMs) de back-end.
- O grupo de instâncias de back-end, que está localizado na seguinte região
e sub-rede para este exemplo:
- Região:
us-west1
- Sub-rede:
lb-subnet
, com o intervalo de endereços IPv4 principal10.1.2.0/24
.
- Região:
- Quatro VMs de back-end: duas VMs num grupo de instâncias não gerido na zona
us-west1-a
e duas VMs num grupo de instâncias não gerido na zonaus-west1-c
. Para demonstrar o acesso global, este exemplo 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 principal10.3.4.0/24
- Região:
- Uma VM cliente para testar as ligações.
- Os seguintes componentes do balanceador de carga de rede de encaminhamento interno:
- Uma verificação de funcionamento do serviço de back-end.
- Um serviço de back-end interno na região
us-west1
para gerir a distribuição de ligações aos dois grupos de instâncias zonais. - Uma regra de encaminhamento interno e um endereço IP interno para o front-end do balanceador de carga.
A arquitetura para este exemplo tem o seguinte aspeto:
Configure uma rede, uma região e uma sub-rede
Para criar a rede e a sub-rede de exemplo, siga estes passos.
Consola
Na Google Cloud consola, aceda à página Redes VPC.
Clique em Criar rede de VPC.
Em Nome, introduza
lb-network
.Na secção Sub-redes, faça o seguinte:
- Defina o Subnet creation mode (Modo de criação de sub-rede) como Custom (Personalizado).
- Na secção Nova sub-rede, introduza as seguintes informações:
- Nome:
lb-subnet
- Região:
us-west1
- Tipo de pilha de IP: IPv4 (pilha única)
- Intervalo de endereços IP:
10.1.2.0/24
- Nome:
- Clique em Concluído.
- Clique em Adicionar sub-rede e introduza as seguintes informações:
- Nome:
europe-subnet
- Região:
europe-west1
- Tipo de pilha de IP: IPv4 (pilha única)
- Intervalo de endereços IP:
10.3.4.0/24
- Nome:
- Clique em Concluído.
Clique em Criar.
gcloud
Crie a rede VPC personalizada:
gcloud compute networks create lb-network --subnet-mode=custom
Na rede
lb-network
, crie uma sub-rede para os back-ends na regiãous-west1
:gcloud compute networks subnets create lb-subnet \ --network=lb-network \ --range=10.1.2.0/24 \ --region=us-west1
Na rede
lb-network
, crie outra sub-rede para testar o acesso global na regiãoeurope-west1
: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
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks { "routingConfig": { "routingMode": "REGIONAL" }, "name": "lb-network", "autoCreateSubnetworks": false }
Faça dois pedidos POST
ao
subnetworks.insert
método.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks { "name": "lb-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "ipCidrRange": "10.1.2.0/24", "privateIpGoogleAccess": false }
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/europe-west1/subnetworks { "name": "europe-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "ipCidrRange": "10.3.4.0/24", "privateIpGoogleAccess": false }
Configure regras de firewall
Este exemplo usa as seguintes regras de firewall:
fw-allow-lb-access
: uma regra de entrada, aplicável a todos os destinos na rede VPC, que permite o tráfego de origens nos intervalos10.1.2.0/24
e10.3.4.0/24
. Esta regra permite o tráfego de entrada de qualquer cliente localizado numa das duas sub-redes. Posteriormente, permite-lhe configurar e testar o acesso global.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 vai iniciar sessões SSH. Este exemplo usa a etiqueta de destinoallow-ssh
para identificar as VMs às quais deve ser aplicada.fw-allow-health-check
: uma regra de entrada, aplicável às instâncias com balanceamento de carga, que permite o tráfego dos sistemas de verificação de estado (130.211.0.0/22
e35.191.0.0/16
). Este exemplo usa a etiqueta de destinoallow-health-check
para identificar as instâncias às quais deve aplicar-se. Google Cloud
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.
Consola
Na Google Cloud consola, aceda à página Políticas de firewall.
Para permitir o tráfego de sub-rede, clique em Criar regra de firewall e introduza as seguintes informações:
- Nome:
fw-allow-lb-access
- Rede:
lb-network
- Prioridade:
1000
- Direção do trânsito: entrada
- Ação na correspondência: permitir
- Segmenta: todas as instâncias na rede
- Filtro de origem: intervalos IPv4
- Intervalos IPv4 de origem:
10.1.2.0/24
- Protocolos e portas: Permitir tudo
- Nome:
Clique em Criar.
Para permitir ligações SSH recebidas, clique novamente em Criar regra de firewall e introduza as seguintes informações:
- Nome:
fw-allow-ssh
- Rede:
lb-network
- Prioridade:
1000
- Direção do trânsito: 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: selecione Protocolos e portas especificados,
selecione a caixa de verificação TCP e, de seguida, introduza
22
em Portas.
- Nome:
Clique em Criar.
Para permitir Google Cloud verificações de funcionamento, clique em Criar regra de firewall pela terceira vez e introduza as seguintes informações:
- Nome:
fw-allow-health-check
- Rede:
lb-network
- Prioridade:
1000
- Direção do trânsito: entrada
- Ação na correspondência: permitir
- Objetivos: etiquetas de destino especificadas
- Etiquetas de segmentação:
allow-health-check
- Filtro de origem: intervalos IPv4
- Intervalos de IPv4 de origem:
130.211.0.0/22
e35.191.0.0/16
- Protocolos e portas: Permitir tudo
- Nome:
Clique em Criar.
gcloud
Crie a regra de firewall
fw-allow-lb-access
para permitir a comunicação a partir de dentro da sub-rede:gcloud compute firewall-rules create fw-allow-lb-access \ --network=lb-network \ --action=allow \ --direction=ingress \ --source-ranges=10.1.2.0/24,10.3.4.0/24 \ --rules=tcp,udp,icmp
Crie a regra de firewall
fw-allow-ssh
para permitir a conetividade SSH a VMs com a etiqueta de redeallow-ssh
. Quando omitesource-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
Crie a regra
fw-allow-health-check
para permitir Google Cloud verificações de funcionamento.gcloud compute firewall-rules create fw-allow-health-check \ --network=lb-network \ --action=allow \ --direction=ingress \ --target-tags=allow-health-check \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --rules=tcp,udp,icmp
API
Crie a regra de firewall fw-allow-lb-access
fazendo um pedido POST
ao método firewalls.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-lb-access", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "priority": 1000, "sourceRanges": [ "10.1.2.0/24", "10.3.4.0/24" ], "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
Crie a regra de firewall fw-allow-ssh
fazendo um pedido POST
ao método firewalls.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-ssh", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "priority": 1000, "sourceRanges": [ "0.0.0.0/0" ], "targetTags": [ "allow-ssh" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
Crie a regra de firewall fw-allow-health-check
fazendo um pedido POST
ao método firewalls.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-health-check", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "priority": 1000, "sourceRanges": [ "130.211.0.0/22", "35.191.0.0/16" ], "targetTags": [ "allow-health-check" ], "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
Crie VMs de back-end e grupos de instâncias
Este exemplo usa dois grupos de instâncias não geridos, cada um com duas VMs de back-end (servidor). Para demonstrar a natureza regional dos equilibradores de carga de rede de encaminhamento interno,
os dois grupos de instâncias são colocados em zonas separadas, us-west1-a
e us-west1-c
.
- O grupo de instâncias
ig-a
contém estas duas VMs:vm-a1
vm-a2
- O grupo de instâncias
ig-c
contém estas duas VMs:vm-c1
vm-c2
O tráfego para todas as quatro VMs de back-end é equilibrado por carga.
Para suportar este exemplo e as opções de configuração adicionais, cada uma das quatro VMs executa um servidor Web Apache que escuta nas seguintes portas TCP: 80, 8008, 8080, 8088, 443 e 8443.
A cada VM é atribuído um endereço IP interno no intervalo lb-subnet
e um endereço IP externo (público) efémero. Pode remover os endereços IP externos
mais tarde.
Não são necessários endereços IP externos para as VMs de back-end. No entanto, são úteis para este exemplo, porque permitem que as VMs de back-end transfiram o Apache da Internet e podem estabelecer ligação através de SSH.
Por predefinição, o Apache está configurado para ser associado a qualquer endereço IP. Os balanceadores de carga de rede de encaminhamento interno fornecem pacotes preservando o IP de destino. Certifique-se de que o software do servidor executado nas VMs de back-end está a ouvir o endereço IP da regra de encaminhamento interno do balanceador de carga. Se configurar várias regras de encaminhamento interno, certifique-se de que o seu software escuta o endereço IP interno associado a cada uma delas. O endereço IP de destino de um pacote enviado para uma VM de back-end por um balanceador de carga de rede de encaminhamento direto interno é o endereço IP interno da regra de encaminhamento.
Para simplificar as instruções, estas VMs de back-end executam o Debian GNU/Linux 12.
Consola
Crie VMs de back-end
Na Google Cloud consola, aceda à página Instâncias de VM.
Repita os passos 3 a 8 para cada VM, usando as seguintes combinações de nome e zona.
- Nome:
vm-a1
, zona:us-west1-a
- Nome:
vm-a2
, zona:us-west1-a
- Nome:
vm-c1
, zona:us-west1-c
- Nome:
vm-c2
, zona:us-west1-c
- Nome:
Clique em Criar instância.
Defina o Nome conforme indicado no passo 2.
Para Região, selecione
us-west1
e escolha uma Zona, conforme indicado no passo 2.Na secção Disco de arranque, certifique-se de que a opção Debian GNU/Linux 12 (bookworm) está selecionada para as opções do disco de arranque. Se necessário, clique em Alterar para alterar a imagem.
Clique em Opções avançadas.
Clique em Rede e configure os seguintes campos:
- Para Etiquetas de rede, introduza
allow-ssh
eallow-health-check
. - Para Interfaces de rede, selecione o seguinte:
- Rede:
lb-network
- Subnet:
lb-subnet
- Tipo de pilha de IP: IPv4 (pilha única)
- Endereço IPv4 interno principal: efémero (automático)
- Endereço IPv4 externo: efémero
- Rede:
- Para Etiquetas de rede, introduza
Clique em Gestão e, de seguida, no campo Script de arranque, introduza o seguinte script. O conteúdo do script é idêntico para todas as quatro VMs.
#! /bin/bash if [ -f /etc/startup_script_completed ]; then exit 0 fi apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl file_ports="/etc/apache2/ports.conf" file_http_site="/etc/apache2/sites-available/000-default.conf" file_https_site="/etc/apache2/sites-available/default-ssl.conf" http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088" http_vh_prts="*:80 *:8008 *:8080 *:8088" https_listen_prts="Listen 443\nListen 8443" https_vh_prts="*:443 *:8443" 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 prt_conf="$(cat "$file_ports")" prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")" prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")" echo "$prt_conf" | tee "$file_ports" http_site_conf="$(cat "$file_http_site")" http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")" echo "$http_site_conf_2" | tee "$file_http_site" https_site_conf="$(cat "$file_https_site")" https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")" echo "$https_site_conf_2" | tee "$file_https_site" systemctl restart apache2 touch /etc/startup_script_completed
Clique em Criar.
Crie grupos de instâncias
Na Google Cloud consola, aceda à página Grupos de instâncias.
Repita os passos seguintes para criar dois grupos de instâncias não geridos, cada um com duas VMs, usando estas combinações.
- Nome do grupo de instâncias:
ig-a
, zona:us-west1-a
, VMs:vm-a1
evm-a2
- Nome do grupo de instâncias:
ig-c
, zona:us-west1-c
, VMs:vm-c1
evm-c2
- Nome do grupo de instâncias:
Clique em Criar grupo de instâncias.
Clique em Novo grupo de instâncias não gerido.
Defina o Nome conforme indicado no passo 2.
Na secção Localização, selecione
us-west1
para Região e, de seguida, escolha uma Zona, conforme indicado no passo 2.Para Rede, selecione
lb-network
.Para Sub-rede, selecione
lb-subnet
.Na secção Instâncias de VM, adicione as VMs conforme indicado no passo 2.
Clique em Criar.
gcloud
Crie as quatro VMs executando o seguinte comando quatro vezes, usando estas quatro combinações para
[VM-NAME]
e[ZONE]
. O conteúdo do script é idêntico para todas as quatro VMs.VM-NAME
:vm-a1
,ZONE
:us-west1-a
VM-NAME
:vm-a2
,ZONE
:us-west1-a
VM-NAME
:vm-c1
,ZONE
:us-west1-c
VM-NAME
:vm-c2
,ZONE
:us-west1-c
gcloud compute instances create VM-NAME \ --zone=ZONE \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh,allow-health-check \ --subnet=lb-subnet \ --metadata=startup-script='#! /bin/bash if [ -f /etc/startup_script_completed ]; then exit 0 fi apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl file_ports="/etc/apache2/ports.conf" file_http_site="/etc/apache2/sites-available/000-default.conf" file_https_site="/etc/apache2/sites-available/default-ssl.conf" http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088" http_vh_prts="*:80 *:8008 *:8080 *:8088" https_listen_prts="Listen 443\nListen 8443" https_vh_prts="*:443 *:8443" 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 prt_conf="$(cat "$file_ports")" prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")" prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")" echo "$prt_conf" | tee "$file_ports" http_site_conf="$(cat "$file_http_site")" http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")" echo "$http_site_conf_2" | tee "$file_http_site" https_site_conf="$(cat "$file_https_site")" https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")" echo "$https_site_conf_2" | tee "$file_https_site" systemctl restart apache2 touch /etc/startup_script_completed'
Crie os dois grupos de instâncias não geridos em cada zona:
gcloud compute instance-groups unmanaged create ig-a \ --zone=us-west1-a gcloud compute instance-groups unmanaged create ig-c \ --zone=us-west1-c
Adicione as VMs aos grupos de instâncias adequados:
gcloud compute instance-groups unmanaged add-instances ig-a \ --zone=us-west1-a \ --instances=vm-a1,vm-a2 gcloud compute instance-groups unmanaged add-instances ig-c \ --zone=us-west1-c \ --instances=vm-c1,vm-c2
API
Para as quatro VMs, use os seguintes nomes e zonas de VMs:
VM-NAME
:vm-a1
,ZONE
:us-west1-a
VM-NAME
:vm-a2
,ZONE
:us-west1-a
VM-NAME
:vm-c1
,ZONE
:us-west1-c
VM-NAME
:vm-c2
,ZONE
:us-west1-c
Pode obter o DEBIAN_IMAGE_NAME
atual executando o seguinte comando gcloud
:
gcloud compute images list \ --filter="family=debian-12"
Crie quatro VMs de back-end fazendo quatro pedidos POST
ao método instances.insert
:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "name": "VM-NAME", "tags": { "items": [ "allow-health-check", "allow-ssh" ] }, "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/[ZONE]/machineTypes/e2-standard-2", "canIpForward": false, "networkInterfaces": [ { "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "accessConfigs": [ { "type": "ONE_TO_ONE_NAT", "name": "external-nat", "networkTier": "PREMIUM" } ] } ], "disks": [ { "type": "PERSISTENT", "boot": true, "mode": "READ_WRITE", "autoDelete": true, "deviceName": "VM-NAME", "initializeParams": { "sourceImage": "projects/debian-cloud/global/images/debian-image-name", "diskType": "projects/PROJECT_ID/zones/zone/diskTypes/pd-standard", "diskSizeGb": "10" } } ], "metadata": { "items": [ { "key": "startup-script", "value": "#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\nfile_ports=\"/etc/apache2/ports.conf\"\nfile_http_site=\"/etc/apache2/sites-available/000-default.conf\"\nfile_https_site=\"/etc/apache2/sites-available/default-ssl.conf\"\nhttp_listen_prts=\"Listen 80\\nListen 8008\\nListen 8080\\nListen 8088\"\nhttp_vh_prts=\"*:80 *:8008 *:8080 *:8088\"\nhttps_listen_prts=\"Listen 443\\nListen 8443\"\nhttps_vh_prts=\"*:443 *:8443\"\nvm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\nhttp://metadata.google.internal/computeMetadata/v1/instance/name)\"\necho \"Page served from: $vm_hostname\" | \\\ntee /var/www/html/index.html\nprt_conf=\"$(cat \"$file_ports\")\"\nprt_conf_2=\"$(echo \"$prt_conf\" | sed \"s|Listen 80|${http_listen_prts}|\")\"\nprt_conf=\"$(echo \"$prt_conf_2\" | sed \"s|Listen 443|${https_listen_prts}|\")\"\necho \"$prt_conf\" | tee \"$file_ports\"\nhttp_site_conf=\"$(cat \"$file_http_site\")\"\nhttp_site_conf_2=\"$(echo \"$http_site_conf\" | sed \"s|*:80|${http_vh_prts}|\")\"\necho \"$http_site_conf_2\" | tee \"$file_http_site\"\nhttps_site_conf=\"$(cat \"$file_https_site\")\"\nhttps_site_conf_2=\"$(echo \"$https_site_conf\" | sed \"s|_default_:443|${https_vh_prts}|\")\"\necho \"$https_site_conf_2\" | tee \"$file_https_site\"\nsystemctl restart apache2" } ] }, "scheduling": { "preemptible": false }, "deletionProtection": false }
Crie dois grupos de instâncias fazendo um pedido POST
ao método
instanceGroups.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups { "name": "ig-a", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet" }
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups { "name": "ig-c", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet" }
Adicione instâncias a cada grupo de instâncias fazendo um pedido POST
ao método instanceGroups.addInstances
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a/addInstances { "instances": [ { "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a1", "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a2" } ] }
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups/ig-c/addInstances { "instances": [ { "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instances/vm-c1", "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instances/vm-c2" } ] }
Configure os componentes do balanceador de carga
Estes passos configuram todos os componentes do balanceador de carga de rede de encaminhamento interno, começando pela verificação de estado e pelo serviço de back-end e, em seguida, pelos componentes de front-end:
Verificação de saúde. Neste exemplo, usa uma verificação de funcionamento de HTTP que procura um código de estado
200 OK
HTTP. Para mais informações, consulte a secção Verificação de estado.Serviço de back-end. Uma vez que tem de transmitir tráfego HTTP através do balanceador de carga interno, tem de usar o protocolo TCP e não o UDP.
Regra de encaminhamento. Este exemplo cria uma única regra de encaminhamento interno.
Endereço IP interno. Neste exemplo, especifica um endereço IP interno,
10.1.2.99
, quando cria a regra de encaminhamento.
Consola
Inicie a configuração
Na Google Cloud consola, aceda à página Equilíbrio de carga.
- Clique em Criar equilibrador de carga.
- Para Tipo de balanceador de carga, selecione Balanceador de carga de rede (TCP/UDP/SSL) e clique em Seguinte.
- Para Proxy ou passagem, selecione Passagem do balanceador de carga e clique em Seguinte.
- Para Público ou interno, selecione Interno e clique em Seguinte.
- Clique em Configurar.
Configuração básica
Na página Criar balanceador de carga de rede de encaminhamento interno, introduza as seguintes informações:
- Nome do balanceador de carga:
be-ilb
- Região:
us-west1
- Rede:
lb-network
Configure os back-ends
- Clique em Configuração de back-end.
Na lista Verificação de funcionamento, clique em Criar uma verificação de funcionamento e introduza as seguintes informações.
- Nome:
hc-http-80
- Protocolo: HTTP
- Porta:
80
- Protocolo de proxy: Nenhum
- Pedido:
/
Tenha em atenção que, quando usa a consola para criar o balanceador de carga, a verificação de funcionamento é global. Google Cloud Se quiser criar uma verificação de funcionamento regional, use
gcloud
ou a API.- Nome:
Clique em Criar.
Para processar apenas tráfego IPv4, na secção Novo back-end, para Tipo de pilha de IP, selecione a opção IPv4 (pilha única).
Na lista Grupo de instâncias, selecione o grupo de instâncias
ig-c
e clique em Concluído.Clique em Adicionar um back-end e repita o passo para adicionar o grupo de instâncias
ig-a
.Verifique se existe uma marca de verificação azul junto a Configuração de back-end antes de continuar.
Configure a interface
- Clique em Configuração do front-end.
- Na secção Novo endereço IP e porta de front-end, faça o seguinte:
- Em Nome, introduza
fr-ilb
. - Para Sub-rede, selecione
lb-subnet
. - Na secção Finalidade do IP interno, na lista Endereço IP,
selecione Criar endereço IP, introduza as seguintes informações e
clique em Reservar.
- Nome:
ip-ilb
- Versão do IP: IPv4
- Endereço IP estático: Permitir-me escolher
- Endereço IP personalizado:
10.1.2.99
- Nome:
- Em Portas, selecione Múltiplas e, em seguida, em Números de portas, introduza
80
,8008
,8080
e8088
. - Antes de continuar, verifique se existe uma marca de verificação azul junto a Configuração do frontend.
- Em Nome, introduza
Reveja a configuração
- Clique em Rever e finalizar.
- Reveja as definições de configuração do equilibrador de carga.
- Opcional: clique em Código equivalente para ver o pedido da API REST que vai ser usado para criar o equilibrador de carga.
- Clique em Criar.
gcloud
Crie uma nova verificação de funcionamento de HTTP regional para testar a conetividade HTTP às VMs na porta 80.
gcloud compute health-checks create http hc-http-80 \ --region=us-west1 \ --port=80
Crie o serviço de back-end para o tráfego HTTP:
gcloud compute backend-services create be-ilb \ --load-balancing-scheme=internal \ --protocol=tcp \ --region=us-west1 \ --health-checks=hc-http-80 \ --health-checks-region=us-west1
Adicione os dois grupos de instâncias ao serviço de back-end:
gcloud compute backend-services add-backend be-ilb \ --region=us-west1 \ --instance-group=ig-a \ --instance-group-zone=us-west1-a gcloud compute backend-services add-backend be-ilb \ --region=us-west1 \ --instance-group=ig-c \ --instance-group-zone=us-west1-c
Crie uma regra de encaminhamento para o serviço de back-end. Quando criar a regra de encaminhamento, especifique
10.1.2.99
para o endereço IP interno na sub-rede.gcloud compute forwarding-rules create fr-ilb \ --region=us-west1 \ --load-balancing-scheme=internal \ --network=lb-network \ --subnet=lb-subnet \ --address=10.1.2.99 \ --ip-protocol=TCP \ --ports=80,8008,8080,8088 \ --backend-service=be-ilb \ --backend-service-region=us-west1
API
Crie a verificação de funcionamento fazendo um pedido POST
ao método regionHealthChecks.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/regionHealthChecks { "name": "hc-http-80", "type": "HTTP", "httpHealthCheck": { "port": 80 } }
Crie o serviço de back-end regional fazendo um pedido POST
ao
regionBackendServices.insert
método.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices { "name": "be-ilb", "backends": [ { "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a", "balancingMode": "CONNECTION" }, { "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups/ig-c", "balancingMode": "CONNECTION" } ], "healthChecks": [ "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/healthChecks/hc-http-80" ], "loadBalancingScheme": "INTERNAL", "connectionDraining": { "drainingTimeoutSec": 0 } }
Crie a regra de encaminhamento fazendo um pedido POST
ao
método forwardingRules.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules { "name": "fr-ilb", "IPAddress": "10.1.2.99", "IPProtocol": "TCP", "ports": [ "80", "8008", "8080", "8088" ], "loadBalancingScheme": "INTERNAL", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb", "networkTier": "PREMIUM" }
Teste o balanceador de carga
Estes testes mostram como validar a configuração do equilibrador de carga e saber mais sobre o respetivo comportamento esperado.
Crie uma VM de cliente
Este exemplo cria uma VM de cliente (vm-client
) na mesma região que as VMs de back-end (servidor). O cliente é usado para validar a configuração do equilibrador de carga
e demonstrar o comportamento esperado, conforme descrito na secção de
testes.
Consola
Na Google Cloud consola, aceda à página Instâncias de VM.
Clique em Criar instância.
Em Nome, introduza
vm-client
.Para Região, selecione
us-west1
.Para Zona, selecione
us-west1-a
.Clique em Opções avançadas.
Clique em Rede e configure os seguintes campos:
- Para etiquetas de rede, introduza
allow-ssh
. - Para Interfaces de rede, selecione o seguinte:
- Rede:
lb-network
- Subnet:
lb-subnet
- Rede:
- Para etiquetas de rede, introduza
Clique em Criar.
gcloud
A VM do cliente pode estar em qualquer zona na mesma região que o balanceador de carga e pode usar qualquer sub-rede nessa região. Neste exemplo, o cliente está na zona us-west1-a
e usa a mesma sub-rede que as VMs de back-end.
gcloud compute instances create vm-client \ --zone=us-west1-a \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh \ --subnet=lb-subnet
API
Faça um pedido POST
ao
método instances.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances { "name": "vm-client", "tags": { "items": [ "allow-ssh" ] }, "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/machineTypes/e2-standard-2", "canIpForward": false, "networkInterfaces": [ { "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "accessConfigs": [ { "type": "ONE_TO_ONE_NAT", "name": "external-nat", "networkTier": "PREMIUM" } ] } ], "disks": [ { "type": "PERSISTENT", "boot": true, "mode": "READ_WRITE", "autoDelete": true, "deviceName": "vm-client", "initializeParams": { "sourceImage": "projects/debian-cloud/global/images/debian-image-name", "diskType": "projects/PROJECT_ID/zones/us-west1-a/diskTypes/pd-standard", "diskSizeGb": "10" } } ], "scheduling": { "preemptible": false }, "deletionProtection": false }
Teste a ligação a partir da VM do cliente
Este teste contacta o balanceador de carga a partir de uma VM cliente separada, ou seja, não a partir de uma VM de back-end do balanceador de carga. O comportamento esperado é que o tráfego seja distribuído entre as quatro VMs de back-end porque não foi configurada nenhuma afinidade de sessão.
Ligue-se à instância de VM do cliente.
gcloud compute ssh vm-client --zone=us-west1-a
Faça um pedido Web ao equilibrador de carga através de
curl
para contactar o respetivo endereço IP. Repita o pedido para poder ver que as respostas provêm de VMs de back-end diferentes. O nome da VM que gera a resposta é apresentado no texto na resposta HTML, em virtude do conteúdo de/var/www/html/index.html
em cada VM de back-end. Por exemplo, as respostas esperadas têm o seguinte aspeto:Page served from: vm-a1
ePage served from: vm-a2
.curl http://10.1.2.99
A regra de encaminhamento está configurada para servir as portas
80
,8008
,8080
e8088
. Para enviar tráfego para essas outras portas, anexe dois pontos (:
) e o número da porta após o endereço IP, da seguinte forma:curl http://10.1.2.99:8008
Se adicionar uma etiqueta de serviço à regra de encaminhamento interno, pode usar o DNS interno para contactar o equilibrador de carga através do respetivo nome de serviço.
curl http://web-test.fr-ilb.il4.us-west1.lb.PROJECT_ID.internal
Enviar um ping para o endereço IP do balanceador de carga
Este teste demonstra um comportamento esperado: não pode enviar um ping para o endereço IP do balanceador de carga. Isto deve-se ao facto de os equilibradores de carga de rede de encaminhamento interno serem implementados na programação de rede virtual, e não serem dispositivos separados.
Ligue-se à instância de VM do cliente.
gcloud compute ssh vm-client --zone=us-west1-a
Tente enviar um ping para o endereço IP do equilibrador de carga. Repare que não recebe uma resposta e que o comando
ping
expira após 10 segundos neste exemplo.timeout 10 ping 10.1.2.99
Envie pedidos de VMs com balanceamento de carga
Este teste demonstra que, quando uma VM de back-end envia pacotes para o endereço IP da regra de encaminhamento do respetivo equilibrador de carga, esses pedidos são encaminhados de volta para si próprios. Isto aplica-se independentemente do estado da verificação de funcionamento da VM de back-end.
Os equilibradores de carga de rede de passagem interna são implementados através da programação de rede virtual e da configuração da VM no SO convidado. Nas VMs Linux, o ambiente convidado cria uma rota para o endereço IP do balanceador de carga na tabela de encaminhamento local do sistema operativo.
Uma vez que esta rota local está na própria VM (e não numa rota na rede da VPC), os pacotes enviados para o endereço IP do balanceador de carga não são processados pela rede da VPC. Em alternativa, os pacotes enviados para o endereço IP do balanceador de carga permanecem no sistema operativo da VM.
Estabeleça ligação a uma VM de back-end, como
vm-a1
:gcloud compute ssh vm-a1 --zone=us-west1-a
Faça um pedido Web ao balanceador de carga (por endereço IP ou nome do serviço) através de
curl
. A resposta é proveniente da mesma VM de back-end que faz o pedido. As solicitações repetidas são respondidas da mesma forma. A resposta esperada quando testa a partir devm-a1
é semprePage served from: vm-a1
.curl http://10.1.2.99
Inspecione a tabela de encaminhamento local à procura de um destino que corresponda ao endereço IP do próprio balanceador de carga,
10.1.2.99
. Esta rota é uma parte necessária de um balanceador de carga de rede de encaminhamento interno, mas também demonstra por que motivo um pedido de uma VM atrás do balanceador de carga é sempre respondido pela mesma VM.ip route show table local | grep 10.1.2.99
Quando uma VM de back-end para um balanceador de carga de rede de passagem interna envia pacotes para o endereço IP da regra de encaminhamento do balanceador de carga, os pacotes são sempre encaminhados de volta para a VM que faz o pedido. Isto deve-se ao facto de um Network Load Balancer de passagem interno ser um balanceador de carga de passagem e ser implementado através da criação de uma rota local para o endereço IP do balanceador de carga no SO convidado da VM, conforme indicado nesta secção. Se tiver um caso de utilização em que os back-ends com equilíbrio de carga tenham de enviar tráfego TCP para o endereço IP do equilibrador de carga e precisar que o tráfego seja distribuído como se tivesse origem num back-end sem equilíbrio de carga, considere usar um Network Load Balancer de proxy interno regional.
Para mais informações, consulte o artigo Balanceadores de carga de rede de encaminhamento interno como saltos seguintes.
Configure o balanceador de carga com sub-redes e back-ends de pilha dupla
Este documento mostra como configurar e testar um balanceador de carga de rede de encaminhamento interno que suporta tráfego IPv4 e IPv6. Os passos nesta secção descrevem como configurar o seguinte:
- O exemplo nesta página usa uma rede VPC no modo personalizado denominada
lb-network-dual-stack
. O tráfego IPv6 requer uma sub-rede no modo personalizado. - Uma sub-rede de pilha dupla (
stack-type
definida comoIPV4_IPV6
), que é necessária para o tráfego IPv6. Quando cria uma sub-rede de pilha dupla numa rede de VPC de modo personalizado, escolhe um tipo de acesso IPv6 para a sub-rede. Para este exemplo, definimos o parâmetroipv6-access-type
da sub-rede comoINTERNAL
. Isto significa que às novas VMs nesta sub-rede podem ser atribuídos endereços IPv4 internos e endereços IPv6 internos. Para ver instruções, consulte a documentação da VPC sobre como adicionar uma sub-rede de pilha dupla. - Regras de firewall que permitem ligações recebidas a VMs de back-end.
- O grupo de instâncias de back-end, que está localizado na seguinte região
e sub-rede para este exemplo:
- Região:
us-west1
- Sub-rede:
lb-subnet
, com o intervalo de endereços IPv4 principal10.1.2.0/24
. Embora escolha o intervalo de endereços IPv4 a configurar na sub-rede, o intervalo de endereços IPv6 é atribuído automaticamente. A Google fornece um bloco CIDR IPv6 de tamanho fixo (/64
).
- Região:
- Quatro VMs de duplo stack: duas VMs num grupo de instâncias não gerido na zona
us-west1-a
e duas VMs num grupo de instâncias não gerido na zonaus-west1-c
. Para demonstrar o acesso global, este exemplo 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 principal10.3.4.0/24
- Região:
- Uma VM cliente para testar as ligações.
- Os seguintes componentes do balanceador de carga de rede de encaminhamento interno:
- Uma verificação de funcionamento do serviço de back-end.
- Um serviço de back-end interno na região
us-west1
para gerir a distribuição de ligações aos dois grupos de instâncias zonais. - Duas regras de encaminhamento interno para o front-end do balanceador de carga.
O diagrama seguinte mostra a arquitetura deste exemplo:
Configure uma rede, uma região e uma sub-rede
O exemplo de balanceador de carga de rede de encaminhamento interno descrito nesta página é criado numa rede VPC de modo personalizado denominada lb-network-dual-stack
.
Para configurar sub-redes com intervalos IPv6 internos, ative um intervalo IPv6 interno ULA de rede VPC. Os intervalos de sub-redes IPv6 internas são atribuídos a partir deste intervalo.
Consola
Na Google Cloud consola, aceda à página Redes VPC.
Clique em
Criar rede de VPC.Em Nome, introduza
lb-network-dual-stack
.Se quiser configurar intervalos de endereços IPv6 internos em sub-redes nesta rede, conclua estes passos:
- Para as Definições de endereço IPv6 privado, selecione Configurar um intervalo IPv6 interno para esta rede VPC.
- Para Atribuir intervalo IPv6 interno, selecione Automaticamente ou
Manualmente.
Se selecionar Manualmente, introduza um intervalo de
/48
no intervalo defd20::/20
. Se o intervalo estiver em uso, é-lhe pedido que faculte um intervalo diferente.
Para o Modo de criação de sub-rede, selecione Personalizado.
Na secção Nova sub-rede, especifique os seguintes parâmetros de configuração de uma sub-rede:
- Nome:
lb-subnet
- Região:
us-west1
- Tipo de pilha de IP: IPv4 e IPv6 (dupla pilha)
- Intervalo IPv4:
10.1.2.0/24
. - Tipo de acesso IPv6: interno
- Nome:
Clique em Concluído.
Clique em Adicionar sub-rede e introduza as seguintes informações:
- Nome:
europe-subnet
- Região:
europe-west1
- Tipo de pilha de IP: IPv4 (pilha única)
- Intervalo de endereços IP:
10.3.4.0/24
- Nome:
Clique em Concluído.
Clique em Criar.
gcloud
Para criar uma nova rede VPC no modo personalizado, execute o comando
gcloud compute networks create
.Para configurar intervalos IPv6 internos em quaisquer sub-redes nesta rede, use a flag
--enable-ula-internal-ipv6
. Esta opção atribui um/48
prefixo ULA a partir do intervalofd20::/20
usado pelo Google Cloud para intervalos de sub-redes IPv6 internos. Se quiser selecionar o/48
intervalo IPv6 atribuído, use a flag--internal-ipv6-range
para especificar um intervalo.gcloud compute networks create lb-network-dual-stack \ --subnet-mode=custom \ --enable-ula-internal-ipv6 \ --internal-ipv6-range=ULA_IPV6_RANGE \ --bgp-routing-mode=regional
Substitua
ULA_IPV6_RANGE
por um prefixo/48
do intervalofd20::/20
usado pela Google para intervalos de sub-redes IPv6 internos. Se não usar a flag--internal-ipv6-range
, a Google seleciona um prefixo/48
para a rede, comofd20:bc7:9a1c::/48
.Na rede
NETWORK
, crie uma sub-rede para back-ends na regiãous-west1
e outra sub-rede para testar o acesso global na regiãoeurope-west1
.Para criar as sub-redes, execute o comando
gcloud compute networks subnets create
.gcloud compute networks subnets create lb-subnet \ --network=lb-network-dual-stack \ --range=10.1.2.0/24 \ --region=us-west1 \ --stack-type=IPV4_IPV6 \ --ipv6-access-type=INTERNAL
gcloud compute networks subnets create europe-subnet \ --network=lb-network-dual-stack \ --range=10.3.4.0/24 \ --region=europe-west1 \ --stack-type=IPV4_IPV6 \ --ipv6-access-type=INTERNAL
API
Crie uma nova rede VPC de modo personalizado.
Para configurar intervalos IPv6 internos em quaisquer sub-redes nesta rede, defina enableUlaInternalIpv6
como verdadeiro. Esta opção atribui um /48
intervalo do intervalo fd20::/20
usado pela Google para intervalos de sub-redes IPv6
internos. Se quiser selecionar o intervalo de /48
IPv6 atribuído, use também o campo internalIpv6Range
para especificar um intervalo.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks { "autoCreateSubnetworks": false, "name": "lb-network-dual-stack", "mtu": MTU, "enableUlaInternalIpv6": true, "internalIpv6Range": "ULA_IPV6_RANGE", "routingConfig": { "routingMode": "DYNAMIC_ROUTING_MODE" } }
Substitua o seguinte:
PROJECT_ID
: o ID do projeto onde a rede VPC é criada.MTU
: a unidade de transmissão máxima da rede. A MTU pode ser1460
(predefinição) ou1500
. Reveja a vista geral da unidade de transmissão máxima antes de definir a MTU como1500
.ULA_IPV6_RANGE
: um prefixo/48
do intervalofd20::/20
usado pela Google para intervalos de sub-redes IPv6 internos. Se não fornecer um valor parainternalIpv6Range
, a Google seleciona um prefixo/48
para a rede.DYNAMIC_ROUTING_MODE
:global
ouregional
para controlar o comportamento de publicidade de rotas dos Cloud Routers na rede. Para mais informações, consulte o modo de planeamento de rotas dinâmico.Para mais informações, consulte o método
networks.insert
.
Faça dois pedidos POST
ao
subnetworks.insert
método.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks { "ipCidrRange": "10.1.2.0/24", "network": "lb-network-dual-stack", "name": "lb-subnet" "stackType": IPV4_IPV6, "ipv6AccessType": Internal }
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks { "ipCidrRange": "10.3.4.0/24", "network": "lb-network-dual-stack", "name": "europe-subnet" "stackType": IPV4_IPV6, "ipv6AccessType": Internal }
Configure regras de firewall
Este exemplo usa as seguintes regras de firewall:
fw-allow-lb-access
: uma regra de entrada, aplicável a todos os destinos na rede VPC, que permite o tráfego de origens nos intervalos10.1.2.0/24
e10.3.4.0/24
. Esta regra permite o tráfego de entrada de qualquer cliente localizado numa das duas sub-redes. Mais tarde, pode configurar e testar o acesso global.fw-allow-lb-access-ipv6
: Uma regra de entrada, aplicável a todos os destinos na rede VPC, que permite o tráfego de origens no intervalo IPv6 configurado na sub-rede. Esta regra permite o tráfego IPv6 de entrada de qualquer cliente localizado numa das duas sub-redes. Mais tarde, pode configurar e testar o acesso global.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 destinoallow-ssh
para identificar as VMs às quais deve ser aplicada.fw-allow-health-check
: uma regra de entrada, aplicável às instâncias com balanceamento de carga, que permite o tráfego dos sistemas de verificação de estado (130.211.0.0/22
e35.191.0.0/16
). Este exemplo usa a etiqueta de destinoallow-health-check
para identificar as instâncias às quais deve aplicar-se. Google Cloudfw-allow-health-check-ipv6
: uma regra de entrada, aplicável às instâncias com balanceamento de carga, que permite o tráfego dos sistemas de verificação de estado (2600:2d00:1:b029::/64
). Este exemplo usa a etiqueta de destinoallow-health-check-ipv6
para identificar as instâncias às quais deve ser aplicada. Google Cloud
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.
Consola
Na Google Cloud consola, aceda à página Políticas de firewall.
Para criar a regra que permite o tráfego da sub-rede, clique em Criar regra de firewall e introduza as seguintes informações:
- Nome:
fw-allow-lb-access
- Rede:
lb-network-dual-stack
- Prioridade:
1000
- Direção do trânsito: entrada
- Ação na correspondência: permitir
- Segmenta: todas as instâncias na rede
- Filtro de origem: intervalos IPv4
- Intervalos de IPv4 de origem:
10.1.2.0/24
e10.3.4.0/24
- Protocolos e portas: Permitir tudo
- Nome:
Clique em Criar.
Para permitir o tráfego de sub-rede IPv6, clique novamente em Criar regra de firewall e introduza as seguintes informações:
- Nome:
fw-allow-lb-access-ipv6
- Rede:
lb-network-dual-stack
- Prioridade:
1000
- Direção do trânsito: entrada
- Ação na correspondência: permitir
- Segmenta: todas as instâncias na rede
- Filtro de origem: intervalos IPv6
- Intervalos IPv6 de origem: IPV6_ADDRESS atribuídos no
lb-subnet
- Protocolos e portas: Permitir tudo
- Nome:
Clique em Criar.
Para permitir ligações SSH recebidas, clique novamente em Criar regra de firewall e introduza as seguintes informações:
- Nome:
fw-allow-ssh
- Rede:
lb-network-dual-stack
- Prioridade:
1000
- Direção do trânsito: 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: selecione Protocolos e portas especificados,
selecione a caixa de verificação TCP e, de seguida, introduza
22
em Portas.
- Nome:
Clique em Criar.
Para permitir as verificações de funcionamento de Google Cloud IPv6, clique novamente em Criar regra de firewall e introduza as seguintes informações:
- Nome:
fw-allow-health-check-ipv6
- Rede:
lb-network-dual-stack
- Prioridade:
1000
- Direção do trânsito: entrada
- Ação na correspondência: permitir
- Objetivos: etiquetas de destino especificadas
- Etiquetas de segmentação:
allow-health-check-ipv6
- Filtro de origem: intervalos IPv6
- Intervalos IPv6 de origem:
2600:2d00:1:b029::/64
- Protocolos e portas: Permitir tudo
- Nome:
Clique em Criar.
Para permitir Google Cloud verificações de funcionamento, clique novamente em Criar regra de firewall e introduza as seguintes informações:
- Nome:
fw-allow-health-check
- Rede:
lb-network-dual-stack
- Prioridade:
1000
- Direção do trânsito: entrada
- Ação na correspondência: permitir
- Objetivos: etiquetas de destino especificadas
- Etiquetas de segmentação:
allow-health-check
- Filtro de origem: intervalos IPv4
- Intervalos de IPv4 de origem:
130.211.0.0/22
e35.191.0.0/16
- Protocolos e portas: Permitir tudo
- Nome:
Clique em Criar.
gcloud
Crie a regra de firewall
fw-allow-lb-access
para permitir a comunicação com a sub-rede:gcloud compute firewall-rules create fw-allow-lb-access \ --network=lb-network-dual-stack \ --action=allow \ --direction=ingress \ --source-ranges=10.1.2.0/24,10.3.4.0/24 \ --rules=all
Crie a regra de firewall
fw-allow-lb-access-ipv6
para permitir a comunicação com a sub-rede:gcloud compute firewall-rules create fw-allow-lb-access-ipv6 \ --network=lb-network-dual-stack \ --action=allow \ --direction=ingress \ --source-ranges=IPV6_ADDRESS \ --rules=all
Substitua
IPV6_ADDRESS
pelo endereço IPv6 atribuído nolb-subnet
.Crie a regra de firewall
fw-allow-ssh
para permitir a conetividade SSH a VMs com a etiqueta de redeallow-ssh
. Quando omitesource-ranges
, Google Cloud interpreta a regra como qualquer origem.gcloud compute firewall-rules create fw-allow-ssh \ --network=lb-network-dual-stack \ --action=allow \ --direction=ingress \ --target-tags=allow-ssh \ --rules=tcp:22
Crie a regra
fw-allow-health-check-ipv6
para permitir Google Cloud verificações de funcionamento de IPv6.gcloud compute firewall-rules create fw-allow-health-check-ipv6 \ --network=lb-network-dual-stack \ --action=allow \ --direction=ingress \ --target-tags=allow-health-check-ipv6 \ --source-ranges=2600:2d00:1:b029::/64 \ --rules=tcp,udp
Crie a regra
fw-allow-health-check
para permitir Google Cloud verificações de funcionamento.gcloud compute firewall-rules create fw-allow-health-check \ --network=lb-network-dual-stack \ --action=allow \ --direction=ingress \ --target-tags=allow-health-check \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --rules=tcp,udp,icmp
API
Crie a regra de firewall
fw-allow-lb-access
fazendo um pedidoPOST
ao métodofirewalls.insert
.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-lb-access", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack", "priority": 1000, "sourceRanges": [ "10.1.2.0/24", "10.3.4.0/24" ], "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
Crie a regra de firewall
fw-allow-lb-access-ipv6
fazendo um pedidoPOST
ao métodofirewalls.insert
.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-lb-access-ipv6", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack", "priority": 1000, "sourceRanges": [ "IPV6_ADDRESS" ], "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
Substitua
IPV6_ADDRESS
pelo endereço IPv6 atribuído nolb-subnet
.Crie a regra de firewall
fw-allow-ssh
fazendo um pedidoPOST
ao métodofirewalls.insert
.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-ssh", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack", "priority": 1000, "sourceRanges": [ "0.0.0.0/0" ], "targetTags": [ "allow-ssh" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
Crie a regra de firewall
fw-allow-health-check-ipv6
fazendo um pedidoPOST
ao métodofirewalls.insert
.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-health-check-ipv6", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack", "priority": 1000, "sourceRanges": [ "2600:2d00:1:b029::/64" ], "targetTags": [ "allow-health-check-ipv6" ], "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
Crie a regra de firewall
fw-allow-health-check
fazendo um pedidoPOST
ao métodofirewalls.insert
.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-health-check", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack", "priority": 1000, "sourceRanges": [ "130.211.0.0/22", "35.191.0.0/16" ], "targetTags": [ "allow-health-check" ], "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
Crie VMs de back-end e grupos de instâncias
Este exemplo usa dois grupos de instâncias não geridos, cada um com duas VMs de back-end (servidor). Para demonstrar a natureza regional dos equilibradores de carga de rede de encaminhamento interno,
os dois grupos de instâncias são colocados em zonas separadas, us-west1-a
e us-west1-c
.
- O grupo de instâncias
ig-a
contém estas duas VMs:vm-a1
vm-a2
- O grupo de instâncias
ig-c
contém estas duas VMs:vm-c1
vm-c2
O tráfego para todas as quatro VMs de back-end é equilibrado por carga.
Para suportar este exemplo e as opções de configuração adicionais, cada uma das quatro VMs executa um servidor Web Apache que escuta nas seguintes portas TCP: 80
,8008
, 8080
, 8088
, 443
e 8443
.
A cada VM é atribuído um endereço IP interno no intervalo lb-subnet
e um endereço IP externo (público) efémero. Pode remover os endereços IP externos
mais tarde.
Não são necessários endereços IP externos para as VMs de back-end. No entanto, são úteis para este exemplo, porque permitem que as VMs de back-end transfiram o Apache da Internet e podem estabelecer ligação através de SSH.
Por predefinição, o Apache está configurado para ser associado a qualquer endereço IP. Os balanceadores de carga de rede de encaminhamento interno fornecem pacotes preservando o IP de destino.
Certifique-se de que o software do servidor executado nas VMs de back-end está a ouvir o endereço IP da regra de encaminhamento interno do balanceador de carga. Se configurar várias regras de encaminhamento interno, certifique-se de que o seu software escuta o endereço IP interno associado a cada uma delas. O endereço IP de destino de um pacote enviado para uma VM de back-end por um balanceador de carga de rede de encaminhamento direto interno é o endereço IP interno da regra de encaminhamento.
Se estiver a usar grupos de instâncias geridos, certifique-se de que o tipo de pilha da sub-rede corresponde ao tipo de pilha dos modelos de instâncias usados pelos grupos de instâncias geridos. A sub-rede tem de ser de pilha dupla se o grupo de instâncias geridas estiver a usar um modelo de instância de pilha dupla.
Para simplificar as instruções, estas VMs de back-end executam o Debian GNU/Linux 12.
Consola
Crie VMs de back-end
Na Google Cloud consola, aceda à página Instâncias de VM.
Repita os passos 3 a 8 para cada VM, usando as seguintes combinações de nome e zona.
- Nome:
vm-a1
, zona:us-west1-a
- Nome:
vm-a2
, zona:us-west1-a
- Nome:
vm-c1
, zona:us-west1-c
- Nome:
vm-c2
, zona:us-west1-c
- Nome:
Clique em Criar instância.
Defina o Nome conforme indicado no passo 2.
Para Região, selecione
us-west1
e escolha uma Zona, conforme indicado no passo 2.Na secção Disco de arranque, certifique-se de que a opção Debian GNU/Linux 12 (bookworm) está selecionada para as opções do disco de arranque. Se necessário, clique em Alterar para alterar a imagem.
Clique em Opções avançadas.
Clique em Rede e configure os seguintes campos:
- Para Etiquetas de rede, introduza
allow-ssh
eallow-health-check-ipv6
. - Para Interfaces de rede, selecione o seguinte:
- Rede:
lb-network-dual-stack
- Subnet:
lb-subnet
- Tipo de pilha de IP: IPv4 e IPv6 (dupla pilha)
- Endereço IPv4 interno principal: efémero (automático)
- Endereço IPv4 externo: efémero
- Rede:
Clique em Gestão e, de seguida, no campo Script de arranque, introduza o seguinte script. O conteúdo do script é idêntico para todas as quatro VMs.
#! /bin/bash if [ -f /etc/startup_script_completed ]; then exit 0 fi apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl file_ports="/etc/apache2/ports.conf" file_http_site="/etc/apache2/sites-available/000-default.conf" file_https_site="/etc/apache2/sites-available/default-ssl.conf" http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088" http_vh_prts="*:80 *:8008 *:8080 *:8088" https_listen_prts="Listen 443\nListen 8443" https_vh_prts="*:443 *:8443" 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 prt_conf="$(cat "$file_ports")" prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")" prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")" echo "$prt_conf" | tee "$file_ports" http_site_conf="$(cat "$file_http_site")" http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")" echo "$http_site_conf_2" | tee "$file_http_site" https_site_conf="$(cat "$file_https_site")" https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")" echo "$https_site_conf_2" | tee "$file_https_site" systemctl restart apache2 touch /etc/startup_script_completed
- Para Etiquetas de rede, introduza
Clique em Criar.
Crie grupos de instâncias
Na Google Cloud consola, aceda à página Grupos de instâncias.
Repita os passos seguintes para criar dois grupos de instâncias não geridos, cada um com duas VMs, usando estas combinações.
- Nome do grupo de instâncias:
ig-a
, zona:us-west1-a
, VMs:vm-a1
evm-a2
- Nome do grupo de instâncias:
ig-c
, zona:us-west1-c
, VMs:vm-c1
evm-c2
- Nome do grupo de instâncias:
Clique em Criar grupo de instâncias.
Clique em Novo grupo de instâncias não gerido.
Defina o Nome conforme indicado no passo 2.
Na secção Localização, selecione
us-west1
para a Região e, em seguida, escolha uma Zona, conforme indicado no passo 2.Para Rede, selecione
lb-network-dual-stack
.Para Sub-rede, selecione
lb-subnet
.Na secção Instâncias de VM, adicione as VMs conforme indicado no passo 2.
Clique em Criar.
gcloud
Para criar as quatro VMs, execute o comando
gcloud compute instances create
quatro vezes, usando estas quatro combinações para[VM-NAME]
e[ZONE]
. O conteúdo do script é idêntico para todas as quatro VMs.VM-NAME
:vm-a1
,ZONE
:us-west1-a
VM-NAME
:vm-a2
,ZONE
:us-west1-a
VM-NAME
:vm-c1
,ZONE
:us-west1-c
VM-NAME
:vm-c2
,ZONE
:us-west1-c
gcloud compute instances create VM-NAME \ --zone=ZONE \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh,allow-health-check-ipv6 \ --subnet=lb-subnet \ --stack-type=IPV4_IPV6 \ --metadata=startup-script='#! /bin/bash if [ -f /etc/startup_script_completed ]; then exit 0 fi apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl file_ports="/etc/apache2/ports.conf" file_http_site="/etc/apache2/sites-available/000-default.conf" file_https_site="/etc/apache2/sites-available/default-ssl.conf" http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088" http_vh_prts="*:80 *:8008 *:8080 *:8088" https_listen_prts="Listen 443\nListen 8443" https_vh_prts="*:443 *:8443" 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 prt_conf="$(cat "$file_ports")" prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")" prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")" echo "$prt_conf" | tee "$file_ports" http_site_conf="$(cat "$file_http_site")" http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")" echo "$http_site_conf_2" | tee "$file_http_site" https_site_conf="$(cat "$file_https_site")" https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")" echo "$https_site_conf_2" | tee "$file_https_site" systemctl restart apache2 touch /etc/startup_script_completed'
Crie os dois grupos de instâncias não geridos em cada zona:
gcloud compute instance-groups unmanaged create ig-a \ --zone=us-west1-a gcloud compute instance-groups unmanaged create ig-c \ --zone=us-west1-c
Adicione as VMs aos grupos de instâncias adequados:
gcloud compute instance-groups unmanaged add-instances ig-a \ --zone=us-west1-a \ --instances=vm-a1,vm-a2 gcloud compute instance-groups unmanaged add-instances ig-c \ --zone=us-west1-c \ --instances=vm-c1,vm-c2
api
Para as quatro VMs, use os seguintes nomes e zonas de VMs:
VM-NAME
:vm-a1
,ZONE
:us-west1-a
VM-NAME
:vm-a2
,ZONE
:us-west1-a
VM-NAME
:vm-c1
,ZONE
:us-west1-c
VM-NAME
:vm-c2
,ZONE
:us-west1-c
Pode obter o DEBIAN_IMAGE_NAME
atual executando o seguinte comando gcloud
:
gcloud compute images list \ --filter="family=debian-12"
Crie quatro VMs de back-end fazendo quatro pedidos POST
ao método instances.insert
:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "name": "VM-NAME", "tags": { "items": [ "allow-health-check-ipv6", "allow-ssh" ] }, "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/[ZONE]/machineTypes/e2-standard-2", "canIpForward": false, "networkInterfaces": [ { "stackType": "IPV4_IPV6", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "accessConfigs": [ { "type": "ONE_TO_ONE_NAT", "name": "external-nat", "networkTier": "PREMIUM" } ] } ], "disks": [ { "type": "PERSISTENT", "boot": true, "mode": "READ_WRITE", "autoDelete": true, "deviceName": "VM-NAME", "initializeParams": { "sourceImage": "projects/debian-cloud/global/images/debian-image-name", "diskType": "projects/PROJECT_ID/zones/zone/diskTypes/pd-standard", "diskSizeGb": "10" } } ], "metadata": { "items": [ { "key": "startup-script", "value": "#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\nfile_ports=\"/etc/apache2/ports.conf\"\nfile_http_site=\"/etc/apache2/sites-available/000-default.conf\"\nfile_https_site=\"/etc/apache2/sites-available/default-ssl.conf\"\nhttp_listen_prts=\"Listen 80\\nListen 8008\\nListen 8080\\nListen 8088\"\nhttp_vh_prts=\"*:80 *:8008 *:8080 *:8088\"\nhttps_listen_prts=\"Listen 443\\nListen 8443\"\nhttps_vh_prts=\"*:443 *:8443\"\nvm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\nhttp://169.254.169.254/computeMetadata/v1/instance/name)\"\necho \"Page served from: $vm_hostname\" | \\\ntee /var/www/html/index.html\nprt_conf=\"$(cat \"$file_ports\")\"\nprt_conf_2=\"$(echo \"$prt_conf\" | sed \"s|Listen 80|${http_listen_prts}|\")\"\nprt_conf=\"$(echo \"$prt_conf_2\" | sed \"s|Listen 443|${https_listen_prts}|\")\"\necho \"$prt_conf\" | tee \"$file_ports\"\nhttp_site_conf=\"$(cat \"$file_http_site\")\"\nhttp_site_conf_2=\"$(echo \"$http_site_conf\" | sed \"s|*:80|${http_vh_prts}|\")\"\necho \"$http_site_conf_2\" | tee \"$file_http_site\"\nhttps_site_conf=\"$(cat \"$file_https_site\")\"\nhttps_site_conf_2=\"$(echo \"$https_site_conf\" | sed \"s|_default_:443|${https_vh_prts}|\")\"\necho \"$https_site_conf_2\" | tee \"$file_https_site\"\nsystemctl restart apache2" } ] }, "scheduling": { "preemptible": false }, "deletionProtection": false }
Crie dois grupos de instâncias fazendo um pedido POST
ao método
instanceGroups.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups { "name": "ig-a", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet" }
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups { "name": "ig-c", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet" }
Adicione instâncias a cada grupo de instâncias fazendo um pedido POST
ao método instanceGroups.addInstances
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a/addInstances { "instances": [ { "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a1", "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a2" } ] }
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups/ig-c/addInstances { "instances": [ { "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instances/vm-c1", "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instances/vm-c2" } ] }
Configure os componentes do balanceador de carga
Estes passos configuram todos os componentes do balanceador de carga de rede de encaminhamento interno, começando pela verificação de estado e pelo serviço de back-end e, em seguida, pelos componentes de front-end:
Verificação de funcionamento. Neste exemplo, usa uma verificação de funcionamento de HTTP que verifica um
200 OK
código de estado HTTP. Para mais informações, consulte a secção de verificações de funcionamento da vista geral do balanceador de carga de rede de encaminhamento interno.Serviço de back-end. Uma vez que tem de transmitir tráfego HTTP através do balanceador de carga interno, tem de usar o protocolo TCP e não o UDP.
Regra de encaminhamento. Este exemplo cria duas regras de encaminhamento interno para tráfego IPv4 e IPv6.
Endereço IP interno. Neste exemplo, especifica um endereço IP interno,
10.1.2.99
, quando cria a regra de encaminhamento IPv4. Para mais informações, consulte Endereço IP interno. Embora escolha o endereço IPv4 configurado, o endereço IPv6 é atribuído automaticamente.
Consola
Inicie a configuração
Na Google Cloud consola, aceda à página Equilíbrio de carga.
- Clique em Criar equilibrador de carga.
- Para Tipo de balanceador de carga, selecione Balanceador de carga de rede (TCP/UDP/SSL) e clique em Seguinte.
- Para Proxy ou passagem, selecione Passagem do balanceador de carga e clique em Seguinte.
- Para Público ou interno, selecione Interno e clique em Seguinte.
- Clique em Configurar.
Configuração básica
Na página Criar balanceador de carga de rede de encaminhamento interno, introduza as seguintes informações:
- Nome do balanceador de carga:
be-ilb
- Região:
us-west1
- Rede:
lb-network-dual-stack
Configuração do back-end
- Clique em Configuração de back-end.
- Na lista Verificação de funcionamento, clique em Criar uma verificação de funcionamento
e introduza as seguintes informações:
- Nome:
hc-http-80
- Âmbito: regional
- Protocolo: HTTP
- Porta:
80
- Protocolo proxy:
NONE
- Pedido:
/
- Nome:
- Clique em Criar.
- Na secção Novo back-end, para Tipo de pilha de IP, selecione a opção IPv4 e IPv6 (pilha dupla).
- Em Grupo de instâncias, selecione o grupo de instâncias
ig-a
e clique em Concluído. - Clique em Adicionar um back-end e repita o passo para adicionar o grupo de instâncias
ig-c
. - Verifique se aparece uma marca de verificação azul junto a Configuração de back-end.
Configuração da interface
- Clique em Configuração do front-end. Na secção Novo endereço IP e porta de front-end, faça o seguinte:
- Em Nome, introduza
fr-ilb-ipv6
. - Para processar o tráfego IPv6, faça o seguinte:
- Para a versão do IP, selecione IPv6.
- Para Sub-rede, selecione
lb-subnet
. O intervalo de endereços IPv6 na regra de encaminhamento é sempre efémero. - Em Portas, selecione Múltiplas e, de seguida, no campo Número da porta, introduza
80
,8008
,8080
,8088
. - Clique em Concluído.
- Para processar o tráfego IPv4, faça o seguinte:
- Clique em Adicionar IP e porta do front-end.
- Em Nome, introduza
fr-ilb
. - Para Sub-rede, selecione
lb-subnet
. - Na secção Finalidade do IP interno, na lista Endereço IP, selecione Criar endereço IP,
introduza as seguintes informações e, de seguida, clique em Reservar.
- Nome:
ip-ilb
- Versão do IP: IPv4
- Endereço IP estático: Permitir-me escolher
- Endereço IP personalizado:
10.1.2.99
- Nome:
- Para Portas, selecione Múltiplas e, em seguida, em Números de portas,introduza
80
,8008
,8080
e8088
. - Clique em Concluído.
- Antes de continuar, verifique se existe uma marca de verificação azul junto a Configuração do frontend.
- Em Nome, introduza
Reveja a configuração
- Clique em Rever e finalizar. Verifique todas as suas definições.
- Se as definições estiverem corretas, clique em Criar. A criação do balanceador de carga de encaminhamento interno demora alguns minutos.
gcloud
Crie uma nova verificação de funcionamento de HTTP regional para testar a conetividade HTTP às VMs na porta 80.
gcloud compute health-checks create http hc-http-80 \ --region=us-west1 \ --port=80
Crie o serviço de back-end para o tráfego HTTP:
gcloud compute backend-services create be-ilb \ --load-balancing-scheme=internal \ --protocol=tcp \ --region=us-west1 \ --health-checks=hc-http-80 \ --health-checks-region=us-west1
Adicione os dois grupos de instâncias ao serviço de back-end:
gcloud compute backend-services add-backend be-ilb \ --region=us-west1 \ --instance-group=ig-a \ --instance-group-zone=us-west1-a gcloud compute backend-services add-backend be-ilb \ --region=us-west1 \ --instance-group=ig-c \ --instance-group-zone=us-west1-c
Crie duas regras de encaminhamento para o serviço de back-end. Quando criar a regra de encaminhamento IPv4, especifique
10.1.2.99
para o endereço IP interno na sub-rede para endereços IPv4.gcloud compute forwarding-rules create fr-ilb \ --region=us-west1 \ --load-balancing-scheme=internal \ --subnet=lb-subnet \ --address=10.1.2.99 \ --ip-protocol=TCP \ --ports=80,8008,8080,8088 \ --backend-service=be-ilb \ --backend-service-region=us-west1
gcloud compute forwarding-rules create fr-ilb-ipv6 \ --region=us-west1 \ --load-balancing-scheme=internal \ --subnet=lb-subnet \ --ip-protocol=TCP \ --ports=80,8008,8080,8088 \ --backend-service=be-ilb \ --backend-service-region=us-west1 \ --ip-version=IPV6
api
Crie a verificação de funcionamento fazendo um pedido POST
ao método regionHealthChecks.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/regionHealthChecks { "name": "hc-http-80", "type": "HTTP", "httpHealthCheck": { "port": 80 } }
Crie o serviço de back-end regional fazendo um pedido POST
ao
regionBackendServices.insert
método.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices { "name": "be-ilb", "backends": [ { "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a", "balancingMode": "CONNECTION" }, { "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups/ig-c", "balancingMode": "CONNECTION" } ], "healthChecks": [ "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/healthChecks/hc-http-80" ], "loadBalancingScheme": "INTERNAL", "connectionDraining": { "drainingTimeoutSec": 0 } }
Crie a regra de encaminhamento fazendo um pedido POST
ao
método forwardingRules.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules { "name": "fr-ilb-ipv6", "IPProtocol": "TCP", "ports": [ "80", "8008", "8080", "8088" ], "loadBalancingScheme": "INTERNAL", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb", "ipVersion": "IPV6", "networkTier": "PREMIUM" }
Crie a regra de encaminhamento fazendo um pedido POST
ao
método forwardingRules.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules { "name": "fr-ilb", "IPAddress": "10.1.2.99", "IPProtocol": "TCP", "ports": [ "80", "8008", "8080", "8088" ], "loadBalancingScheme": "INTERNAL", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb", "networkTier": "PREMIUM" }
Teste o balanceador de carga
Para testar o balanceador de carga, crie uma VM cliente na mesma região que o balanceador de carga e, em seguida, envie tráfego do cliente para o balanceador de carga.
Crie uma VM de cliente
Este exemplo cria uma VM de cliente (vm-client
) na mesma região que as VMs de back-end (servidor). O cliente é usado para validar a configuração do equilibrador de carga
e demonstrar o comportamento esperado, conforme descrito na secção de
testes.
Consola
Na Google Cloud consola, aceda à página Instâncias de VM.
Clique em Criar instância.
Em Nome, introduza
vm-client
.Para Região, selecione
us-west1
.Para Zona, selecione
us-west1-a
.Clique em Opções avançadas.
Clique em Rede e configure os seguintes campos:
- Para etiquetas de rede, introduza
allow-ssh
. - Para Interfaces de rede, selecione o seguinte:
- Rede:
lb-network-dual-stack
- Subnet:
lb-subnet
- Tipo de pilha de IP: IPv4 e IPv6 (dupla pilha)
- IP interno principal: efémero (automático)
- IP externo: efémero
- Rede:
- Clique em Concluído.
- Para etiquetas de rede, introduza
Clique em Criar.
gcloud
A VM do cliente pode estar em qualquer zona na mesma região que o balanceador de carga e pode usar qualquer sub-rede nessa região. Neste exemplo, o cliente está na zona us-west1-a
e usa a mesma sub-rede que as VMs de back-end.
gcloud compute instances create vm-client \ --zone=us-west1-a \ --image-family=debian-12 \ --image-project=debian-cloud \ --stack-type=IPV4_IPV6 \ --tags=allow-ssh \ --subnet=lb-subnet
api
Faça um pedido POST
ao
método instances.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances { "name": "vm-client", "tags": { "items": [ "allow-ssh" ] }, "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/machineTypes/e2-standard-2", "canIpForward": false, "networkInterfaces": [ { "stackType": "IPV4_IPV6", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "accessConfigs": [ { "type": "ONE_TO_ONE_NAT", "name": "external-nat", "networkTier": "PREMIUM" } ] } ], "disks": [ { "type": "PERSISTENT", "boot": true, "mode": "READ_WRITE", "autoDelete": true, "deviceName": "vm-client", "initializeParams": { "sourceImage": "projects/debian-cloud/global/images/debian-image-name", "diskType": "projects/PROJECT_ID/zones/us-west1-a/diskTypes/pd-standard", "diskSizeGb": "10" } } ], "scheduling": { "preemptible": false }, "deletionProtection": false }
Teste a ligação
Este teste contacta o balanceador de carga a partir de uma VM cliente separada, ou seja, não a partir de uma VM de back-end do balanceador de carga. O comportamento esperado é que o tráfego seja distribuído entre as quatro VMs de back-end.
Ligue-se à instância de VM do cliente.
gcloud compute ssh vm-client --zone=us-west1-a
Descreva a regra de encaminhamento IPv6
fr-ilb-ipv6
. Tenha em atenção oIPV6_ADDRESS
na descrição.gcloud compute forwarding-rules describe fr-ilb-ipv6 --region=us-west1
Descreva a regra de encaminhamento IPv4
fr-ilb
.gcloud compute forwarding-rules describe fr-ilb --region=us-west1
Em clientes com conetividade IPv6, execute o seguinte comando:
curl -m 10 -s http://IPV6_ADDRESS:80
Por exemplo, se o endereço IPv6 atribuído for
[fd20:1db0:b882:802:0:46:0:0/96]:80
, o comando deve ter o seguinte aspeto:curl -m 10 -s http://[fd20:1db0:b882:802:0:46:0:0]:80
Em clientes com conetividade IPv4, execute o seguinte comando:
curl -m 10 -s http://10.1.2.99:80
Substitua os marcadores de posição por valores válidos:
IPV6_ADDRESS
é o endereço IPv6 efémero na regra de encaminhamentofr-ilb-ipv6
.
Configure o balanceador de carga com sub-redes e back-ends apenas IPv6
Este documento mostra como configurar e testar um balanceador de carga de rede de encaminhamento interno que suporta apenas tráfego IPv6. Os passos nesta secção descrevem como configurar o seguinte:
- Uma rede VPC
no modo personalizado denominada
lb-network-ipv6-only
. O tráfego IPv6 requer uma sub-rede de modo personalizado. - Uma sub-rede apenas IPv6 interna denominada
lb-subnet-ipv6-only
(stack-type
definida comoIPV6_ONLY
), que é necessária para o tráfego apenas IPv6. - Regras de firewall que permitem ligações recebidas a VMs de back-end.
- O grupo de instâncias de back-end, que está localizado na seguinte região e
sub-rede para este exemplo:
- Região:
us-west1
- Sub-rede:
lb-subnet-ipv6-only
o intervalo de endereços IPv6 para a sub-rede é atribuído automaticamente. A Google fornece um bloco CIDR IPv6 de tamanho fixo (/64
).
- Região:
- Quatro VMs de back-end apenas IPv6: duas VMs num grupo de instâncias não gerido na zona
us-west1-a
e duas VMs num grupo de instâncias não gerido na zonaus-west1-c
. - Um servidor TCP IPv6 nas VMs de back-end. O servidor ouve as ligações recebidas no VIP especificado da regra de encaminhamento do balanceador de carga e na interface de rede especificada. O servidor aceita ligações de clientes recebidas, envia uma resposta e, em seguida, fecha a ligação.
- Uma VM cliente para testar as ligações.
- Os seguintes componentes do balanceador de carga de rede de encaminhamento interno:
- Uma verificação de funcionamento para o serviço de back-end
- Um serviço de back-end interno na região
us-west1
para gerir a distribuição de ligações aos dois grupos de instâncias zonais - Uma regra de encaminhamento IPv6
Também pode configurar um balanceador de carga de rede de encaminhamento interno com back-ends apenas IPv6 internos através de uma instância de VM que funcione como gateway NAT. Para saber mais acerca desta configuração, consulte o artigo Configure um Network Load Balancer de encaminhamento interno com back-ends apenas IPv6 internos.
Configure uma rede, uma região e uma sub-rede
O exemplo de balanceador de carga de rede de encaminhamento interno descrito nesta página é criado numa rede VPC de modo personalizado denominada lb-network-ipv6-only
.
Para configurar sub-redes com intervalos IPv6 internos, ative um intervalo IPv6 interno ULA de rede VPC. Os intervalos de sub-redes IPv6 internas são atribuídos a partir deste intervalo.
Mais tarde, na secção Instale um servidor TCP IPv6 nas VMs de back-end através de um script Bash de arranque deste documento, o intervalo da sub-rede IPv6 interna é usado para criar uma regra de encaminhamento para encaminhar o tráfego da sub-rede da VPC através do gateway e da interface de rede especificados.
Consola
Na Google Cloud consola, aceda à página Redes VPC.
Clique em Criar rede de VPC.
Em Nome, introduza
lb-network-ipv6-only
.Se quiser configurar intervalos de endereços IPv6 internos em sub-redes nesta rede, conclua estes passos:
- Para as Definições de endereço IPv6 privado, selecione Configurar um intervalo IPv6 interno para esta rede VPC.
- Para Atribuir intervalo IPv6 interno, selecione Automaticamente ou
Manualmente.
Se selecionar Manualmente, introduza um intervalo de
/48
no intervalo defd20::/20
. Se o intervalo já estiver a ser usado, é-lhe pedido que forneça um intervalo diferente.
Para o Modo de criação de sub-rede, selecione Personalizado.
Na secção Nova sub-rede, especifique os seguintes parâmetros de configuração de uma sub-rede:
- Nome:
lb-subnet-ipv6-only
- Região:
us-west1
- Tipo de pilha de IP: IPv6 (pilha única)
- Tipo de acesso IPv6: interno
- Nome:
Clique em Concluído.
Clique em Criar.
gcloud
Para criar uma nova rede VPC no modo personalizado, execute o comando
gcloud compute networks create
.Para configurar intervalos IPv6 internos em quaisquer sub-redes nesta rede, use a flag
--enable-ula-internal-ipv6
.gcloud compute networks create lb-network-ipv6-only \ --subnet-mode=custom \ --enable-ula-internal-ipv6 \ --bgp-routing-mode=regional
Configure uma sub-rede com o
ipv6-access-type
definido comoINTERNAL
. Isto indica que as VMs nesta sub-rede só podem ter endereços IPv6 internos.Para criar a sub-rede, execute o comandogcloud compute networks subnets create
.gcloud compute networks subnets create lb-subnet-ipv6-only \ --network=lb-network-ipv6-only \ --region=us-west1 \ --stack-type=IPV6_ONLY \ --ipv6-access-type=INTERNAL
Configure regras de firewall
Este exemplo usa as seguintes regras de firewall:
fw-allow-lb-access-ipv6-only
: uma regra de entrada, aplicável a todos os destinos na rede VPC, que permite o tráfego de todas as origens IPv6.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 TCP22
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 destinoallow-ssh
para identificar as VMs às quais se deve aplicar.fw-allow-health-check-ipv6-only
: uma regra de entrada, aplicável às instâncias com balanceamento de carga, que permite o tráfego dos sistemas de verificação de estado (2600:2d00:1:b029::/64
). Este exemplo usa a etiqueta de destinoallow-health-check-ipv6
para identificar as instâncias às quais tem de se aplicar. Google Cloud
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.
Consola
Na Google Cloud consola, aceda à página Políticas de firewall.
Para permitir o tráfego de sub-rede IPv6, clique novamente em Criar regra de firewall e introduza as seguintes informações:
- Nome:
fw-allow-lb-access-ipv6-only
- Rede:
lb-network-ipv6-only
- Prioridade:
1000
- Direção do tráfego: entrada
- Ação na correspondência: Permitir
- Segmenta: todas as instâncias na rede
- Filtro de origem: intervalos IPv6
- Intervalos IPv6 de origem:
::/0
- Protocolos e portas: Permitir tudo
- Nome:
Clique em Criar.
Para permitir ligações SSH recebidas, clique novamente em Criar regra de firewall e introduza as seguintes informações:
- Nome:
fw-allow-ssh
- Rede:
lb-network-ipv6-only
- Prioridade:
1000
- 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: selecione Protocolos e portas especificados,
selecione a caixa de verificação TCP e, de seguida, introduza
22
em Portas.
- Nome:
Clique em Criar.
Para permitir as verificações de funcionamento de Google Cloud IPv6, clique novamente em Criar regra de firewall e introduza as seguintes informações:
- Nome:
fw-allow-health-check-ipv6-only
- Rede:
lb-network-ipv6-only
- Prioridade:
1000
- Direção do tráfego: entrada
- Ação na correspondência: Permitir
- Objetivos: etiquetas de destino especificadas
- Etiquetas de segmentação:
allow-health-check-ipv6
- Filtro de origem: intervalos IPv6
- Intervalos IPv6 de origem:
2600:2d00:1:b029::/64
- Protocolos e portas: Permitir tudo
- Nome:
Clique em Criar.
gcloud
Crie a regra de firewall
fw-allow-lb-access-ipv6-only
para permitir o tráfego IPv6 para todas as instâncias de VM na rede VPC.gcloud compute firewall-rules create fw-allow-lb-access-ipv6-only \ --network=lb-network-ipv6-only \ --action=allow \ --direction=ingress \ --source-ranges=::/0 \ --rules=all
Crie a regra de firewall
fw-allow-ssh
para permitir a conetividade SSH a VMs com a etiqueta de redeallow-ssh
. Quando omitesource-ranges
, Google Cloud interpreta a regra como qualquer origem.gcloud compute firewall-rules create fw-allow-ssh \ --network=lb-network-ipv6-only \ --action=allow \ --direction=ingress \ --target-tags=allow-ssh \ --rules=tcp:22
Crie a regra
fw-allow-health-check-ipv6
para permitir Google Cloud verificações de funcionamento de IPv6.gcloud compute firewall-rules create fw-allow-health-check-ipv6-only \ --network=lb-network-ipv6-only \ --action=allow \ --direction=ingress \ --target-tags=allow-health-check-ipv6 \ --source-ranges=2600:2d00:1:b029::/64 \ --rules=tcp,udp
Crie VMs de back-end e grupos de instâncias
Este exemplo usa dois grupos de instâncias não geridos, cada um com duas VMs de back-end. Para demonstrar a natureza regional dos equilibradores de carga de rede de encaminhamento interno,
os dois grupos de instâncias são colocados em zonas separadas, us-west1-a
e us-west1-c
.
- O grupo de instâncias
ig-a
contém estas duas VMs:vm-a1
vm-a2
- O grupo de instâncias
ig-c
contém estas duas VMs:vm-c1
vm-c2
O tráfego para todas as quatro VMs de back-end é equilibrado por carga.
Consola
Crie VMs de back-end
Na Google Cloud consola, aceda à página Instâncias de VM.
Repita estes passos para cada VM, usando as seguintes combinações de nome e zona.
- Nome:
vm-a1
, zona:us-west1-a
- Nome:
vm-a2
, zona:us-west1-a
- Nome:
vm-c1
, zona:us-west1-c
- Nome:
vm-c2
, zona:us-west1-c
- Nome:
Clique em Criar instância.
Defina o Nome conforme indicado no passo 2.
Para Região, selecione
us-west1
e escolha uma Zona, conforme indicado no passo 2.Na secção Disco de arranque, certifique-se de que a opção Debian GNU/Linux 12 (bookworm) está selecionada para as opções do disco de arranque. Se necessário, clique em Alterar para alterar a imagem.
Clique em Opções avançadas.
Clique em Rede e configure os seguintes campos:
- Para Etiquetas de rede, introduza
allow-ssh
eallow-health-check-ipv6
. - Para Interfaces de rede, selecione o seguinte:
- Rede:
lb-network-ipv6-only
- Subnet:
lb-subnet-ipv6-only
- Tipo de pilha de IP: IPv6 (pilha única)
- Endereço IPv6 interno principal: efémero (automático)
- Rede:
- Para Etiquetas de rede, introduza
Clique em Criar.
A VM de back-end tem de executar um servidor TCP IPv6 que ouve as ligações recebidas. Instale este servidor nas VMs de back-end depois de configurar o balanceador de carga. Isto deve-se ao facto de o script do servidor criar um socket que se associa à regra de encaminhamento do balanceador de carga.
Crie grupos de instâncias
Na Google Cloud consola, aceda à página Grupos de instâncias.
Repita os passos seguintes para criar dois grupos de instâncias não geridos, cada um com duas VMs, usando estas combinações.
- Nome do grupo de instâncias:
ig-a
, zona:us-west1-a
, VMs:vm-a1
evm-a2
- Nome do grupo de instâncias:
ig-c
, zona:us-west1-c
, VMs:vm-c1
evm-c2
- Nome do grupo de instâncias:
Clique em Criar grupo de instâncias.
Clique em Novo grupo de instâncias não gerido.
Defina o Nome conforme indicado no passo 2.
Na secção Localização, selecione
us-west1
para a Região e, em seguida, escolha uma Zona, conforme indicado no passo 2.Para Rede, selecione
lb-network-ipv6-only
.Para Sub-rede, selecione
lb-subnet-ipv6-only
.Na secção Instâncias de VM, adicione as VMs conforme indicado no passo 2.
Clique em Criar.
gcloud
Para criar as quatro VMs, execute o comando
gcloud compute instances create
quatro vezes, usando estas quatro combinações para[VM-NAME]
e[ZONE]
.VM-NAME
:vm-a1
,ZONE
:us-west1-a
VM-NAME
:vm-a2
,ZONE
:us-west1-a
VM-NAME
:vm-c1
,ZONE
:us-west1-c
VM-NAME
:vm-c2
,ZONE
:us-west1-c
gcloud beta compute instances create VM-NAME \ --zone=ZONE \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh,allow-health-check-ipv6 \ --subnet=lb-subnet-ipv6-only \ --stack-type=IPV6_ONLY
A VM de back-end tem de executar um servidor TCP IPv6 que ouve as ligações recebidas. Instale este servidor nas VMs de back-end depois de configurar o balanceador de carga. Isto deve-se ao facto de o script do servidor criar um socket que se associa à regra de encaminhamento do balanceador de carga.
Crie os dois grupos de instâncias não geridos em cada zona:
gcloud beta compute instance-groups unmanaged create ig-a \ --zone=us-west1-a gcloud beta compute instance-groups unmanaged create ig-c \ --zone=us-west1-c
Adicione as VMs aos grupos de instâncias adequados:
gcloud beta compute instance-groups unmanaged add-instances ig-a \ --zone=us-west1-a \ --instances=vm-a1,vm-a2 gcloud beta compute instance-groups unmanaged add-instances ig-c \ --zone=us-west1-c \ --instances=vm-c1,vm-c2
Configure os componentes do balanceador de carga
Estes passos configuram todos os componentes do balanceador de carga de rede de encaminhamento interno, começando pela verificação de estado e pelo serviço de back-end e, em seguida, pelos componentes de front-end:
Consola
Inicie a configuração
Na Google Cloud consola, aceda à página Equilíbrio de carga.
- Clique em Criar equilibrador de carga.
- Para Tipo de balanceador de carga, selecione Balanceador de carga de rede (TCP/UDP/SSL) e clique em Seguinte.
- Para Proxy ou passagem, selecione Passagem do balanceador de carga e clique em Seguinte.
- Para Público ou interno, selecione Interno e clique em Seguinte.
- Clique em Configurar.
Configuração básica
Na página Criar balanceador de carga de rede de encaminhamento interno, introduza as seguintes informações:
- Nome do balanceador de carga:
ilb-ipv6-only
- Região:
us-west1
- Rede:
lb-network-ipv6-only
Configuração do back-end
- Clique em Configuração de back-end.
- Na lista Verificação de funcionamento, clique em Criar uma verificação de funcionamento e, de seguida, introduza as seguintes informações:
- Nome:
hc-http-80
- Âmbito: regional
- Protocolo: HTTP
- Porta:
80
- Protocolo proxy: Nenhum
- Pedido:
/
- Nome:
- Clique em Criar.
- Na secção Novo back-end, para Tipo de pilha de IP, selecione a opção IPv6 (pilha única).
- Em Grupo de instâncias, selecione o grupo de instâncias
ig-a
e clique em Concluído. - Clique em Adicionar um back-end e repita o passo para adicionar o grupo de instâncias
ig-c
. - Verifique se aparece uma marca de verificação azul junto a Configuração de back-end.
Configuração da interface
- Clique em Configuração do front-end. Na secção Novo IP e porta de front-end, faça o seguinte:
- Em Nome, introduza
fr-ilb-ipv6-only
. - Para processar o tráfego IPv6, faça o seguinte:
- Para a versão do IP, selecione IPv6. O servidor TCP IPv6 que vai criar na secção seguinte associa-se ao VIP da regra de encaminhamento.
- Para Sub-rede, selecione
lb-subnet-ipv6-only
. O intervalo de endereços IPv6 na regra de encaminhamento é sempre efémero. - Para Portas, selecione Múltiplas e, de seguida, no campo Número da porta, introduza
80
,8008
,8080
,8088
. - Clique em Concluído.
- Antes de continuar, verifique se existe uma marca de verificação azul junto a Configuração do frontend.
- Em Nome, introduza
Reveja a configuração
- Clique em Rever e finalizar. Verifique todas as suas definições.
- Se as definições estiverem corretas, clique em Criar. A criação do balanceador de carga de encaminhamento interno demora alguns minutos.
gcloud
Crie uma nova verificação de funcionamento de HTTP regional para testar a conetividade HTTP às VMs na porta 80.
gcloud beta compute health-checks create http hc-http-80 \ --region=us-west1 \ --port=80
Crie o serviço de back-end:
gcloud beta compute backend-services create ilb-ipv6-only \ --load-balancing-scheme=INTERNAL \ --protocol=tcp \ --region=us-west1 \ --health-checks=hc-http-80 \ --health-checks-region=us-west1
Adicione os dois grupos de instâncias ao serviço de back-end:
gcloud beta compute backend-services add-backend ilb-ipv6-only \ --region=us-west1 \ --instance-group=ig-a \ --instance-group-zone=us-west1-a
gcloud beta compute backend-services add-backend ilb-ipv6-only \ --region=us-west1 \ --instance-group=ig-c \ --instance-group-zone=us-west1-c
Crie a regra de encaminhamento IPv6 com um endereço IPv6 temporário.
gcloud beta compute forwarding-rules create fr-ilb-ipv6-only \ --region=us-west1 \ --load-balancing-scheme=INTERNAL \ --subnet=lb-subnet-ipv6-only \ --ip-protocol=TCP \ --ports=80,8008,8080,8088 \ --backend-service=ilb-ipv6-only \ --backend-service-region=us-west1 \ --ip-version=IPV6
O servidor TCP IPv6 que vai criar na secção seguinte associa-se ao VIP da regra de encaminhamento.
Instale um servidor TCP IPv6 nas VMs de back-end através de um script Bash de arranque
Neste exemplo, o script de arranque do Bash para VMs de back-end contém o seguinte:
- Comandos de rede para encaminhar todos os pacotes de saída originários de uma sub-rede através de um gateway e uma interface de rede especificados.
- Script do servidor Python (
server.py
), que é um servidor TCP IPv6, que ouve as ligações recebidas no VIP e na interface de rede especificados. Aceita ligações de clientes recebidas, envia uma resposta e, em seguida, fecha a ligação.
Tem de adicionar os seguintes detalhes no script Bash:
- Endereço do gateway
- Intervalo de sub-rede
- VIP da regra de encaminhamento
- Interface de rede
Pode identificar o endereço de gateway e o intervalo de sub-rede executando o comando ip -6 route show table all
na VM de back-end. Para saber mais acerca dos comandos usados no script Bash de arranque, consulte a secção Apêndice.
Para adicionar um script de arranque à instância de VM, faça o seguinte:
Consola
Na lista de instâncias de VM que criou anteriormente, clique na instância de VM que tem de atualizar.
Clique em Edit.
Na secção Metadados, introduza o seguinte guião no campo Guião de arranque.
#!/bin/bash # Replace these with your actual values. Run the 'ip -6 route show table all' command to find the correct values. GATEWAY_ADDRESS=fe80::57:2ff:fe36:ffbe SUBNET_RANGE=fd20:307:120c:2000::/64 # Add a custom default route to routing table 1. # The following command sends packets to the gateway using the network interface named 'ens4'. sudo ip route add default via $GATEWAY_ADDRESS dev ens4 table 1 # Add a source-based policy routing rule. # The following command adds a rule to route all outgoing packets originating # from a specified subnet. If the source address matches the subnet, # the system uses the default route defined in table 1 to forward the traffic. sudo ip -6 rule add from $SUBNET_RANGE table 1 # Allow the server to bind to a non-local IPv6 address--the VIP of the load balancer. sudo sysctl -w net.ipv6.ip_nonlocal_bind=1 # Overview: # This script sets up a simple IPv6 TCP server using Python's socket library. # The server binds to a specific network interface and listens on a specified Virtual IP (VIP) address and port (default: 80). # It accepts incoming client connections, sends a simple response ("Thank you for connecting"), and then closes the connection. # Key features: # - Uses IPv6 (AF_INET6) for networking. # - Binds to a specific network interface using SO_BINDTODEVICE. # - Handles multiple client connections in a loop. # - Demonstrates basic socket programming concepts like binding, listening, accepting, and sending data. # Note: Replace placeholders like 'FORWARDING_RULE_VIP' and 'ens4' with actual values for your setup. # Write the Python file locally. cat << 'EOF' > server.py # Import the socket library to work with network connections import socket import urllib.request # Fetch the VM hostname from Google Cloud metadata server def get_vm_hostname(): url = "http://metadata.google.internal/computeMetadata/v1/instance/name" req = urllib.request.Request(url, headers={"Metadata-Flavor": "Google"}) with urllib.request.urlopen(req) as response: return response.read().decode() vm_hostname = get_vm_hostname() # Create a socket object for IPv6 and TCP connections # AF_INET6 specifies IPv6, SOCK_STREAM specifies TCP server_socket = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) # Set the SO_REUSEADDR option to allow reusing the address # This is useful to avoid "address already in use" errors when restarting the server server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # Specify the network interface to bind the server to # Replace "ens4" with the name of your network interface interface_name = "ens4" # Get the index of the network interface interface_index = socket.if_nametoindex(interface_name) # Bind the socket to the specified network interface server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BINDTODEVICE, interface_name.encode()) # Bind the socket to an address and port # Replace 'FORWARDING_RULE_VIP' with the actual VIP (Virtual IP) address server_address = ('FORWARDING_RULE_VIP', 80, 0, 0) server_socket.bind(server_address) # Start listening for incoming connections # The argument '5' specifies the maximum number of queued connections server_socket.listen(5) # Print a message indicating that the server is ready to accept connections print(f"Server listening on {server_address}, bound to {interface_name}") # Serve incoming connections while True: client_socket, client_address = server_socket.accept() print(f"Accepted connection from {client_address}") # Generate response body body = f"Thank you for connecting to {vm_hostname}\n" # Construct a proper HTTP/1.1 response response = ( "HTTP/1.1 200 OK\r\n" f"Content-Length: {len(body)}\r\n" "Content-Type: text/plain\r\n" "Connection: close\r\n" "\r\n" f"{body}" ) # Send the response and close the connection client_socket.sendall(response.encode()) client_socket.close() EOF # Make the Python script executable chmod +x server.py # Run the server sudo python3 server.py
Clique em Guardar.
gcloud
Crie um script de arranque.
nano startup.sh
Adicione o seguinte script e guarde o ficheiro.
#!/bin/bash # Replace these with your actual values. Run the 'ip -6 route show table all' command to find the correct values. GATEWAY_ADDRESS=fe80::57:2ff:fe36:ffbe SUBNET_RANGE=fd20:307:120c:2000::/64 # Add a custom default route to routing table 1. # The following command sends packets to the gateway using the network interface named 'ens4'. sudo ip route add default via $GATEWAY_ADDRESS dev ens4 table 1 # Add a source-based policy routing rule. # The following command adds a rule to route all outgoing packets originating # from a specified subnet. If the source address matches the subnet, # the system uses the default route defined in table 1 to forward the traffic. sudo ip -6 rule add from $SUBNET_RANGE table 1 # Allow the server to bind to a non-local IPv6 address--the VIP of the load balancer. sudo sysctl -w net.ipv6.ip_nonlocal_bind=1 # Overview: # This script sets up a simple IPv6 TCP server using Python's socket library. # The server binds to a specific network interface and listens on a specified Virtual IP (VIP) address and port (default: 80). # It accepts incoming client connections, sends a simple response ("Thank you for connecting"), and then closes the connection. # Key features: # - Uses IPv6 (AF_INET6) for networking. # - Binds to a specific network interface using SO_BINDTODEVICE. # - Handles multiple client connections in a loop. # - Demonstrates basic socket programming concepts like binding, listening, accepting, and sending data. # Note: Replace placeholders like 'FORWARDING_RULE_VIP' and 'ens4' with actual values for your setup. # Write the Python file locally. cat << 'EOF' > server.py # Import the socket library to work with network connections import socket import urllib.request # Fetch the VM hostname from Google Cloud metadata server def get_vm_hostname(): url = "http://metadata.google.internal/computeMetadata/v1/instance/name" req = urllib.request.Request(url, headers={"Metadata-Flavor": "Google"}) with urllib.request.urlopen(req) as response: return response.read().decode() vm_hostname = get_vm_hostname() # Create a socket object for IPv6 and TCP connections # AF_INET6 specifies IPv6, SOCK_STREAM specifies TCP server_socket = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) # Set the SO_REUSEADDR option to allow reusing the address # This is useful to avoid "address already in use" errors when restarting the server server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # Specify the network interface to bind the server to # Replace "ens4" with the name of your network interface interface_name = "ens4" # Get the index of the network interface interface_index = socket.if_nametoindex(interface_name) # Bind the socket to the specified network interface server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BINDTODEVICE, interface_name.encode()) # Bind the socket to an address and port # Replace 'FORWARDING_RULE_VIP' with the actual VIP (Virtual IP) address server_address = ('FORWARDING_RULE_VIP', 80, 0, 0) server_socket.bind(server_address) # Start listening for incoming connections # The argument '5' specifies the maximum number of queued connections server_socket.listen(5) # Print a message indicating that the server is ready to accept connections print(f"Server listening on {server_address}, bound to {interface_name}") # Serve incoming connections while True: client_socket, client_address = server_socket.accept() print(f"Accepted connection from {client_address}") # Generate response body body = f"Thank you for connecting to {vm_hostname}\n" # Construct a proper HTTP/1.1 response response = ( "HTTP/1.1 200 OK\r\n" f"Content-Length: {len(body)}\r\n" "Content-Type: text/plain\r\n" "Connection: close\r\n" "\r\n" f"{body}" ) # Send the response and close the connection client_socket.sendall(response.encode()) client_socket.close() EOF # Make the Python script executable chmod +x server.py # Run the server sudo python3 server.py
Adicione o ficheiro de metadados à instância de VM.
gcloud compute instances add-metadata VM-NAME \ --metadata-from-file=startup-script=startup.sh
Teste o balanceador de carga
Para testar o balanceador de carga, crie uma VM cliente na mesma região que o balanceador de carga e, em seguida, envie tráfego do cliente para o balanceador de carga.
Crie uma VM de cliente
Este exemplo cria uma VM de cliente (vm-client
) na mesma região que as VMs de back-end (servidor). O cliente é usado para validar a configuração do equilibrador de carga
e demonstrar o comportamento esperado, conforme descrito na secção de
testes.
Consola
Na Google Cloud consola, aceda à página Instâncias de VM.
Clique em Criar instância.
Em Nome, introduza
vm-client
.Para Região, selecione
us-west1
.Para Zona, selecione
us-west1-a
.Clique em Opções avançadas.
Clique em Rede e configure os seguintes campos:
- Para etiquetas de rede, introduza
allow-ssh
. - Para Interfaces de rede, selecione o seguinte:
- Rede:
lb-network-ipv6-only
- Subnet:
lb-subnet-ipv6-only
- Tipo de pilha de IP: IPv6 (pilha única)
- Rede:
- Clique em Concluído.
- Para etiquetas de rede, introduza
Clique em Criar.
gcloud
A VM do cliente pode estar em qualquer zona na mesma região que o balanceador de carga e pode usar qualquer sub-rede nessa região. Neste exemplo, o cliente está na zona us-west1-a
e usa a mesma sub-rede que as VMs de back-end.
gcloud beta compute instances create vm-client \ --zone=us-west1-a \ --image-family=debian-12 \ --image-project=debian-cloud \ --stack-type=IPV6_ONLY \ --tags=allow-ssh \ --subnet=lb-subnet-ipv6-only
Teste a ligação
Este teste contacta o balanceador de carga a partir de uma VM cliente separada, ou seja, não a partir de uma VM de back-end do balanceador de carga. O comportamento esperado é que o tráfego seja distribuído entre as quatro VMs de back-end.
Estabeleça ligação à instância de VM do cliente através do SSH.
gcloud compute ssh vm-client --zone=us-west1-a
Descreva a regra de encaminhamento IPv6
fr-ilb-ipv6-only
. Tenha em atenção oIPV6_ADDRESS
na descrição.gcloud beta compute forwarding-rules describe fr-ilb-ipv6-only \ --region=us-west1
Em clientes com conetividade IPv6, execute o seguinte comando:
curl http://IPV6_ADDRESS:80
Por exemplo, se o endereço IPv6 atribuído for
[fd20:307:120c:2000:0:1:0:0/96]:80
, o comando deve ter o seguinte aspeto:curl http://[fd20:307:120c:2000:0:1:0:0]:80
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 Network Load Balancer de encaminhamento interno de exemplo para o tornar acessível 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
).
Para configurar o acesso global, faça as seguintes alterações de configuração.
Consola
Edite a regra de encaminhamento do balanceador de carga
Na Google Cloud consola, aceda à página Equilíbrio de carga.
Na coluna Nome, clique no seu Network Load Balancer de encaminhamento interno. O equilibrador de carga de exemplo tem o nome
be-ilb
.Clique em Configuração do front-end.
Clique em Editar
.Em Acesso global, selecione Ativar.
Clique em Concluído.
Clique em Atualizar.
Na página Detalhes do balanceador de carga, verifique se a configuração de front-end indica Regional (REGION
) com acesso global.
gcloud
Atualize a regra de encaminhamento do balanceador de carga de exemplo,
fr-ilb
, para incluir a flag--allow-global-access
.gcloud compute forwarding-rules update fr-ilb \ --region=us-west1 \ --allow-global-access
Pode usar o comando
forwarding-rules describe
para determinar se uma regra de encaminhamento tem o acesso global ativado. Por exemplo:gcloud compute forwarding-rules describe fr-ilb \ --region=us-west1 \ --format="get(name,region,allowGlobalAccess)"
A palavra
True
aparece no resultado, após o nome e a região da regra de encaminhamento, quando o acesso global está ativado.
API
Faça um pedido PATCH
ao
método forwardingRules/patch
.
PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules/fr-ilb { "allowGlobalAccess": true }
Crie um cliente de VM para testar o acesso global
Consola
Na Google Cloud consola, aceda à página Instâncias de VM.
Clique em Criar instância.
Defina o Nome como
vm-client2
.Defina a Região como
europe-west1
.Defina a Zona como
europe-west1-b
.Clique em Opções avançadas.
Clique em Rede e configure os seguintes campos:
- Para etiquetas de rede, introduza
allow-ssh
. - Para Interfaces de rede, selecione o seguinte:
- Rede:
lb-network
- Subnet:
europe-subnet
- Rede:
- Para etiquetas de rede, introduza
Clique em Criar.
gcloud
A VM do cliente pode estar em qualquer zona na mesma região que o balanceador de carga e pode usar qualquer sub-rede nessa região. Neste exemplo, o cliente está na zona europe-west1-b
e usa a mesma sub-rede que as VMs de back-end.
gcloud compute instances create vm-client2 \ --zone=europe-west1-b \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh \ --subnet=europe-subnet
API
Faça um pedido POST
ao
método instances.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/europe-west1-b/instances { "name": "vm-client2", "tags": { "items": [ "allow-ssh" ] }, "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/europe-west1-b/machineTypes/e2-standard-2", "canIpForward": false, "networkInterfaces": [ { "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/europe-west1/subnetworks/europe-subnet", "accessConfigs": [ { "type": "ONE_TO_ONE_NAT", "name": "external-nat", "networkTier": "PREMIUM" } ] } ], "disks": [ { "type": "PERSISTENT", "boot": true, "mode": "READ_WRITE", "autoDelete": true, "deviceName": "vm-client2", "initializeParams": { "sourceImage": "projects/debian-cloud/global/images/debian-image-name", "diskType": "projects/PROJECT_ID/zones/europe-west1-b/diskTypes/pd-standard", "diskSizeGb": "10" } } ], "scheduling": { "preemptible": false }, "deletionProtection": false }
Ligue-se ao cliente de VM e teste a conetividade
Para testar a conetividade, execute o seguinte comando:
gcloud compute ssh vm-client2 --zone=europe-west1-b
Teste a ligação ao balanceador de carga em todas as portas configuradas, tal como fez
a partir do vm-client
na região us-west1
. Teste a conetividade HTTP nas quatro portas configuradas na regra de encaminhamento:
curl http://10.1.2.99 curl http://10.1.2.99:8008 curl http://10.1.2.99:8080 curl http://10.1.2.99:8088
Configure grupos de instâncias geridas
A configuração de exemplo criou dois grupos de instâncias não geridos. Em alternativa, pode usar grupos de instâncias geridos, incluindo grupos de instâncias geridos zonais e regionais, como back-ends para equilibradores de carga de rede de encaminhamento interno.
Os grupos de instâncias geridas requerem que crie um modelo de instância. Este procedimento demonstra como substituir os dois grupos de instâncias não geridos zonais do exemplo por um único grupo de instâncias gerido regional. Um grupo de instâncias gerido regional cria automaticamente VMs em várias zonas da região, o que simplifica a distribuição do tráfego de produção entre zonas.
Os grupos de instâncias geridos também suportam o dimensionamento automático e a recuperação automática. Se usar o dimensionamento automático com equilibradores de carga de passagem interna de rede, não pode fazer o dimensionamento com base no equilíbrio de carga.
Este procedimento mostra como modificar o serviço de back-end para o exemplo de Network Load Balancer de encaminhamento interno, de modo que use um grupo de instâncias geridas regional.
Consola
Modelo de instância
Na Google Cloud consola, aceda à página Modelos de instâncias de VM.
Clique em Criar modelo de instância.
Defina o Nome como
template-vm-ilb
.Escolha um tipo de máquina.
Na secção Disco de arranque, certifique-se de que a opção Debian GNU/Linux 12 (bookworm) está selecionada para as opções do disco de arranque. Se necessário, clique em Alterar para alterar a imagem.
Clique em Opções avançadas.
Clique em Rede e configure os seguintes campos:
- Para Etiquetas de rede, introduza
allow-ssh
eallow-health-check
. - Para Interfaces de rede, selecione o seguinte:
- Rede:
lb-network
- Subnet:
lb-subnet
- Rede:
- Para Etiquetas de rede, introduza
Clique em Gestão e, de seguida, no campo Script de arranque, introduza o seguinte script:
#! /bin/bash if [ -f /etc/startup_script_completed ]; then exit 0 fi apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl file_ports="/etc/apache2/ports.conf" file_http_site="/etc/apache2/sites-available/000-default.conf" file_https_site="/etc/apache2/sites-available/default-ssl.conf" http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088" http_vh_prts="*:80 *:8008 *:8080 *:8088" https_listen_prts="Listen 443\nListen 8443" https_vh_prts="*:443 *:8443" 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 prt_conf="$(cat "$file_ports")" prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")" prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")" echo "$prt_conf" | tee "$file_ports" http_site_conf="$(cat "$file_http_site")" http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")" echo "$http_site_conf_2" | tee "$file_http_site" https_site_conf="$(cat "$file_https_site")" https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")" echo "$https_site_conf_2" | tee "$file_https_site" systemctl restart apache2 touch /etc/startup_script_completed
Clique em Criar.
Grupo de instâncias geridas
Na Google Cloud consola, aceda à página Grupos de instâncias.
Clique em Criar grupo de instâncias.
Defina o Nome como
ig-ilb
.Para Localização, escolha Várias zonas e defina a Região como
us-west1
.Defina o modelo de instância como
template-vm-ilb
.Opcional: configure o ajuste automático de escala. Não pode ajustar automaticamente a escala do grupo de instâncias com base na utilização do balanceamento de carga HTTP, porque o grupo de instâncias é um back-end para o balanceador de carga de rede de passagem interno.
Defina o Número mínimo de instâncias como
1
e o Número máximo de instâncias como6
.Opcional: configure a autorreparação. Se configurar a autorreparação, use a mesma verificação de estado usada pelo serviço de back-end para o Network Load Balancer de encaminhamento interno. Neste exemplo, use
hc-http-80
.Clique em Criar.
gcloud
Crie o modelo de instância. Opcionalmente, pode definir outros parâmetros, como o tipo de máquina, para o modelo de imagem usar.
gcloud compute instance-templates create template-vm-ilb \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh,allow-health-check \ --subnet=lb-subnet \ --region=us-west1 \ --network=lb-network \ --metadata=startup-script='#! /bin/bash if [ -f /etc/startup_script_completed ]; then exit 0 fi apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl file_ports="/etc/apache2/ports.conf" file_http_site="/etc/apache2/sites-available/000-default.conf" file_https_site="/etc/apache2/sites-available/default-ssl.conf" http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088" http_vh_prts="*:80 *:8008 *:8080 *:8088" https_listen_prts="Listen 443\nListen 8443" https_vh_prts="*:443 *:8443" 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 prt_conf="$(cat "$file_ports")" prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")" prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")" echo "$prt_conf" | tee "$file_ports" http_site_conf="$(cat "$file_http_site")" http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")" echo "$http_site_conf_2" | tee "$file_http_site" https_site_conf="$(cat "$file_https_site")" https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")" echo "$https_site_conf_2" | tee "$file_https_site" systemctl restart apache2 touch /etc/startup_script_completed'
Crie um grupo de instâncias geridas regional com o modelo:
gcloud compute instance-groups managed create ig-ilb \ --template=template-vm-ilb \ --region=us-west1 \ --size=6
Adicione o grupo de instâncias gerido regional como back-end ao serviço de back-end que já criou:
gcloud compute backend-services add-backend be-ilb \ --region=us-west1 \ --instance-group=ig-ilb \ --instance-group-region=us-west1
Desligue os dois grupos de instâncias não geridos (zonais) do serviço de back-end:
gcloud compute backend-services remove-backend be-ilb \ --region=us-west1 \ --instance-group=ig-a \ --instance-group-zone=us-west1-a gcloud compute backend-services remove-backend be-ilb \ --region=us-west1 \ --instance-group=ig-c \ --instance-group-zone=us-west1-c
Remova endereços IP externos de VMs de back-end
Quando criou as VMs de back-end, foi atribuído a cada uma um endereço IP externo efémero para poder transferir o Apache através de um script de arranque. Uma vez que as VMs de back-end só são usadas por um Network Load Balancer de encaminhamento direto interno, pode remover os respetivos endereços IP externos. A remoção de endereços IP externos impede que as VMs de back-end acedam diretamente à Internet.
Consola
Na Google Cloud consola, aceda à página Instâncias de VM.
Repita os passos seguintes para cada VM de back-end.
Clique no nome da VM de back-end, por exemplo,
vm-a1
.Clique em
Editar.Na secção Interfaces de rede, clique na rede.
Na lista IP externo, selecione Nenhum e clique em Concluído.
Clique em Guardar.
gcloud
Para procurar a zona de uma instância, por exemplo, se estiver a usar um grupo de instâncias gerido regional, execute o seguinte comando para cada instância para determinar a respetiva zona. Substitua
[SERVER-VM]
pelo nome da VM a procurar.gcloud compute instances list --filter="name=[SERVER-VM]"
Repita o passo seguinte para cada VM de back-end. Substitua
[SERVER-VM]
pelo nome da VM e substitua[ZONE]
pela zona da VM.gcloud compute instances delete-access-config [SERVER-VM] \ --zone=[ZONE] \ --access-config-name=external-nat
API
Faça um pedido POST
ao método instances.deleteAccessConfig
para cada VM de back-end, substituindo vm-a1
pelo nome da VM e substituindo us-west1-a
pela zona da VM.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a1/deleteAccessConfig?accessConfig=external-nat&networkInterface=None
Use um endereço IP interno reservado
Quando cria VMs de back-end e grupos de instâncias, a instância da VM usa um endereço IPv4 ou IPv6 interno efémero.
Os passos seguintes mostram como promover um endereço IPv4 ou IPv6 interno para um endereço IPv4 ou IPv6 interno estático e, em seguida, atualizar a instância de VM para usar o endereço IP interno estático:
- Promova um endereço IPv4 ou IPv6 interno efémero em utilização para um endereço estático.
- Alterar ou atribuir um endereço IPv6 interno a uma instância existente.
Em alternativa, os passos seguintes mostram como reservar um novo endereço IPv4 ou IPv6 interno estático e, em seguida, atualizar a instância de VM para usar o endereço IP interno estático:
Reserve um novo endereço IPv4 ou IPv6 interno estático.
Ao contrário da reserva de IPv4 interna, a reserva de IPv6 interna não suporta a reserva de um endereço IP específico da sub-rede. Em alternativa, é automaticamente atribuído um intervalo de endereços IPv6
/96
internos a partir do intervalo de endereços IPv6/64
internos da sub-rede.Alterar ou atribuir um endereço IPv6 interno a uma instância existente.
Para mais informações, consulte o artigo Como reservar um endereço IP interno estático.
Aceitar tráfego em todas as portas
A regra de encaminhamento do balanceador de carga, e não o respetivo serviço de back-end, determina a porta ou as portas nas quais o balanceador de carga aceita tráfego. Para informações sobre a finalidade de cada componente, consulte Componentes.
Quando criou a regra de encaminhamento deste exemplo de balanceador de carga, configurou as portas 80
, 8008
, 8080
e 8088
. O script de arranque que instala o Apache também o configura para aceitar ligações HTTPS nas portas 443
e 8443
.
Para suportar estas seis portas, pode configurar a regra de encaminhamento para aceitar tráfego em todas as portas. Com esta estratégia, também pode configurar a regra ou as regras de firewall que permitem ligações recebidas a VMs de back-end para que só permitam determinadas portas.
Este procedimento mostra como eliminar a regra de encaminhamento atual do equilibrador de carga e criar uma nova que aceite tráfego em todas as portas.
Para mais informações sobre quando usar esta configuração, consulte o artigo Balanceadores de carga de rede de passagem interna e regras de encaminhamento com um endereço IP comum.
Consola
Elimine a regra de encaminhamento e crie uma nova
Na Google Cloud consola, aceda à página Equilíbrio de carga.
Clique no balanceador de carga
be-ilb
e clique em Editar.Clique em Configuração do front-end.
Mantenha o ponteiro sobre a regra de encaminhamento
10.1.2.9
e clique em Eliminar.Clique em Adicionar IP e porta do front-end.
Na secção Novo IP e porta do front-end, introduza as seguintes informações e clique em Concluído:
- Nome:
fr-ilb
- Subnetwork:
lb-subnet
- IP interno:
ip-ilb
- Portas: todas.
- Nome:
Antes de continuar, verifique se existe uma marca de verificação azul junto a Configuração do frontend.
Clique em Rever e finalizar e reveja as definições de configuração do equilibrador de carga.
Clique em Criar.
gcloud
Elimine a regra de encaminhamento existente,
fr-ilb
.gcloud compute forwarding-rules delete fr-ilb \ --region=us-west1
Crie uma regra de encaminhamento de substituição com o mesmo nome, cuja configuração de porta use a palavra-chave
ALL
. Os outros parâmetros da regra de encaminhamento permanecem inalterados.gcloud compute forwarding-rules create fr-ilb \ --region=us-west1 \ --load-balancing-scheme=internal \ --network=lb-network \ --subnet=lb-subnet \ --address=10.1.2.99 \ --ip-protocol=TCP \ --ports=ALL \ --backend-service=be-ilb \ --backend-service-region=us-west1
API
Elimine a regra de encaminhamento fazendo um pedido DELETE
ao método forwardingRules.delete
.
DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules/fr-ilb
Crie a regra de encaminhamento fazendo um pedido POST
ao
método forwardingRules.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules { "name": "fr-ilb", "IPAddress": "10.1.2.99", "IPProtocol": "TCP", "allPorts": true, "loadBalancingScheme": "INTERNAL", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb", "networkTier": "PREMIUM" }
Teste o tráfego em todas as portas configuradas
Ligue-se à instância de VM do cliente e teste as ligações HTTP e HTTPS.
Estabeleça ligação à VM do cliente:
gcloud compute ssh vm-client --zone=us-west1-a
Teste a conetividade HTTP em todas as quatro portas:
curl http://10.1.2.99 curl http://10.1.2.99:8008 curl http://10.1.2.99:8080 curl http://10.1.2.99:8088
Teste a conetividade HTTPS nas portas
443
e8443
. A flag--insecure
é necessária porque cada servidor Apache na configuração de exemplo usa um certificado autoassinado.curl https://10.1.2.99 --insecure curl https://10.1.2.99:8443 --insecure
Observe que os pedidos HTTP (em todas as quatro portas) e os pedidos HTTPS (em ambas as portas) são distribuídos por todas as VMs de back-end.
Aceite tráfego em várias portas através de duas regras de encaminhamento
Quando criou a regra de encaminhamento deste exemplo de balanceador de carga, configurou as portas 80
, 8008
, 8080
e 8088
. O script de arranque que instala o Apache também o configura para aceitar ligações HTTPS nas portas 443
e 8443
.
Uma estratégia alternativa à configuração de uma única regra de encaminhamento para aceitar tráfego em todas as portas é criar várias regras de encaminhamento, cada uma a suportar cinco ou menos portas.
Este procedimento mostra como substituir a regra de encaminhamento do exemplo de equilibrador de carga por duas regras de encaminhamento, uma que processa o tráfego nas portas 80
, 8008
, 8080
e 8088
, e a outra que processa o tráfego nas portas 443
e 8443
.
Para mais informações sobre quando usar esta configuração, consulte o artigo Balanceadores de carga de rede de passagem interna e regras de encaminhamento com um endereço IP comum.
Consola
Na Google Cloud consola, aceda à página Regras de encaminhamento.
Na coluna Nome, clique em
fr-ilb
e, de seguida, em Eliminar.Na Google Cloud consola, aceda à página Equilíbrio de carga.
Na coluna Nome, clique em
be-ilb
.Clique em Edit.
Clique em Configuração do front-end.
Clique em Adicionar IP e porta do front-end.
Na secção Novo endereço IP e porta do front-end, faça o seguinte:
- Em Nome, introduza
fr-ilb-http
. - Para Sub-rede, selecione
lb-subnet
. - Para Finalidade do IP interno, selecione Partilhado.
- Na lista Endereço IP, selecione Criar endereço IP,
introduza as seguintes informações e clique em Reservar:
- Nome:
internal-10-1-2-99
- Endereço IP estático: Deixar-me escolher
- Endereço IP personalizado:
10.1.2.99
- Nome:
- Para Portas, selecione Múltiplas e, em seguida, em Números de portas,introduza
80
,8008
,8080
e8088
. - Clique em Concluído.
- Em Nome, introduza
Clique em Adicionar IP e porta do front-end.
Na secção Novo endereço IP e porta do front-end, faça o seguinte:
- Em Nome, introduza
fr-ilb-https
. - Para Sub-rede, selecione
lb-subnet
. - Para Finalidade do IP interno, selecione Partilhado.
- Na lista Endereço IP, selecione
internal-10-1-2-99
. - Para Portas, selecione Várias e, em seguida, em Números de portas, introduza
443
e8443
. - Clique em Concluído.
- Em Nome, introduza
Clique em Rever e finalizar e reveja as definições de configuração do equilibrador de carga.
Clique em Atualizar.
gcloud
Elimine a regra de encaminhamento existente,
fr-ilb
.gcloud compute forwarding-rules delete fr-ilb \ --region=us-west1
Crie um endereço IP interno estático (reservado) para
10.1.2.99
e defina a respetiva flag--purpose
comoSHARED_LOADBALANCER_VIP
. A flag--purpose
é necessária para que duas regras de encaminhamento interno possam usar o mesmo endereço IP interno.gcloud compute addresses create internal-10-1-2-99 \ --region=us-west1 \ --subnet=lb-subnet \ --addresses=10.1.2.99 \ --purpose=SHARED_LOADBALANCER_VIP
- Crie duas regras de encaminhamento de substituição com os seguintes parâmetros:
gcloud compute forwarding-rules create fr-ilb-http \ --region=us-west1 \ --load-balancing-scheme=internal \ --network=lb-network \ --subnet=lb-subnet \ --address=10.1.2.99 \ --ip-protocol=TCP \ --ports=80,8008,8080,8088 \ --backend-service=be-ilb \ --backend-service-region=us-west1
gcloud compute forwarding-rules create fr-ilb-https \ --region=us-west1 \ --load-balancing-scheme=internal \ --network=lb-network \ --subnet=lb-subnet \ --address=10.1.2.99 \ --ip-protocol=TCP \ --ports=443,8443 \ --backend-service=be-ilb \ --backend-service-region=us-west1
API
Elimine a regra de encaminhamento fazendo um pedido DELETE
ao método forwardingRules.delete
.
DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules/fr-ilb
Crie um endereço IP interno estático (reservado) para 10.1.2.99
e defina a respetiva finalidade como SHARED_LOADBALANCER_VIP
fazendo um pedido POST
ao
método addresses.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/addresses { "name": "internal-10-1-2-99", "address": "10.1.2.99", "prefixLength": 32, "addressType": INTERNAL, "purpose": SHARED_LOADBALANCER_VIP, "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet" }
Crie duas regras de encaminhamento fazendo dois pedidos POST
ao método forwardingRules.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules { "name": "fr-ilb-http", "IPAddress": "10.1.2.99", "IPProtocol": "TCP", "ports": [ "80", "8008", "8080", "8088" ], "loadBalancingScheme": "INTERNAL", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb", "networkTier": "PREMIUM" }
{ "name": "fr-ilb-https", "IPAddress": "10.1.2.99", "IPProtocol": "TCP", "ports": [ "443", "8443" ], "loadBalancingScheme": "INTERNAL", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb", "networkTier": "PREMIUM" }
Teste o tráfego em várias portas configuradas
Ligue-se à instância de VM do cliente e teste as ligações HTTP e HTTPS.
Estabeleça ligação à VM do cliente:
gcloud compute ssh vm-client --zone=us-west1-a
Teste a conetividade HTTP em todas as quatro portas:
curl http://10.1.2.99 curl http://10.1.2.99:8008 curl http://10.1.2.99:8080 curl http://10.1.2.99:8088
Teste a conetividade HTTPS nas portas
443
e8443
. A flag--insecure
é necessária porque cada servidor Apache na configuração de exemplo usa um certificado autoassinado.curl https://10.1.2.99 --insecure curl https://10.1.2.99:8443 --insecure
Observe que os pedidos HTTP (em todas as quatro portas) e os pedidos HTTPS (em ambas as portas) são distribuídos por todas as VMs de back-end.
Use a afinidade de sessão
A configuração de exemplo cria um serviço de back-end sem afinidade de sessão.
Este procedimento mostra como atualizar o serviço de back-end para o exemplo de Network Load Balancer de passagem interna, de modo que use a afinidade de sessão com base num hash criado a partir dos endereços IP do cliente e do endereço IP da regra de encaminhamento interno do balanceador de carga.
Para ver os tipos de afinidade de sessão suportados, consulte as opções de afinidade de sessão.
Consola
Na Google Cloud consola, aceda à página Equilíbrio de carga.
Clique em be-ilb (o nome do serviço de back-end que criou para este exemplo) e clique em Editar.
Na página Editar Network Load Balancer de encaminhamento interno, clique em Configuração do back-end.
Na lista Afinidade de sessão, selecione IP do cliente.
Clique em Atualizar.
gcloud
Use o seguinte comando gcloud
para atualizar o serviço de back-end be-ilb
,
especificando a afinidade da sessão do IP do cliente:
gcloud compute backend-services update be-ilb \ --region=us-west1 \ --session-affinity CLIENT_IP
API
Faça um pedido PATCH
ao
método regionBackendServices/patch
.
PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb { "sessionAffinity": "CLIENT_IP" }
Configure uma política de acompanhamento de ligações
Esta secção mostra-lhe como atualizar o serviço de back-end para alterar a política de acompanhamento de ligações predefinida do equilibrador de carga.
Uma política de acompanhamento de ligações inclui as seguintes definições:
- Modo de acompanhamento
- Persistência da ligação em back-ends não saudáveis
- Limite de tempo de inatividade
gcloud
Use o seguinte gcloud compute
backend-services
comando para atualizar a política de acompanhamento de ligações para o serviço de back-end:
gcloud compute backend-services update BACKEND_SERVICE \ --region=REGION \ --tracking-mode=TRACKING_MODE \ --connection-persistence-on-unhealthy-backends=CONNECTION_PERSISTENCE_BEHAVIOR \ --idle-timeout-sec=IDLE_TIMEOUT_VALUE
Substitua os marcadores de posição por valores válidos:
BACKEND_SERVICE
: o serviço de back-end que está a atualizarREGION
: a região do serviço de back-end que está a atualizarTRACKING_MODE
: o modo de acompanhamento de ligações a usar para pacotes recebidos; para ver a lista de valores suportados, consulte Modo de acompanhamentoCONNECTION_PERSISTENCE_BEHAVIOR
: o comportamento de persistência da ligação quando os back-ends não estão em bom estado; para ver a lista de valores suportados, consulte Persistência da ligação em back-ends não em bom estadoIDLE_TIMEOUT_VALUE
: o número de segundos durante os quais uma entrada da tabela de acompanhamento de ligações tem de ser mantida depois de o equilibrador de carga processar o último pacote que correspondeu à entrada
Use a afinidade zonal
Esta secção mostra como configurar um balanceador de carga de encaminhamento interno para ativar a afinidade zonal no serviço de back-end do balanceador de carga. Por predefinição, a afinidade zonal está desativada. Para mais informações, consulte o artigo Afinidade zonal para balanceadores de carga de rede de encaminhamento interno.
Use o seguinte comando para configurar a opção de afinidade zonal.
ZONAL_AFFINITY_STAY_WITHIN_ZONE
Para mais informações sobre o funcionamento desta opção, consulte Como funciona oZONAL_AFFINITY_STAY_WITHIN_ZONE
.gcloud beta compute backend-services update be-ilb \ --zonal-affinity-spillover=ZONAL_AFFINITY_STAY_WITHIN_ZONE \ --region=us-west1
Use o seguinte comando para configurar a afinidade zonal com a taxa de transbordo
0.0
predefinida.ZONAL_AFFINITY_SPILL_CROSS_ZONE
Para mais informações sobre o funcionamento desta opção, consulte as secções Como funcionamZONAL_AFFINITY_SPILL_CROSS_ZONE
a taxa de transbordo e o rácio de transbordo e Rácio de transbordo zero.gcloud beta compute backend-services update be-ilb \ --zonal-affinity-spillover=ZONAL_AFFINITY_SPILL_CROSS_ZONE \ --region=us-west1
Use o seguinte comando para configurar a
ZONAL_AFFINITY_SPILL_CROSS_ZONE
afinidade zonal com uma taxa de transbordo de 30%. Para mais informações sobre como esta opção funciona, consulte as secções Como funcionam osZONAL_AFFINITY_SPILL_CROSS_ZONE
e a taxa de transbordo e Taxa de transbordo diferente de zero.gcloud beta compute backend-services update be-ilb \ --zonal-affinity-spillover=ZONAL_AFFINITY_SPILL_CROSS_ZONE \ --zonal-affinity-spillover-ratio=0.3 \ --region=us-west1
Crie uma regra de encaminhamento noutra sub-rede
Este procedimento cria um segundo endereço IP e uma regra de encaminhamento numa sub-rede diferente para demonstrar que pode criar várias regras de encaminhamento para um balanceador de carga de rede de passagem interno. A região da regra de encaminhamento tem de corresponder à região do serviço de back-end.
Sujeitos às regras de firewall, os clientes em qualquer sub-rede na região podem contactar qualquer endereço IP do Network Load Balancer de encaminhamento interno.
Consola
Adicione a segunda sub-rede
Na Google Cloud consola, aceda à página Redes VPC.
Clique em Criar rede de VPC.
Clique em
lb-network
.Na secção Sub-redes, faça o seguinte:
- Clique em Adicionar sub-rede.
- Na secção Nova sub-rede, introduza as seguintes informações:
- Nome:
second-subnet
- Região:
us-west1
- Intervalo de endereços IP:
10.5.6.0/24
- Nome:
- Clique em Adicionar.
Adicione a segunda regra de encaminhamento
Na Google Cloud consola, aceda à página Equilíbrio de carga.
Clique no balanceador de carga
be-ilb
e clique em Editar.Clique em Configuração do front-end.
Clique em Adicionar IP e porta do front-end.
Na secção Novo IP e porta de front-end, defina os seguintes campos e clique em Concluído:
- Nome:
fr-ilb-2
- Versão do IP: IPv4
- Subnetwork:
second-subnet
- IP interno:
ip-ilb
- Portas:
80
e443
- Nome:
Antes de continuar, verifique se existe uma marca de verificação azul junto a Configuração do frontend.
Clique em Rever e finalizar e reveja as definições de configuração do equilibrador de carga.
Clique em Criar.
gcloud
Crie uma segunda sub-rede na rede
lb-network
na regiãous-west1
:gcloud compute networks subnets create second-subnet \ --network=lb-network \ --range=10.5.6.0/24 \ --region=us-west1
Crie uma segunda regra de encaminhamento para as portas 80 e 443. Os outros parâmetros desta regra, incluindo o endereço IP e o serviço de back-end, são iguais aos da regra de encaminhamento principal,
fr-ilb
.gcloud compute forwarding-rules create fr-ilb-2 \ --region=us-west1 \ --load-balancing-scheme=internal \ --network=lb-network \ --subnet=second-subnet \ --address=10.5.6.99 \ --ip-protocol=TCP \ --ports=80,443 \ --backend-service=be-ilb \ --backend-service-region=us-west1
API
Faça POST
pedidos ao
método subnetworks.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks { "name": "second-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "ipCidrRange": "10.5.6.0/24", "privateIpGoogleAccess": false }
Crie a regra de encaminhamento fazendo um pedido POST
ao
método forwardingRules.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules { "name": "fr-ilb-2", "IPAddress": "10.5.6.99", "IPProtocol": "TCP", "ports": [ "80", "443" ], "loadBalancingScheme": "INTERNAL", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb", "networkTier": "PREMIUM" }
Teste a nova regra de encaminhamento
Estabeleça ligação à instância de VM do cliente e teste as ligações HTTP e HTTPS aos endereços IP.
Estabeleça ligação à VM do cliente:
gcloud compute ssh vm-client --zone=us-west1-a
Teste a conetividade HTTP aos endereços IP:
curl http://10.1.2.99 curl http://10.5.6.99
Teste a conetividade HTTPS. A utilização de
--insecure
é necessária porque a configuração do servidor Apache na configuração de exemplo usa certificados autossinados.curl https://10.1.2.99 --insecure curl https://10.5.6.99 --insecure
Tenha em atenção que os pedidos são processados por todas as VMs de back-end, independentemente do protocolo (HTTP ou HTTPS) ou do endereço IP usado.
Use a subdivisão de back-end
A configuração de exemplo cria um serviço de back-end sem subconjuntos.
Este procedimento mostra como ativar a criação de subconjuntos no serviço de back-end para o exemplo de Network Load Balancer de passagem interna, de modo que a implementação possa ser dimensionada para um número maior de instâncias de back-end.
Só deve ativar a subdivisão se precisar de suportar mais de 250 VMs de back-end num único balanceador de carga.
Para mais informações sobre este exemplo de utilização, consulte o subconjunto de back-end.
gcloud
Use o seguinte comando gcloud
para atualizar o serviço de back-end be-ilb
, especificando a política de subconjuntos:
gcloud compute backend-services update be-ilb \ --subsetting-policy=CONSISTENT_HASH_SUBSETTING
API
Faça um pedido PATCH
ao
método regionBackendServices/patch
.
PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb { "subsetting": { "policy": CONSISTENT_HASH_SUBSETTING } }
Crie um balanceador de carga para o espelhamento de pacotes
O espelhamento de pacotes permite-lhe copiar e recolher dados de pacotes de instâncias específicas numa VPC. Os dados recolhidos podem ajudar a detetar ameaças de segurança e a monitorizar o desempenho das aplicações.
A replicação de pacotes requer um Network Load Balancer de passagem interno para equilibrar o tráfego para um grupo de instâncias de destinos de coletores. Para criar um Network Load Balancer de encaminhamento interno para a replicação de pacotes, siga estes passos.
Consola
Inicie a configuração
Na Google Cloud consola, aceda à página Equilíbrio de carga.
- Clique em Criar equilibrador de carga.
- Para Tipo de balanceador de carga, selecione Balanceador de carga de rede (TCP/UDP/SSL) e clique em Seguinte.
- Para Proxy ou passagem, selecione Passagem do balanceador de carga e clique em Seguinte.
- Para Público ou interno, selecione Interno e clique em Seguinte.
- Clique em Configurar.
Configuração básica
- Em Nome do balanceador de carga, introduza um nome.
- Para Região, selecione a região das instâncias de VM onde quer espelhar pacotes.
- Para Rede, selecione a rede onde quer duplicar pacotes.
- Clique em Configuração de back-end.
- Na secção Novo back-end, para Grupo de instâncias, selecione o grupo de instâncias para o qual encaminhar pacotes.
- Na lista Verificação de funcionamento, clique em Criar uma verificação de funcionamento e, de seguida,
introduza as seguintes informações:
- No campo Nome, introduza um nome para a verificação de estado.
- Na lista Protocolo, selecione HTTP.
- No campo Porta, introduza
80
.
- Clique em Criar.
- Clique em Configuração do front-end.
- Na secção Novo endereço IP e porta de front-end, faça o seguinte:
- Em Nome, introduza um nome.
- Para Subnetwork, selecione uma sub-rede na mesma região que as instâncias a duplicar.
- Para Portas, selecione Todas.
- Clique em Configurações avançadas e selecione a caixa de verificação Ativar este equilibrador de carga para a replicação de pacotes.
- Clique em Concluído.
- Clique em Criar.
gcloud
Crie uma nova verificação de funcionamento de HTTP regional para testar a conetividade HTTP a um grupo de instâncias na porta 80:
gcloud compute health-checks create http HEALTH_CHECK_NAME \ --region=REGION \ --port=80
Substitua o seguinte:
HEALTH_CHECK_NAME
: o nome da verificação de funcionamento.REGION
: a região das instâncias de VM para as quais quer duplicar pacotes.
Crie um serviço de back-end para o tráfego HTTP:
gcloud compute backend-services create COLLECTOR_BACKEND_SERVICE \ --region=REGION \ --health-checks-region=REGION \ --health-checks=HEALTH_CHECK_NAME \ --load-balancing-scheme=internal \ --protocol=tcp
Substitua o seguinte:
COLLECTOR_BACKEND_SERVICE
: o nome do serviço de back-end.REGION
: a região das instâncias de VM onde quer duplicar pacotes.HEALTH_CHECK_NAME
: o nome da verificação de funcionamento.
Adicione um grupo de instâncias ao serviço de back-end:
gcloud compute backend-services add-backend COLLECTOR_BACKEND_SERVICE \ --region=REGION \ --instance-group=INSTANCE_GROUP \ --instance-group-zone=ZONE
Substitua o seguinte:
COLLECTOR_BACKEND_SERVICE
: o nome do serviço de back-end.REGION
: a região do grupo de instâncias.INSTANCE_GROUP
: o nome do grupo de instâncias.ZONE
: a zona do grupo de instâncias.
Crie uma regra de encaminhamento para o serviço de back-end:
gcloud compute forwarding-rules create FORWARDING_RULE_NAME \ --region=REGION \ --network=NETWORK \ --subnet=SUBNET \ --backend-service=COLLECTOR_BACKEND_SERVICE \ --load-balancing-scheme=internal \ --ip-protocol=TCP \ --ports=all \ --is-mirroring-collector
Substitua o seguinte:
FORWARDING_RULE_NAME
: o nome da regra de encaminhamento.REGION
: a região da regra de encaminhamento.NETWORK
: a rede para a regra de encaminhamento.SUBNET
: uma sub-rede na região das VMs onde quer duplicar pacotes.COLLECTOR_BACKEND_SERVICE
: o serviço de back-end para este balanceador de carga.
O que se segue?
- Consulte a Vista geral do balanceador de carga de rede de encaminhamento interno para ver os princípios importantes.
- Consulte Conceitos de comutação por falha para equilibradores de carga de rede de passagem interna para ver informações importantes sobre a comutação por falha.
- Consulte o artigo Equilíbrio de carga interno e nomes DNS para ver as opções de nomes DNS disponíveis que o equilibrador de carga pode usar.
- Consulte o artigo Configurar a ativação pós-falha para balanceadores de carga de rede de encaminhamento direto internos para ver os passos de configuração e um exemplo de configuração de ativação pós-falha de um balanceador de carga de rede de encaminhamento direto interno.
- Consulte o artigo Registo e monitorização do balanceador de carga de rede de encaminhamento interno para ver informações sobre a configuração do registo e da monitorização de balanceadores de carga de rede de encaminhamento interno.
- Consulte o artigo Balanceadores de carga de rede de encaminhamento interno e redes ligadas para ver informações sobre o acesso a balanceadores de carga de rede de encaminhamento interno a partir de redes de pares ligadas à sua rede VPC.
- Consulte o artigo Resolva problemas com balanceadores de carga de rede de encaminhamento interno para ver informações sobre como resolver problemas com o seu balanceador de carga de rede de encaminhamento interno.
- Limpe a configuração do balanceador de carga.
Apêndice: introdução ao script Bash IPv6
Esta secção fornece uma breve descrição dos diferentes comandos de rede relacionados com o script de arranque do Bash usado para instalar um servidor TCP IPv6 nas VMs de back-end. Não tem de executar estes passos novamente. Estão apenas descritas aqui para fornecer contexto e ajudar na compreensão.
Mostrar todas as rotas IPv6.
ip -6 route show table all
O resultado é o seguinte:
fd20:307:120c:2000::/64 via fe80::57:2ff:fe36:ffbe dev ens4 proto ra metric 100 expires 62sec pref medium fe80::/64 dev ens4 proto kernel metric 256 pref medium default via fe80::57:2ff:fe36:ffbe dev ens4 proto ra metric 100 expires 62sec mtu 1460 pref medium local ::1 dev lo table local proto kernel metric 0 pref medium local fd20:307:120c:2000:0:b:: dev ens4 table local proto kernel metric 0 pref medium local fe80::56:24ff:feb1:59b3 dev ens4 table local proto kernel metric 0 pref medium multicast ff00::/8 dev ens4 table local proto kernel metric 256 pref medium
A partir do resultado do passo anterior, identifique o seguinte:
- Endereço IPv6 link-local (a começar por fe80::/10): no exemplo de saída, o endereço link-local é fe80::57:2ff:fe36:ffbe. Este endereço local de link é usado na rota predefinida definida na tabela de encaminhamento 1. Este trajeto predefinido é criado no passo 2.
- Sub-rede /64: esta sub-rede é referenciada na regra de encaminhamento baseada na origem no passo 3
Adicione uma rota predefinida personalizada na tabela de encaminhamento 1.
O comando seguinte envia pacotes para o gateway através da interface de rede denominada
ens4
.sudo ip route add default via GATEWAY_ADDRESS dev ens4 table 1
Depois de executar este comando, é adicionada uma rota predefinida a uma tabela de encaminhamento personalizada (tabela 1), que aponta para o gateway
fe80::57:2ff:fe36:ffbe
através da interface ens4.Se executar novamente o comando
ip -6 route show table all
, o resultado é o seguinte:default via fe80::57:2ff:fe36:ffbe dev ens4 table 1 metric 1024 pref medium fd20:307:120c:2000::/64 via fe80::57:2ff:fe36:ffbe dev ens4 proto ra metric 100 expires 89sec pref medium fe80::/64 dev ens4 proto kernel metric 256 pref medium default via fe80::57:2ff:fe36:ffbe dev ens4 proto ra metric 100 expires 89sec mtu 1460 pref medium local ::1 dev lo table local proto kernel metric 0 pref medium local fd20:307:120c:2000:0:1::/96 dev ens4 table local proto 66 metric 1024 pref medium local fd20:307:120c:2000:0:b:: dev ens4 table local proto kernel metric 0 pref medium local fe80::56:24ff:feb1:59b3 dev ens4 table local proto kernel metric 0 pref medium multicast ff00::/8 dev ens4 table local proto kernel metric 256 pref medium
Adicione uma regra de encaminhamento de políticas baseada na origem.
O comando seguinte adiciona uma regra para encaminhar todos os pacotes de saída originários de uma sub-rede especificada. Se o endereço de origem corresponder à sub-rede, o sistema usa o trajeto predefinido definido na tabela 1 para encaminhar o tráfego.
sudo ip -6 rule add from SUBNET_RANGE table 1
Para ver a lista de regras de encaminhamento de políticas, execute o seguinte comando.
ip -6 rule show
O resultado é o seguinte:
0: from all lookup local 32765: from fd20:307:120c:2000::/64 lookup 1 32766: from all lookup main
A linha com
from fd20:... lookup 1
é a regra que adicionou, que indica ao kernel para usar a tabela de encaminhamento 1 para o tráfego originário dessa sub-rede.Permita que o servidor se associe a um endereço IPv6 não local, ou seja, o VIP do equilibrador de carga.
sudo sysctl -w net.ipv6.ip_nonlocal_bind=1