Adicionar um grupo de instâncias a um balanceador de carga


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

Um balanceador de carga distribui o tráfego do usuário, o que ajuda a reduzir o risco de problemas de desempenho em seu aplicativo. O Cloud Load Balancing usa grupos de instâncias , gerenciados e não gerenciados, para atender o tráfego. Dependendo do tipo de balanceador de carga que você está usando, você pode adicionar grupos de instâncias a um pool de destino ou serviço de back-end.

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

Antes de começar

  • Se ainda não o fez, configure a autenticação. Autenticação é o processo pelo qual sua identidade é verificada para acesso a Google Cloud serviços e APIs. Para executar códigos ou amostras em um ambiente de desenvolvimento local, você pode se autenticar 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 Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    2. Set a default region and zone.
    3. REST

      Para usar as amostras da API REST nesta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para gcloud CLI.

        After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

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

Adicionar um grupo gerenciado de instâncias a um serviço de back-end

Um serviço de back-end é necessário 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 do grupo de instâncias respondem ao tráfego do balanceador de carga. O serviço de back-end, por sua vez, sabe quais instâncias pode usar, quanto tráfego elas podem manipular e quanto tráfego estão manipulando atualmente. Além disso, o serviço de back-end monitora a verificação de integridade e não envia novas conexões para instâncias não íntegras.

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

Console

  1. Acesse a página Balanceamento de carga no console do Google Cloud.

    Vá para a página Balanceamento de carga

  2. Clique no nome do serviço de back-end ao qual você está adicionando o grupo gerenciado de instâncias.
  3. Clique em Editar .
  4. Clique em +Adicionar back-end .
  5. Selecione o grupo de instâncias que você deseja adicionar.
  6. Edite quaisquer configurações opcionais que você deseja alterar.
  7. Salve suas 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 ao modo de balanceamento difere com base no tipo de balanceador de carga. Para obter a lista completa, consulte Modo de balanceamento disponível para cada balanceador de carga .

Parâmetros adicionais são necessários dependendo do modo de balanceamento do grupo gerenciado de instâncias. Para obter mais informações, consulte o comando add-backend no SDK.

DESCANSAR

Para adicionar um serviço de back-end usando a API REST, consulte backendServices .

Limitações

O balanceamento de carga com um MIG regional não suporta a capacidade alvo de max-rate nos modos de balanceamento RATE e UTILIZATION . Para saber mais sobre as diretrizes de uso de cada balanceador de carga, consulte Modos de balanceamento e configurações de capacidade alvo .

Adicionar um grupo gerenciado de instâncias a um pool de destino

Um pool de destino é um objeto que contém uma ou mais instâncias de máquinas virtuais. Um pool de destino é usado em Network Load Balancers de passagem externa , onde o balanceador de carga encaminha solicitações do usuário para o pool de destino anexado. As instâncias que fazem parte desse pool de destino atendem essas solicitações e retornam uma resposta. Você pode adicionar um grupo de instâncias gerenciadas a um pool de destino para que, quando instâncias forem adicionadas ou removidas do grupo de instâncias, o pool de destino também seja atualizado automaticamente com as alterações.

Antes de adicionar um grupo de instâncias gerenciadas a um pool de destino, o pool de destino deve existir. Para obter mais informações, consulte a documentação sobre Adicionar um pool de destino .

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

Console

  1. Acesse a página Target Pools no console do Google Cloud.

    Vá para a página Pools de destino

  2. Clique no pool de destino ao qual você deseja adicionar o grupo de instâncias.
  3. Clique no botão Editar .
  4. Role para baixo até a seção Instâncias de VM e clique em Selecionar grupos de instâncias .
  5. Selecione um grupo de instâncias no menu suspenso.
  6. Salve suas alterações.

gcloud

Use o comando set-target-pools :

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

onde:

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

DESCANSAR

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

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

onde:

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

O corpo da solicitação deve conter uma lista de URIs para os pools de destino aos quais você deseja adicionar esse grupo. Por exemplo:

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

Atribuir portas nomeadas a grupos de instâncias gerenciadas

Portas nomeadas são pares de valores-chave que representam o nome e o número de uma porta. O nome da porta representa o nome de um serviço ou aplicativo. O número da porta representa a porta em que o serviço ou aplicativo é executado.

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

Por exemplo, um serviço de back-end pode assinar uma porta chamada http-port . O grupo de instâncias de back-end pode ter uma porta chamada http-port:80 . O grupo de instâncias de back-end instrui o balanceador de carga a enviar tráfego para uma VM do grupo na porta 80 usando um protocolo (como TCP). O protocolo é definido no serviço de back-end do balanceador de carga.

Portas nomeadas são metadados simples usados ​​por balanceadores de carga de proxy . As portas nomeadas não controlam recursos de rede ou firewall no Compute Engine.

Vários números de porta para uma porta nomeada

Você pode atribuir várias portas para cada nome de serviço. Você também pode atribuir vários nomes de serviço para cada porta.

Tenha em mente 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 por vez.
  • Se você usar vários números de porta para uma porta nomeada, todas as portas deverão ser para o mesmo aplicativo.

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

Você pode atribuir várias portas nomeadas em um grupo de instâncias. Para ilustrar, considere um exemplo de serviço de back-end que assina a porta nomeada http-port e que possui dois grupos de instâncias de back-end:

  • instance-group-a com uma porta nomeada de http-port:80
  • instance-group-b com uma porta nomeada de 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 .

Ao adicionar 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 atender portas diferentes em cada balanceador de carga, não adicione todos os números de porta a uma única porta nomeada. Em vez disso, crie uma porta nomeada exclusiva e mapeie-a para um conjunto de portas que cada serviço de back-end deve servir.

Por exemplo, suponha que você tenha três aplicativos, cada um com seu próprio balanceador de carga. Cada aplicativo possui seu próprio número de porta: 81 para app1 , 82 para app2 e 83 para app3 . Supondo que todos os três serviços de back-end estejam usando um grupo de instâncias comum, atribua as portas nomeadas para esse grupo de instâncias como [app1:81, app2:82, app3:83] .

Portas nomeadas e verificações de integridade

Para que uma porta nomeada com vários números de porta em um serviço de back-end funcione em um Application Load Balancer externo ou em um Application Load Balancer interno, a verificação de integridade deve ter o sinalizador --use-serving-port em vez de um número de porta específico. Esta opção não está disponível no console do Google Cloud. Para definir --use-serving-port , você deve usar a Google Cloud CLI ou a API.

Por exemplo, suponha que você tenha um aplicativo que equilibra a carga do tráfego em três portas diferentes (81, 82, 83) no mesmo serviço de back-end com um único grupo de instâncias. Você pode atribuir as portas para esses grupos de instâncias como [app:81, 82, 83] . A verificação de integridade neste cenário deve ter o sinalizador --use-serving-port .

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

Portas nomeadas e regras de firewall

Portas nomeadas não criam ou modificam Google Cloud regras de firewall . Para permitir o tráfego para VMs de back-end, você ainda deve criar as regras de firewall necessárias.

Portas nomeadas e serviços de back-end

Além da configuração do grupo de instâncias, você também deve configurar o serviço de back-end. Por exemplo, suponha que você defina a porta nomeada em um 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, você deve consultar a porta nomeada na configuração do serviço de back-end com --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 nomeadas

Console

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

    Vá para grupos de instâncias

  2. Clique no nome do grupo de instâncias onde você deseja especificar portas nomeadas. Uma página é aberta com as propriedades do grupo de instâncias.
  3. Clique em Editar para modificar este grupo de instâncias gerenciadas.
  4. Na seção Mapeamento de portas , clique em Adicionar porta e insira o nome da porta desejada e os números das portas que deseja associar a esse nome. Se precisar de mais entradas, clique em Adicionar porta novamente.
  5. Clique em Salvar para salvar suas alterações e aplicar as portas nomeadas às instâncias do grupo de instâncias gerenciadas.

gcloud

Para grupos de instâncias gerenciadas, defina uma ou mais portas nomeadas usando o comando instance-groups managed set-named-ports . Para grupos não gerenciados, 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 diversas portas a cada nome de serviço ou vários nomes para cada serviço, crie mais de uma entrada para cada nome ou porta. Por exemplo, se as portas 10 , 20 e 80 forem para o mesmo aplicativo, você poderá atribuir name1 a todas essas portas. Além disso, você pode atribuir dois nomes, name2 e name3 à porta 8080 . Finalmente, você pode atribuir a porta 9000 a name4 , como no exemplo a seguir:

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 nomeadas para um grupo de instâncias gerenciadas usando o 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

DESCANSAR

A API instanceGroupManagers não oferece um método de API setNamedPorts . Em vez disso, use a API instanceGroups para executar esta tarefa.

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

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 o mesmo aplicativo, você poderá atribuir name1 a todas essas portas. Além disso, você pode atribuir dois nomes, name2 e name3 à porta 8080 . Finalmente, você pode atribuir a porta 9000 a name4 , como no exemplo a seguir:

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 diversas portas a cada nome de serviço, crie diversas entradas para esse nome de serviço. Por exemplo, você 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 nomeadas que já estão atribuídas a um grupo de instâncias gerenciadas, crie uma solicitação GET que aponte para o grupo:

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

O que vem a seguir