Añadir un grupo de instancias a un balanceador de carga


En esta página se describe cómo añadir un grupo de instancias gestionado (MIG) a un servicio de backend o a un grupo de destino de un balanceador de carga.

Un balanceador de carga distribuye el tráfico de los usuarios, lo que ayuda a reducir el riesgo de que tu aplicación tenga problemas de rendimiento. Cloud Load Balancing usa grupos de instancias, tanto gestionados como no gestionados, para servir tráfico. En función del tipo de balanceador de carga que utilices, puedes añadir grupos de instancias a un grupo de destino o a un servicio de backend.

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

Antes de empezar

  • Si aún no lo has hecho, configura la autenticación. La autenticación verifica tu identidad para acceder a Google Cloud servicios y APIs. Para ejecutar código o ejemplos 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. Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:

      gcloud init

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    2. Set a default region and zone.

    REST

    Para usar las muestras de la API REST de esta página en un entorno de desarrollo local, debes usar las credenciales que proporciones a la CLI de gcloud.

      Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:

      gcloud init

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    Para obtener más información, consulta el artículo Autenticarse para usar REST de la documentación sobre autenticación de Google Cloud .

Añadir un grupo de instancias gestionado a un servicio de backend

Se necesita 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. A su vez, el servicio de backend sabe qué instancias puede usar, cuánto tráfico pueden gestionar y cuánto tráfico están gestionando en ese momento. Además, el servicio de backend monitoriza las comprobaciones del estado y no envía nuevas conexiones a instancias en mal estado.

Sigue estas instrucciones para añadir un grupo de instancias gestionado a un servicio de backend.

Consola

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

    Ir a la página Balanceo de carga

  2. Haga clic en el nombre del servicio backend al que va a añadir el grupo de instancias gestionado.
  3. Haz clic en Editar.
  4. Haz clic en + Añadir backend.
  5. Selecciona el grupo de instancias que quieras añadir.
  6. Edita los ajustes opcionales 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

La compatibilidad con el modo de balanceo varía en función del tipo de balanceador de carga. Para ver la lista completa, consulta Modo de balanceo disponible para cada balanceador de carga.

Se necesitan parámetros adicionales en función del modo de balanceo del grupo de instancias gestionado. Para obtener más información, consulta el comando add-backend en el SDK.

REST

Para añadir un servicio de backend mediante la API REST, consulta backendServices.

Limitaciones

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

Añadir un grupo de instancias gestionado a un grupo de destino

Un pool de destino es un objeto que contiene una o varias instancias de máquina virtual. Los grupos de destino se usan en los balanceadores de carga de red de paso a través externos, donde el balanceador de carga reenvía las solicitudes de los usuarios al grupo de destino asociado. Las instancias que forman parte de ese grupo de destino atienden estas solicitudes y devuelven una respuesta. Puede añadir un grupo de instancias gestionado a un grupo de destino para que, cuando se añadan o se quiten instancias del grupo de instancias, el grupo de destino también se actualice automáticamente con los cambios.

Para poder añadir un grupo de instancias gestionado a un grupo de destino, este debe existir. Para obtener más información, consulta la documentación sobre cómo añadir un grupo de destino.

Para añadir un grupo de instancias gestionadas a un grupo de destino, sigue estas instrucciones. De esta forma, todas las instancias de VM que forman parte del grupo de instancias gestionado se añadirán al grupo de destino.

Consola

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

    Ir a la página Grupos de destino

  2. Haz clic en el grupo de destino al que quieras añadir el grupo de instancias.
  3. Haz clic en el botón Edit (Editar).
  4. Desplázate hacia abajo hasta la sección Instancias de VM y haz clic en Seleccionar grupos de instancias.
  5. Selecciona 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 varios grupos de destino a los que se añadirá este grupo de instancias.

REST

Llama al método setTargetPools para un MIG regional o un MIG de zona. 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 URIs de los grupos de destino a los que quieras añadir 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 gestionadas

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 una aplicación. El número de puerto representa el puerto en el que se ejecuta el servicio o la aplicación.

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

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

Los puertos con nombre son metadatos sencillos que usan los balanceadores de carga proxy. Los puertos con nombre no controlan los recursos de red ni de cortafuegos en Compute Engine.

Varios números de puerto para un puerto con nombre

Puede asignar varios puertos a 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 equilibra entre todos los puertos que tengan el mismo nombre.
  • 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 admitir TLS.

Puedes asignar varios puertos identificados a un grupo de instancias. Para ilustrarlo, consideremos un servicio de backend de ejemplo que se suscribe al puerto con nombre http-port y que tiene dos grupos de instancias de backend:

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

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

Si añades el mismo grupo de instancias a varios servicios de backend (para varios balanceadores de carga) y el grupo de instancias sirve diferentes puertos en cada balanceador de carga, no añadas todos los números de puerto a un único puerto con nombre. En su lugar, crea un puerto con nombre único y asígnalo a un conjunto de puertos que debe usar cada servicio de backend.

Por ejemplo, supongamos que tienes tres aplicaciones, cada una con su propio balanceador 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 de backend usan un grupo de instancias común, asigna los puertos con nombre de este grupo de instancias como [app1:81, app2:82, app3:83].

Puertos con nombre y comprobaciones del estado

Para que un puerto con nombre y varios números de puerto en un servicio de backend funcione en un balanceador de carga de aplicaciones externo o interno, la comprobación del 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 Google Cloud . Para definir --use-serving-port, debes usar Google Cloud CLI o la API.

Por ejemplo, supongamos que tiene una aplicación que balancea la carga del tráfico en tres puertos diferentes (81, 82 y 83) en el mismo servicio de backend con un solo grupo de instancias. Puedes asignar los puertos de este grupo de instancias como [app:81, 82, 83]. La comprobación del estado de este caso debe tener la marca --use-serving-port.

Para obtener más información, consulta la documentación sobre las comprobaciones del estado del balanceo de carga.

Puertos con nombre y reglas de cortafuegos

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

Puertos con nombre y servicios de backend

Además de configurar el grupo de instancias, también debes configurar el servicio de backend. Por ejemplo, supongamos que asignas el nombre my-service-name y el puerto 8888 a un puerto con nombre de un grupo de instancias:

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

A continuación, debes hacer referencia al puerto con nombre en la configuración del servicio de backend con el --port-name del servicio de backend definido como 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, ve a la página Grupos de instancias. Google Cloud

    Ir a Grupos de instancias

  2. Haz clic en el nombre del grupo de instancias en el que quieras especificar los 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 Añadir puerto e introduce el nombre del puerto y los números de puerto que quieras asociar a ese nombre. Si necesitas más entradas, vuelve a hacer clic en Añadir puerto.
  5. Haga clic en Guardar para guardar los cambios y aplicar los puertos con nombre a las instancias del grupo de instancias gestionado.

gcloud

En los grupos de instancias gestionados, define uno o varios puertos con nombre mediante el comando instance-groups managed set-named-ports. En el caso de los grupos sin gestionar, 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 a 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 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

Consulta las asignaciones de puertos con nombre de un grupo de instancias gestionado 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 instanceGroupManagers no ofrece el método de API setNamedPorts. En su lugar, usa la API instanceGroups para realizar esta tarea.

Crea una solicitud a la API instanceGroups e incluye el nombre del grupo de instancias. Obtén el valor fingerprint actual del grupo de instancias consultando información sobre un grupo específico. Incluya fingerprint y uno o varios 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, a la portabilidad 8080. Por último, 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, crea varias entradas para ese nombre de servicio. Por ejemplo, puedes asignar los puertos 10, 20 y 80 a name1. También debes asignar 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 gestionado, crea una solicitud GET que apunte al grupo:

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

Siguientes pasos