Agrega un grupo de instancias a un balanceador de cargas


El balanceo de cargas de Google Cloud usa grupos de instancias administrados y no administrados para entregar tráfico. En función del tipo de balanceador de cargas que uses, puedes agregar grupos de instancias a un grupo de destino o servicio de backend. Para obtener más información sobre el balanceo de cargas, consulta Elige un balanceador de cargas.

Para obtener más información sobre los grupos de instancias, lee la documentación Descripción general de grupos de instancias.

Antes de empezar

  • Configura la autenticación si aún no lo hiciste. La autenticación es el proceso mediante el cual se verifica tu identidad para acceder a los servicios y las API de Google Cloud. Para ejecutar un código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine de la siguiente manera.

    Selecciona la pestaña sobre cómo planeas usar las muestras en esta página:

    Consola

    Cuando usas la consola de Google Cloud para acceder a los servicios y las APIs de Google Cloud, no necesitas configurar la autenticación.

    gcloud

    1. Instala Google Cloud CLI y, luego, inicializa la ejecución del siguiente comando:

      gcloud init
    2. Configura una región y una zona predeterminadas.

    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.

      Instala Google Cloud CLI y, luego, inicializa la ejecución del siguiente comando:

      gcloud init

Limitaciones

  • Si quieres usar el balanceo de cargas con un MIG regional, se aplican las siguientes limitaciones:
    • No puedes usar el modo de balanceo maxRate.
    • Si usas un esquema de balanceo de cargas de HTTP(S) con un MIG regional, debes elegir el modo de balanceo maxRatePerInstance o maxUtilization.

Agrega un grupo de instancias administrado a un servicio de backend

Un servicio de backend es necesario para crear la mayoría de los tipos de balanceadores de cargas.

Un servicio de backend puede contener varios backends. Un grupo de instancias es un tipo de backend. Las instancias en el grupo de instancias responden al tráfico del balanceador de cargas. El servicio de backend, a su vez, detecta las instancias que puede usar, la cantidad de tráfico que puede manejar y el tráfico que maneja en el momento. Además, el servicio de backend supervisa la verificación de estado y no envía conexiones nuevas a instancias en mal estado.

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

Console

  1. Ve a la página Balanceo de cargas en la consola de Google Cloud.

    Ir a la página Balanceo de cargas

  2. Haz clic en el nombre del servicio de backend al que quieres agregar el grupo de instancias administrado.
  3. Haz clic en Editar.
  4. Haz clic en +Agregar backend.
  5. Elige el grupo de instancias que deseas agregar.
  6. Edita cualquier configuración opcional que quieras cambiar.
  7. Guarda los cambios.

gcloud

Usa 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

Los parámetros adicionales son obligatorios según el modo del balanceo del grupo de instancias administrado. Para obtener más información, consulta el comando add-backend en el SDK.

REST

Para agregar un servicio de backend con la API de REST, consulta backendServices.

Agrega 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. El grupo de destino se usa en balanceadores de cargas de red, en los que el balanceador de cargas de red reenvía las solicitudes del usuario al grupo de destino conectado. Las instancias que forman parte de ese grupo de destino entregan estas solicitudes y muestran una respuesta. Puedes agregar un grupo de instancias administrado a un grupo de destino para que cuando se agreguen o quiten instancias del grupo de instancias, el grupo de destino también se actualice automáticamente con los cambios.

El grupo de destino debe existir antes de que puedas agregar un grupo de instancias administrado a uno de destino. Para obtener más información, consulta la documentación sobre Agrega un grupo de destino.

Sigue estas instrucciones para agregar un grupo de instancias administrado existente a un grupo de destino. Así se agregan todas las instancias de VM que forman parte del grupo de instancias administrado al grupo de destino.

Console

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

    Ir a la página Grupos de destino

  2. Haz clic en el grupo de destino en el que quieres agregar el grupo de instancias.
  3. Haz clic en el botón Editar.
  4. Desplázate hacia la sección Instancias de VM y haz clic en Elegir grupos de instancias.
  5. Elige un grupo de instancias en el menú desplegable.
  6. Guarda los cambios.

gcloud

Usa el comando set-target-pools:

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

Donde:

  • INSTANCE_GROUP es el nombre del grupo de instancias.
  • TARGET_POOL,.. es el nombre de uno o más grupos de destino en los que se agrega este grupo de instancias.

REST

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

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

Donde:

  • PROJECT_ID es el ID del proyecto de 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 para los grupos de destino en los que quieres agregar este grupo. Por ejemplo:

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

Asigna 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 un 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.

Los puertos con nombre que usa Cloud Load Balancing. Los balanceadores de cargas que funcionan como proxies se suscriben a un solo puerto con nombre en su configuración del servicio de backend. El nombre del puerto se traduce en un número de puerto según la asignación de puertos con nombre de cada backend del grupo de instancias.

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

Los puertos con nombre son metadatos simples que usan los balanceadores de cargas de proxy. Los puertos con nombre no controlan recursos de red o de firewall en Compute Engine.

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

Puedes asignar varios puertos para cada nombre de servicio. También puedes asignar varios nombres de servicio a cada puerto.

Ten en cuenta los siguientes puntos:

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

    Por ejemplo, http:80,http:8080 funciona, pero http:80,http:443 no funciona porque el puerto 80 no suele ser compatible con TLS.

Puedes definir varios puertos con nombre en un grupo de instancias. A modo de ejemplo, considera un servicio de backend que se suscribe al puerto con nombre http-port y que tiene dos grupos de instancias de backend:

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

Este servicio de backend envía tráfico al puerto 80 para las VM en instance-group-a y al puerto 79 para las VM en instance-group-b.

Cuando agregas el mismo grupo de instancias a varios servicios de backend (para varios balanceadores de cargas) y el grupo de instancias entrega puertos diferentes en cada balanceador de cargas, no agregues todos los números de puerto a un solo puerto con nombre. En su lugar, debes crear un puerto con nombre único y asignarlo a un conjunto de puertos que cada servicio de backend deba entregar.

Por ejemplo, supón que tienes tres aplicaciones, cada una con su propio balanceador de cargas. Cada aplicación tiene su propio número de puerto: 81 para app1, 82 para app2 y 83 para app3. Si suponemos que los tres servicios de backend usan un grupo de instancias común, asigna los puertos con nombre para este grupo de instancias como [app1:81, app2:82, app3:83].

Puertos con nombre y verificaciones de estado

Para que un puerto con nombre y con varios números de puerto en un servicio de backend funcione en un balanceador de cargas de aplicaciones externo o en un balanceador de cargas de aplicaciones interno, la verificación de estado debe tener la marca --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, debes usar Google Cloud CLI o la API.

Por ejemplo, supongamos que tienes una aplicación que balancea las cargas del tráfico en tres puertos diferentes (81, 82, 83) en el mismo servicio de backend con un solo grupo de instancias. Puedes asignar los puertos para estos grupos de instancias como [app:81, 82, 83]. La verificación de estado en esta situación debe tener la marca --use-serving-port.

Para obtener más información, consulta la documentación de verificación de estado del balanceo de cargas.

Puertos con nombre y reglas de firewall

Los puertos con nombre no crean ni modifican las reglas de firewall de Google Cloud. Para permitir el tráfico a las VM de backend, debes crear las reglas de firewall necesarias.

Puertos con nombre y servicios de backend

Además de la configuración del grupo de instancias, también debes configurar el servicio de backend. Por ejemplo, supongamos que configuraste 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, debes hacer referencia al puerto con nombre en la configuración del servicio de backend mediante el --port-name en el servicio de backend configurado como my-service-name:

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

Crea puertos con nombre

Consola

  1. En la consola de Google Cloud, ve a la página Grupos de instancias.

    Ir a Grupos de instancias

  2. Haz clic en el nombre del grupo de instancias en el que quieres especificar puertos con nombre. Se abrirá una página con las propiedades del grupo de instancias.
  3. Haz clic en Editar para modificar este grupo de instancias administrado.
  4. En la sección Asignación de puertos, haz clic en Agregar puerto e ingresa el nombre del puerto deseado y los números de puerto que quieres asociar con ese nombre. Si necesitas más entradas, haz clic en Agregar puerto de nuevo.
  5. Haz clic en Guardar para guardar los cambios y aplicar los puertos con nombre a las instancias del grupo de instancias administrado.

gcloud

Para los grupos de instancias administrados, configura uno o más puertos con nombre mediante el comando instance-groups managed set-named-ports. Para los grupos no administrados, usa 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 por cada servicio, crea 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, puedes asignar name1 a todos esos puertos. Además, puedes asignar dos nombres, name2 y name3, al puerto 8080. Por último, puedes asignar el puerto 9000 a name4, como se muestra 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

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

REST

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

Crea una solicitud a la API de instanceGroups e incluye el nombre del grupo de instancias. Para obtener el valor actual de fingerprint para el grupo de instancias, obtén información sobre un grupo específico. Incluye el valor de 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, puedes asignar name1 a todos esos puertos. Además, puedes asignar dos nombres, name2 y name3, al puerto 8080. Por último, puedes asignar el puerto 9000 a name4, como se muestra 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
      }
   ]
}

Si quieres asignar varios puertos a cada nombre de servicio, crea varias entradas para ese nombre de servicio. Por ejemplo, puedes asignar los puertos 10, 20 y 80 a name1. Además, asigna 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 obtener una lista de los puertos con nombre que ya están asignados a un grupo de instancias administrado, crea una solicitud GET que apunte al grupo:

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

Próximos pasos