Agregar un grupo de instancias a un balanceador de carga


Esta página describe cómo agregar un grupo de instancias administrado (MIG) existente al servicio backend o grupo de destino de un balanceador de carga.

Un equilibrador de carga distribuye el tráfico de usuarios, lo que ayuda a reducir el riesgo de experimentar problemas de rendimiento en su aplicación. Cloud Load Balancing utiliza grupos de instancias , tanto administrados como no administrados, para atender el tráfico. Dependiendo del tipo de balanceador de carga que esté utilizando, puede agregar grupos de instancias a un grupo de destino o servicio backend.

Para obtener información sobre cómo crear un tipo específico de balanceador de carga con un backend MIG, consulte la documentación de Cloud Load Balancing .

Antes de comenzar

  • Si aún no lo has hecho, configura la autenticación. La autenticación es el proceso mediante el cual se verifica su identidad para acceder a Google Cloud servicios y API. Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:

    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 las muestras de la API de REST en esta página en un entorno de desarrollo local, debes usar las credenciales que proporcionas a la CLI de gcloud.

        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 obtener más información, consulta Autentica para usar REST en la documentación de autenticación de Google Cloud .

Agregar un grupo de instancias administrado a un servicio backend

Es necesario un servicio de backend para crear la mayoría de los tipos de balanceadores de carga.

Un servicio de backend puede contener varios backends. Un grupo de instancias es un tipo de backend. Las instancias del grupo de instancias responden al tráfico del balanceador de carga. El servicio backend, a su vez, sabe qué instancias puede utilizar, cuánto tráfico pueden manejar y cuánto tráfico están manejando actualmente. Además, el servicio backend monitorea la verificación del estado y no envía nuevas conexiones a instancias en mal estado.

Utilice estas instrucciones para agregar un grupo de instancias administrado a un servicio backend.

Consola

  1. Vaya a la página Equilibrio de carga en la consola de Google Cloud.

    Vaya a la página de equilibrio de carga

  2. Haga clic en el nombre del servicio backend al que está agregando el grupo de instancias administrado.
  3. Haga clic en Editar .
  4. Haga clic en +Agregar backend .
  5. Seleccione el grupo de instancias que desea agregar.
  6. Edite cualquier configuración opcional que desee cambiar.
  7. Guarde sus cambios.

nube de gcloud

Utilice el 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

La compatibilidad con el modo de equilibrio difiere según el tipo de equilibrador de carga. Para obtener la lista completa, consulte Modo de equilibrio disponible para cada equilibrador de carga .

Se requieren parámetros adicionales según el modo de equilibrio del grupo de instancias administrado. Para obtener más información, consulte el comando add-backend en el SDK.

DESCANSAR

Para agregar un servicio backend usando la API REST, consulte backendServices .

Limitaciones

El equilibrio de carga con un MIG regional no admite la capacidad objetivo de max-rate en los modos de equilibrio RATE y UTILIZATION . Para obtener más información sobre las pautas de uso de cada balanceador de carga, consulte Modos de equilibrio y configuración de capacidad de destino .

Agregar un grupo de instancias administrado a un grupo de destino

Un grupo de destino es un objeto que contiene una o más instancias de máquinas virtuales. Un grupo de destino se utiliza en Network Load Balancers de paso externo , donde el balanceador de carga reenvía las solicitudes de los usuarios al grupo de destino adjunto. Las instancias que forman parte de ese grupo de destino atienden estas solicitudes y devuelven una respuesta. Puede agregar un grupo de instancias administrado a un grupo de destino para que cuando se agreguen o eliminen instancias del grupo de instancias, el grupo de destino también se actualice automáticamente con los cambios.

Antes de poder agregar un grupo de instancias administrado a un grupo de destino, el grupo de destino debe existir. Para obtener más información, consulte la documentación para Agregar un grupo de destino .

Para agregar un grupo de instancias administrado existente a un grupo de destino, siga estas instrucciones. Esto hace que todas las instancias de VM que forman parte del grupo de instancias administrado se agreguen al grupo de destino.

Consola

  1. Vaya a la página Grupos de destino en la consola de Google Cloud.

    Vaya a la página Grupos de destino

  2. Haga clic en el grupo de destino al que desea agregar el grupo de instancias.
  3. Haga clic en el botón Editar .
  4. Desplácese hacia abajo hasta la sección Instancias de VM y haga clic en Seleccionar grupos de instancias .
  5. Seleccione un grupo de instancias en el menú desplegable.
  6. Guarde sus cambios.

nube de gcloud

Utilice el comando set-target-pools :

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

dónde:

  • INSTANCE_GROUP es el nombre del grupo de instancias.
  • TARGET_POOL,.. es el nombre de uno o más grupos de destino al que agregar este grupo de instancias.

DESCANSAR

Llame al método setTargetPools para un MIG regional o MIG zonal . Por ejemplo:

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

dónde:

  • PROJECT_ID es el ID del proyecto para esta solicitud.
  • REGION es la región del grupo de instancias.
  • INSTANCE_GROUP es el nombre del grupo de instancias.

El cuerpo de la solicitud debe contener una lista de URI de los grupos de destino a los que desea agregar este grupo. Por ejemplo:

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

Asignar puertos con nombre a grupos de instancias administrados

Los puertos con nombre son pares clave-valor que representan el nombre y el número de un puerto. El nombre del puerto representa el nombre de un servicio o aplicación. El número de puerto representa el puerto en el que se ejecuta el servicio o la aplicación.

Cloud Load Balancing utiliza los puertos con nombre. Los balanceadores de carga que actúan como servidores proxy se suscriben a un único puerto con nombre en su configuración de servicio backend. El nombre del puerto se traduce a un número de puerto según la asignación del puerto nombrado de cada backend del grupo de instancias.

Por ejemplo, un servicio backend puede suscribirse a un puerto denominado http-port . El grupo de instancias backend puede tener un puerto llamado http-port:80 . El grupo de instancias backend indica al balanceador de carga que envíe tráfico a una VM en el grupo en el puerto 80 mediante un protocolo (como TCP). El protocolo se define en el servicio backend del balanceador de carga.

Los puertos con nombre son metadatos simples utilizados por los balanceadores de carga de proxy . Los puertos con nombre no controlan los recursos de red o firewall en Compute Engine.

Múltiples números de puerto para un puerto con nombre

Puede asignar varios puertos para cada nombre de servicio. También puede asignar varios nombres de servicios para cada puerto.

Tenga en cuenta los siguientes puntos:

  • El tráfico se equilibra entre todos los puertos con el mismo nombre de puerto.
  • Un servicio backend determinado solo puede reenviar tráfico a un puerto designado a la vez.
  • Si utiliza varios números de puerto para un puerto con nombre, todos los puertos deben ser para la misma aplicación.

    Por ejemplo, http:80,http:8080 funciona, pero http:80,http:443 no funciona porque el puerto 80 generalmente no admite TLS.

Puedes asignar varios puertos con nombre en un grupo de instancias. A modo de ilustración, considere un servicio de backend de ejemplo que se suscribe al puerto denominado http-port y que tiene dos grupos de instancias de backend:

  • instance-group-a con un puerto con nombre http-port:80
  • instance-group-b con un puerto con nombre http-port:79

Este servicio de backend envía tráfico al puerto 80 para las máquinas virtuales del instance-group-a y al puerto 79 para las máquinas virtuales del instance-group-b .

Cuando agregas el mismo grupo de instancias a múltiples servicios backend (para múltiples balanceadores de carga) y el grupo de instancias atiende diferentes puertos en cada balanceador de carga, no agregues todos los números de puerto a un único puerto con nombre. En su lugar, cree un puerto con nombre único y asígnelo a un conjunto de puertos que cada servicio backend debería servir.

Por ejemplo, supongamos que tiene tres aplicaciones, cada una con su propio equilibrador de carga. Cada aplicación tiene su propio número de puerto: 81 para app1 , 82 para app2 y 83 para app3 . Suponiendo que los tres servicios backend utilizan un grupo de instancias común, asigne los puertos con nombre para este grupo de instancias como [app1:81, app2:82, app3:83] .

Puertos nombrados y controles de salud

Para que un puerto con nombre con varios números de puerto en un servicio backend funcione en un balanceador de carga de aplicaciones externo o en un balanceador de carga de aplicaciones interno, la verificación de estado debe tener el indicador --use-serving-port en lugar de un número de puerto específico. Esta opción no está disponible en la consola de Google Cloud. Para configurar --use-serving-port , debe utilizar la CLI o la API de Google Cloud.

Por ejemplo, suponga que tiene una aplicación que equilibra la carga del tráfico en tres puertos diferentes (81, 82, 83) en el mismo servicio backend con un único grupo de instancias. Puede asignar los puertos para estos grupos de instancias como [app:81, 82, 83] . La verificación de estado en este escenario debe tener el indicador --use-serving-port .

Para obtener más información, consulte la documentación de verificación del estado del equilibrio de carga .

Puertos con nombre y reglas de firewall

Los puertos con nombre no crean ni modifican Google Cloud reglas del cortafuegos . Para permitir el tráfico hacia las máquinas virtuales de backend, aún debe crear las reglas de firewall necesarias.

Puertos con nombre y servicios backend

Además de la configuración del grupo de instancias, también debes configurar el servicio backend. Por ejemplo, supongamos que configuras el puerto con nombre en un grupo de instancias con el nombre my-service-name y el puerto 8888 :

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

Luego debe hacer referencia al puerto nombrado en la configuración del servicio backend con --port-name en el servicio backend establecido en my-service-name :

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

Crear puertos con nombre

Consola

  1. En la consola de Google Cloud, vaya a la página de grupos de instancias .

    Ir a grupos de instancias

  2. Haga clic en el nombre del grupo de instancias donde desea especificar puertos con nombre. Se abre una página con las propiedades del grupo de instancias.
  3. Haga clic en Editar para modificar este grupo de instancias administrado.
  4. En la sección Asignación de puertos , haga clic en Agregar puerto e ingrese el nombre del puerto deseado y los números de puerto que desea asociar con ese nombre. Si necesita más entradas, haga clic en Agregar puerto nuevamente.
  5. Haga clic en Guardar para guardar los cambios y aplicar los puertos nombrados a las instancias del grupo de instancias administrado.

nube de gcloud

Para grupos de instancias administrados, configure uno o más puertos con nombre mediante el comando instance-groups managed set-named-ports . Para grupos no administrados, use el 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 ejemplo:

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

Para asignar varios puertos a cada nombre de servicio o varios nombres para cada servicio, cree más de una entrada para cada nombre o puerto. Por ejemplo, si los puertos 10 , 20 y 80 son para la misma aplicación, puede asignar name1 a todos esos puertos. Además, puede asignar dos nombres, name2 y name3 al puerto 8080 . Finalmente, puedes asignar el puerto 9000 a name4 , como en el siguiente ejemplo:

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 las asignaciones de puertos con nombre para un grupo de instancias administrado usando el 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

La API instanceGroupManagers no ofrece un método API setNamedPorts . En su lugar, utilice la API instanceGroups para realizar esta tarea.

Cree una solicitud a la API instanceGroups e incluya el nombre del grupo de instancias. Obtenga el valor de fingerprint actual para el grupo de instancias obteniendo información sobre un grupo específico . Incluya la fingerprint y uno o más pares de valores namedPorts en el cuerpo de la solicitud:

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 ejemplo, si los puertos 10 , 20 y 80 son para la misma aplicación, puede asignar name1 a todos esos puertos. Además, puede asignar dos nombres, name2 y name3 al puerto 8080 . Finalmente, puedes asignar el puerto 9000 a name4 , como en el siguiente ejemplo:

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 asignar varios puertos a cada nombre de servicio, cree varias entradas para ese nombre de servicio. Por ejemplo, puede asignar los puertos 10 , 20 y 80 a name1 . También asigne el puerto 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 enumerar los puertos con nombre que ya están asignados a un grupo de instancias administrado, cree una solicitud GET que apunte al grupo:

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

¿Qué sigue?