Adicione um grupo de instâncias a um equilibrador de carga

Esta página descreve como adicionar um grupo de instâncias gerido (MIG) existente ao serviço de back-end ou ao conjunto de destino de um equilibrador de carga.

Um equilibrador de carga distribui o tráfego de utilizadores, o que ajuda a reduzir o risco de ter problemas de desempenho na sua aplicação. O Cloud Load Balancing usa grupos de instâncias, geridos e não geridos, para servir tráfego. Consoante o tipo de balanceador de carga que está a usar, pode adicionar grupos de instâncias a um grupo de destino ou a um serviço de back-end.

Para obter informações sobre como criar um tipo específico de balanceador de carga com um back-end do MIG, consulte a documentação do Cloud Load Balancing.

Antes de começar

  • Se ainda não o tiver feito, configure a autenticação. A autenticação valida a sua identidade para aceder a Trusted Cloud by S3NS serviços e APIs. Para executar código ou exemplos a partir de um ambiente de desenvolvimento local, pode autenticar-se no Compute Engine selecionando uma das seguintes opções:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Trusted Cloud console to access Trusted Cloud by S3NS services and APIs, you don't need to set up authentication.

    gcloud

    1. Instale a CLI Google Cloud e, em seguida, inicie sessão na CLI gcloud com a sua identidade federada. Depois de iniciar sessão, inicialize a CLI gcloud executando o seguinte comando:

      gcloud init
    2. Set a default region and zone.

    REST

    Para usar os exemplos da API REST nesta página num ambiente de desenvolvimento local, usa as credenciais que fornece à CLI gcloud.

      Instale a CLI Google Cloud e, em seguida, inicie sessão na CLI gcloud com a sua identidade federada. Depois de iniciar sessão, inicialize a CLI gcloud executando o seguinte comando:

      gcloud init

    Para mais informações, consulte o artigo Autenticar para usar REST na Trusted Cloud documentação de autenticação.

Adicione um grupo de instâncias gerido a um serviço de back-end

É necessário um serviço de back-end para criar a maioria dos tipos de balanceadores de carga.

Um serviço de back-end pode conter vários back-ends. Um grupo de instâncias é um tipo de back-end. As instâncias no grupo de instâncias respondem ao tráfego do balanceador de carga. Por sua vez, o serviço de back-end sabe que instâncias pode usar, o volume de tráfego que podem processar e o volume de tráfego que estão a processar atualmente. Além disso, o serviço de back-end monitoriza a verificação de estado e não envia novas ligações para instâncias não saudáveis.

Siga estas instruções para adicionar um grupo de instâncias gerido a um serviço de back-end.

Consola

  1. Aceda à página Balanceamento de carga na Trusted Cloud consola.

    Aceda à página Balanceamento de carga

  2. Clique no nome do serviço de back-end ao qual está a adicionar o grupo de instâncias gerido.
  3. Clique em Edit.
  4. Clique em +Adicionar back-end.
  5. Selecione o grupo de instâncias que quer adicionar.
  6. Edite as definições opcionais que quer alterar.
  7. Guarde as alterações.

gcloud

Use o comando add-backend:

    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
        --instance-group=INSTANCE_GROUP \
        [--instance-group-region=INSTANCE_GROUP_REGION | --instance-group-zone=INSTANCE_GROUP_ZONE] \
        --balancing-mode=BALANCING_MODE

O suporte do modo de equilíbrio difere consoante o tipo de equilibrador de carga. Para ver a lista completa, consulte o artigo Modo de equilíbrio disponível para cada equilibrador de carga.

São necessários parâmetros adicionais consoante o modo de equilíbrio do grupo de instâncias gerido. Para mais informações, consulte o comando add-backend no SDK.

REST

Para adicionar um serviço de back-end através da API REST, consulte backendServices.

Limitações

O equilíbrio de carga com um MIG regional não suporta a capacidade de destino no RATE e nos modos de equilíbrio UTILIZATION.max-rate Para saber mais acerca das diretrizes de utilização de cada equilibrador de carga, consulte o artigo Modos de equilíbrio e definições de capacidade alvo.

Adicione um grupo de instâncias gerido a um grupo de destino

Um conjunto de destino é um objeto que contém uma ou mais instâncias de máquinas virtuais. Um conjunto de destino é usado em equilibradores de carga de passagem externos, em que o equilibrador de carga encaminha os pedidos dos utilizadores para o conjunto de destino anexado. As instâncias que fazem parte desse grupo de destino publicam estes pedidos e devolvem uma resposta. Pode adicionar um grupo de instâncias gerido a um conjunto de destino para que, quando as instâncias são adicionadas ou removidas do grupo de instâncias, o conjunto de destino também seja atualizado automaticamente com as alterações.

Antes de poder adicionar um grupo de instâncias gerido a um grupo de destino, o grupo de destino tem de existir. Para mais informações, consulte a documentação sobre como adicionar um grupo de alvos.

Para adicionar um grupo de instâncias gerido existente a um conjunto de destino, siga estas instruções. Isto faz com que todas as instâncias de VM que fazem parte do grupo de instâncias gerido sejam adicionadas ao grupo de destino.

Consola

  1. Aceda à página Grupos de destino na Trusted Cloud consola.

    Aceda à página Grupos de alvos

  2. Clique no conjunto de destinos ao qual quer adicionar o grupo de instâncias.
  3. Clique no botão Editar.
  4. Desloque a página para baixo até à secção Instâncias de VM e clique em Selecionar grupos de instâncias.
  5. Selecione um grupo de instâncias no menu pendente.
  6. Guarde as alterações.

gcloud

Use o comando set-target-pools:

gcloud compute instance-groups managed set-target-pools INSTANCE_GROUP \
        --target-pools TARGET_POOL,..

where:

  • INSTANCE_GROUP é o nome do grupo de instâncias.
  • TARGET_POOL,.. é o nome de um ou mais conjuntos de destino aos quais adicionar este grupo de instâncias.

REST

Chame o método setTargetPools para um GIG regional ou um GIG zonal. Por exemplo:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/regionInstanceGroupManagers/INSTANCE_GROUP/setTargetPools

where:

  • PROJECT_ID é o ID do projeto para este pedido.
  • REGION é a região do grupo de instâncias.
  • INSTANCE_GROUP é o nome do grupo de instâncias.

O corpo do pedido deve conter uma lista de URIs dos conjuntos de destino aos quais quer adicionar este grupo. Por exemplo:

{
  "targetPools": [
    "regions/us-central1/targetPools/example-targetpool-1",
    "regions/us-central1/targetPools/example-targetpool-2"
  ]
}

Atribua portas com nome a grupos de instâncias geridas

As portas com nome são pares de chave-valor que representam o nome e o número de uma porta. O nome da porta representa o nome de um serviço ou de uma aplicação. O número da porta representa a porta em que o serviço ou a aplicação é executado.

As portas com nome são usadas pelo Cloud Load Balancing. Os balanceadores de carga que atuam como proxies subscrevem uma única porta com nome na respetiva configuração do serviço de back-end. O nome da porta é traduzido num número de porta com base no mapeamento da porta com nome do back-end de cada grupo de instâncias.

Por exemplo, um serviço de back-end pode subscrever uma porta denominada http-port. O grupo de instâncias de back-end pode ter uma porta denominada http-port:80. O grupo de instâncias de back-end indica ao balanceador de carga que envie tráfego para uma VM no grupo na porta 80 através de um protocolo (como TCP). O protocolo é definido no serviço de back-end do balanceador de carga.

As portas com nome são metadados simples usados pelos equilibradores de carga de proxy. As portas denominadas não controlam os recursos de rede nem de firewall no Compute Engine.

Vários números de porta para uma porta com nome

Pode atribuir várias portas a cada nome de serviço. Também pode atribuir vários nomes de serviços a cada porta.

Tenha em atenção os seguintes pontos:

  • O tráfego é equilibrado entre todas as portas com o mesmo nome de porta.
  • Um determinado serviço de back-end só pode encaminhar tráfego para uma porta nomeada de cada vez.
  • Se usar vários números de porta para uma porta com nome, as portas têm de ser todas para a mesma aplicação.

    Por exemplo, http:80,http:8080 funciona, mas http:80,http:443 não funciona porque a porta 80 geralmente não suporta TLS.

Pode atribuir várias portas com nome num grupo de instâncias. Para ilustrar, considere um serviço de back-end de exemplo que subscreve a porta com nome http-port e que tem dois grupos de instâncias de back-end:

  • instance-group-a com uma porta denominada http-port:80
  • instance-group-b com uma porta denominada http-port:79

Este serviço de back-end envia tráfego para a porta 80 para VMs em instance-group-a e para a porta 79 para VMs em instance-group-b.

Quando adiciona o mesmo grupo de instâncias a vários serviços de back-end (para vários balanceadores de carga) e o grupo de instâncias serve portas diferentes em cada balanceador de carga, não adicione todos os números de portas a uma única porta com nome. Em vez disso, crie uma porta com um nome único e mapeie-a para um conjunto de portas que cada serviço de back-end deve servir.

Por exemplo, suponhamos que tem três aplicações, cada uma com o seu próprio equilibrador de carga. Cada aplicação tem o seu próprio número de porta: 81 para app1, 82 para app2 e 83 para app3. Partindo do princípio de que todos os três serviços de back-end estão a usar um grupo de instâncias comum, atribua as portas com nome para este grupo de instâncias como [app1:81, app2:82, app3:83].

Portas com nome e verificações de funcionamento

Para que uma porta com nome e vários números de porta num serviço de back-end funcione num Application Load Balancer externo ou num Application Load Balancer interno, a verificação de estado tem de ter a flag --use-serving-port em vez de um número de porta específico. Esta opção não está disponível na Trusted Cloud consola. Para definir --use-serving-port, tem de usar a CLI Google Cloud ou a API.

Por exemplo, suponhamos que tem uma aplicação que equilibra a carga do tráfego em três portas diferentes (81, 82 e 83) no mesmo serviço de back-end com um único grupo de instâncias. Pode atribuir as portas para estes grupos de instâncias como [app:81, 82, 83]. A verificação de saúde neste cenário tem de ter a flag --use-serving-port.

Para mais informações, consulte a documentação de verificação de funcionamento do balanceamento de carga.

Portas com nome e regras de firewall

As portas com nome não criam nem modificam Trusted Cloud regras de firewall. Para permitir o tráfego para VMs de back-end, continua a ter de criar as regras de firewall necessárias.

Portas com nome e serviços de back-end

Além da configuração do grupo de instâncias, também tem de configurar o serviço de back-end. Por exemplo, suponhamos que define a porta com nome num grupo de instâncias com o nome my-service-name e a porta 8888:

gcloud compute instance-groups set-named-ports my-unmanaged-ig \
    --named-ports=my-service-name:8888

Em seguida, tem de consultar a porta com nome na configuração do serviço de back-end com o --port-name no serviço de back-end definido como my-service-name:

gcloud compute backend-services update my-backend-service \
    --port-name=my-service-name

Crie portas com nome

Consola

  1. Na Trusted Cloud consola, aceda à página Grupos de instâncias.

    Aceda a Grupos de instâncias

  2. Clique no nome do grupo de instâncias onde quer especificar portas denominadas. É aberta uma página com as propriedades do grupo de instâncias.
  3. Clique em Editar para modificar este grupo de instâncias gerido.
  4. Na secção Mapeamento de portas, clique em Adicionar porta e introduza o nome da porta pretendido e os números das portas que quer associar a esse nome. Se precisar de mais entradas, clique novamente em Adicionar porta.
  5. Clique em Guardar para guardar as alterações e aplicar as portas com nome às instâncias no grupo de instâncias gerido.

gcloud

Para grupos de instâncias geridos, defina uma ou mais portas com nome através do comando instance-groups managed set-named-ports. Para grupos não geridos, use o comando instance-groups set-named-ports.

gcloud compute instance-groups managed set-named-ports INSTANCE_GROUP \
      --named-ports PORT_NAME:PORT,PORT_NAME:PORT

Por exemplo:

gcloud compute instance-groups managed set-named-ports INSTANCE_GROUP \
      --named-ports name1:80,name2:8080

Para atribuir várias portas a cada nome de serviço ou vários nomes a cada serviço, crie mais do que uma entrada para cada nome ou porta. Por exemplo, se as portas 10, 20 e 80 forem para a mesma aplicação, pode atribuir name1 a todas essas portas. Além disso, pode atribuir dois nomes, name2 e name3, para fazer a portabilidade de 8080. Por fim, pode atribuir a porta 9000 a name4, como no exemplo seguinte:

gcloud compute instance-groups managed set-named-ports INSTANCE_GROUP \
      --named-ports name1:10,name1:20,name1:80,\
                    name2:8080,name3:8080,\
                    name4:9000

Verifique as atribuições de portas com nome para um grupo de instâncias gerido através do comando get-named-ports:

gcloud compute instance-groups managed get-named-ports INSTANCE_GROUP
NAME  PORT
name1 10
name1 20
name1 80
name2 8080
name3 8080
name4 9000

REST

A API instanceGroupManagers não oferece um método da API setNamedPorts. Em alternativa, use a API instanceGroups para realizar esta tarefa.

Construa um pedido para a API instanceGroups e inclua o nome do grupo de instâncias. Obtenha o valor fingerprint atual para o grupo de instâncias obtendo informações sobre um grupo específico. Inclua o fingerprint e um ou mais pares de valores namedPorts no corpo do pedido:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroups/INSTANCE_GROUP/setNamedPorts

{
  "fingerprint": "42WmSpB8rSM=",
  "namedPorts": [
    {
       "name": "PORT_NAME",
       "port": PORT_NUMBER
    },
    {
       "name": "PORT_NAME",
       "port": PORT_NUMBER
    }
  ]
 }
 

Por exemplo, se as portas 10, 20 e 80 forem para a mesma aplicação, pode atribuir name1 a todas essas portas. Além disso, pode atribuir dois nomes, name2 e name3, para fazer a portabilidade de 8080. Por fim, pode atribuir port 9000 a name4, como no exemplo seguinte:

POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instanceGroups/example-group/setNamedPorts

{
   "fingerprint": "42WmSpB8rSM=",
   "namedPorts": [
      {
       "name": "name1",
       "port": 8080
      },
      {
       "name": "name2",
       "port": 9000
      }
   ]
}

Para atribuir várias portas a cada nome de serviço, crie várias entradas para esse nome de serviço. Por exemplo, pode atribuir as portas 10, 20 e 80 a name1. Atribua também a porta 8080 a name2.

POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instanceGroups/example-group/setNamedPorts

{
   "fingerprint": "42WmSpB8rSM=",
   "namedPorts": [
      {
       "name": "name1",
       "port": 10
      },
      {
       "name": "name1",
       "port": 20
      }
      {
       "name": "name1",
       "port": 80
      }
      {
       "name": "name2",
       "port": 8080
      }
      {
       "name": "name3",
       "port": 80
      }
      {
       "name": "name4",
       "port": 8080
      }
   ]
}

Para listar as portas com nome já atribuídas a um grupo de instâncias gerido, crie um pedido GET que aponte para o grupo:

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/INSTANCE_GROUP

O que se segue?