Usa grupos de destino

El balanceo de cargas de red de TCP/UDP externo usa un grupo de destino para definir un grupo de instancias que reciben tráfico entrante. Cuando la regla de reenvío del balanceador de cargas dirige el tráfico a un grupo de destino, el balanceador de cargas elige una instancia del grupo de destino en función de un hash de la dirección IP de origen, el puerto de origen, la dirección IP de destino y el puerto de destino.

Si deseas que el grupo de destino contenga una sola máquina virtual (VM), considera usar la función de reenvío de protocolo en lugar del balanceo de cargas.

Propiedades del grupo de destino

Los grupos de destino funcionan con reglas de reenvío que controlan el tráfico de TCP y UDP. Debes crear un grupo de destino antes de poder usarlo con una regla de reenvío.

Los grupos de destino usan verificaciones de estado de HTTP heredadas.

Un grupo de destino se compone de las siguientes propiedades:

name
[Obligatorio] Es el nombre de este grupo de destino. El nombre tiene que ser único en este proyecto, y debe tener una extensión de entre 1 y 63 caracteres y coincidir con la expresión regular, [a-z]([-a-z0-9]*[a-z0-9])?, lo que significa que el primer carácter debe ser una letra minúscula y los siguientes deben ser un guion, una letra minúscula o un dígito, excepto el último carácter, que no puede ser un guion.
description
[Opcional] Es una descripción definida por el usuario de este grupo de destino.
region

[Obligatorio] La URL completa a la región en la que debe residir este grupo de destino. Debe ser la misma región donde se ubicarán las instancias deseadas. Por ejemplo:

"region" : "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]"
healthChecks[ ]

[Opcional] Es una lista opcional de verificaciones de estado para este grupo de destino. Solo se puede adjuntar una verificación de estado a un grupo de destino particular. Consulta Verificación de estado para obtener más información.

instances[ ]

[Obligatorio] Una lista de las URL de instancia que deben controlar el tráfico para este grupo de destino. Todas las instancias deben encontrarse en la misma región que el grupo de destino, pero las instancias pueden pertenecer a diferentes zonas dentro de una misma región. Por ejemplo:

"instances" : [
  "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE]",
  "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE-2]"
]
sessionAffinity

[Opcional] Controla el método utilizado para seleccionar una instancia de máquina virtual de backend. Solo puedes establecer este valor durante la creación del grupo de destino. Una vez establecido, no puedes modificar este valor. El método de hash selecciona un backend en función de un subconjunto de los siguientes 5 valores:

  • IP de origen/destino
  • Puerto de origen/destino
  • Protocolo de capa 4 (TCP, UDP)

Los hashes posibles son:

NONE (es decir, ningún hash especificado) (predeterminado)
Hash de 5 tuplas, que usa las IP de origen y de destino, los puertos de origen y de destino, y el protocolo. Cada nueva conexión puede terminar en cualquier instancia, pero todo el tráfico de una conexión determinada permanecerá en la misma instancia, si la instancia se mantiene en buen estado.
CLIENT_IP_PROTO
Hash de 3 tuplas, que usa las IP de origen y de destino, y el protocolo. Todas las conexiones de un cliente terminarán en la misma instancia, siempre que usen el mismo protocolo y que la instancia se mantenga en buen estado.
CLIENT_IP
Hash de 2 tuplas, que usa las IP de origen y destino. Todas las conexiones de un cliente terminarán en la misma instancia, independientemente del protocolo, siempre que la instancia se mantenga en buen estado.

El hash de 5 tuplas permite una buena distribución del tráfico a través de muchas máquinas virtuales. Sin embargo, una segunda sesión del mismo cliente puede llegar a una instancia diferente porque el puerto de origen puede cambiar. Si deseas que todas las sesiones del mismo cliente lleguen al mismo backend, siempre que el backend se mantenga en buen estado, puedes especificar las opciones CLIENT_IP_PROTO o CLIENT_IP.

En general, si seleccionas un método de 3 o 2 tuplas, se obtendrá una mejor afinidad de sesión que con el método predeterminado de 5 tuplas, pero es probable que el tráfico general no se distribuya de manera uniforme.

Paquetes UDP fragmentados: Si realizas balanceo de cargas en tráfico de UDP, que es probable que esté fragmentado, configura la afinidad de sesión en CLIENT_IP_PROTO o CLIENT_IP. No uses NONE (hash de 5 tuplas). Esto se debe a que los fragmentos de UDP, con excepción del primer fragmento, no llevan el número de puerto, y el balanceador de cargas puede descartar los fragmentos sin el puerto. Consulta Balanceo de cargas y paquetes UDP fragmentados para obtener más información.

backupPool

[Opcional] Una URL completamente calificada a otro recurso de grupo de destino. Un grupo alternativo es un grupo de destino al que hace referencia otro grupo de destino. También debes definir el valor de failoverRatio para usar esta característica. Si la proporción de máquinas virtuales en buen estado en el grupo de destino es inferior al valor de failoverRatio, el balanceador de cargas de red envía el tráfico al grupo alternativo. Solo puedes proporcionar un grupo alternativo por grupo de destino. El grupo alternativo debe estar en la misma región que el grupo de destino. Si la proporción de instancias en buen estado en el grupo de destino es inferior a la proporción de conmutación por error configurada, el balanceador de cargas de red usa las siguientes reglas para enrutar el tráfico:

  1. Si la proporción de instancias en buen estado respecto de las instancias totales en el grupo de destino es inferior a la proporción de conmutación por error, el tráfico se envía a instancias en buen estado en el grupo alternativo.
  2. Si la proporción de instancias en buen estado respecto del total de instancias en el grupo de destino es inferior a la proporción de conmutación por error, pero no hay instancias en buen estado restantes en el grupo alternativo, el tráfico se envía a las instancias en buen estado restantes en el grupo de destino.
  3. Si el grupo de destino no está vacío y ninguna de las instancias del grupo de destino y del grupo alternativo aprueba las verificaciones de estado, el tráfico se envía a todas las instancias del grupo de destino, como último recurso.
  4. Si el grupo de destino está vacío y ninguna de las instancias del grupo alternativo aprueba las verificaciones de estado, el tráfico se envía a todas las instancias del grupo alternativo, como último recurso.

Solo se admite un nivel de conmutación por error. Por ejemplo, si el grupo de destino A tiene el grupo alternativo B, y el grupo alternativo B tiene el grupo alternativo C, el tráfico previsto para el grupo de destino A solo puede dirigirse al grupo alternativo B y no al C.

failoverRatio

[Opcional] Un número de punto flotante entre 0.0 y 1.0, que determina cuándo este grupo de destino se declara en mal estado. Por ejemplo, si este valor se establece en .1, se declara que este grupo de destino está en mal estado si la cantidad de instancias en buen estado es inferior a .1 (10%). Si la proporción de conmutación por error es 0.0, al menos un backend debe estar en buen estado para que el grupo se considere en buen estado. Si la proporción de conmutación por error se establece en 1.0, todas las instancias deben estar en buen estado para que el grupo se considere en buen estado. Debes definir estos valores si defines el campo backupPool.

Condiciones de la conmutación por error

Condiciones Grupo al que van las nuevas conexiones
Proporción de conmutación por error !=0, VM en buen estado en el grupo de destino >= FR Grupo de destino
Proporción de conmutación por error = 0, VM en buen estado en el grupo de destino > 0 Grupo de destino
Proporción de conmutación por error = 0, VM en buen estado en el grupo de destino < FR, y al menos una VM en el grupo alternativo está en buen estado Grupo alternativo
Proporción de conmutación por error = 0, VM en buen estado en el grupo de destino = 0, y al menos una VM en el grupo alternativo está en buen estado Grupo alternativo
Al menos una VM está en el grupo de destino, todas las VM en el grupo de destino están en mal estado, y todas las VM del grupo alternativo están en mal estado Grupo de destino (último recurso)
No hay VM en el grupo de destino, y todas las VM en el grupo alternativo están en mal estado Grupo alternativo (último recurso)
No hay VM en el grupo de destino ni en el grupo alternativo El tráfico se interrumpe

Agrega un grupo de destino

Para agregar un grupo de destino mediante gcloud compute, usa el comando target-pools create:

gcloud compute target-pools create TARGET_POOL \
    [--backup-pool BACKUP_POOL] \
    [--description DESCRIPTION] \
    [--failover-ratio FAILOVER_RATIO] \
    [--http-health-check HEALTH_CHECK] \
    [--session-affinity SESSION_AFFINITY; default="NONE"]

Para crear un grupo de destino en la API, realiza una solicitud HTTP POST al siguiente URI:

https://www.googleapis.com/v1/compute/projects/[PROJECT_ID]/regions/[REGION]/targetPools

{
  "name": name,
  "instances": [
     "https://www.googleapis.com/v1/compute/project/[PROJECT_ID]/[ZONE]/[ZONE]/instances/[INSTANCE]",
     "https://www.googleapis.com/v1/compute/project/[PROJECT_ID]/[ZONE]/[ZONE]/instances/[INSTANCE-2]",
  ]
}

Agrega o quita una instancia de un grupo de destino

Para agregar instancias a un grupo de destino mediante gcloud compute, usa el comando target-pools add-instances:

gcloud compute target-pools add-instances TARGET_POOL \
    --instances INSTANCE,[INSTANCE,...]

Para quitar instancias, usa el comando target-pools remove-instances:

gcloud compute target-pools remove-instances TARGET_POOL \
    --instances INSTANCE,[INSTANCE,...]

En la API, envía una solicitud POST a los siguientes URI:

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/targetPools/[TARGET_POOL]/removeInstance
https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/targetPools/[TARGET_POOL]/addInstance

El cuerpo de tu solicitud debe incluir los URI completamente calificados de las instancias que deseas agregar o quitar:

{
 "instances": [
    {"instance": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE]"},
    {"instance": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE-2]"}
  ]
}

Con el fin de obtener más información, consulta la documentación de referencia de la API para los métodos targetPools.addInstance y targetPools.removeInstance.

Obtén una lista de los grupos de destino

Para obtener una lista de los grupos de destino existentes mediante gcloud compute, usa el comando target-pools list:

gcloud compute target-pools list

Para obtener resultados más detallados, usa el comando describe y especifica el nombre de un grupo.

En la API, envía una solicitud GET al siguiente URI:

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/targetPools

Describe un grupo de destino

Para obtener información sobre un solo grupo de destino mediante gcloud compute, usa el comando target-pools describe:

gcloud compute target-pools describe TARGET_POOL

En la API, envía una solicitud GET vacía al siguiente URI:

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/targetPools/[TARGET_POOL]

Obtén el estado de las instancias

Para comprobar el estado actual de una instancia en el grupo de destino o de todas las instancias del grupo de destino, puedes usar el comando gcloud compute target-pools get-health:

gcloud compute target-pools get-health TARGET_POOL \
    [--fields FIELDS [FIELDS ...]] \
    [--format FORMAT; default="yaml"] \
    [--limit LIMIT] \
    [--raw-links] \
    [--sort-by SORT_BY]

El comando muestra el estado según lo determinado por la verificación de estado configurada, que puede ser en buen estado o en mal estado.

En la API, realiza una solicitud HTTP POST al siguiente URI con la instancia especificada en el cuerpo de la solicitud:

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/targetPools/[TARGET_POOL]/getHealth

{
  "instance": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE]"
}

Borra un grupo de destino

Para borrar un grupo de destino, primero debes asegurarte de que ninguna regla de reenvío haga referencia al grupo de destino. Si una regla de reenvío hace referencia actualmente a un grupo de destino, debes borrar la regla de reenvío para quitar la referencia.

Para borrar un grupo de destino con gcloud compute, usa el comando target-pools delete:

gcloud compute target-pools delete TARGET_POOL

En la API, envía una solicitud DELETE vacía al siguiente URI:

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/targetPools/[TARGET_POOL]

Agrega o quita una verificación de estado de un grupo de destino

Los objetos de verificación de estado son recursos globales independientes que se pueden asociar con cualquier grupo de destino o desasociar de él.

Si un grupo de destino no tiene una verificación de estado asociada, el balanceador de cargas de red considerará que todas las instancias están en buen estado y enviará tráfico a todas las instancias del grupo. Sin embargo, si consultas el estado de un grupo de destino sin una verificación de estado, el estado será unhealthy, lo que indicará que el grupo de destino no tiene una verificación de estado. Recomendamos que tus grupos de destino tengan verificaciones de estado asociadas para que sea más fácil administrar tus instancias.

Ten en cuenta que el balanceo de cargas de red usa verificaciones de estado de HTTP heredadas para determinar el estado de las instancias en el grupo de destino. Un balanceador de cargas de red solo puede usar una verificación de estado de HTTP heredada, no una verificación de estado de HTTPS heredada.

Para agregar una verificación de estado a un grupo de destino con gcloud compute, usa el comando target-pools add-health-checks:

gcloud compute target-pools add-health-checks TARGET_POOL \
    --http-health-check HEALTH_CHECK

Para quitar una verificación de estado, usa el comando target-pools remove-health-checks:

gcloud compute target-pools remove-health-checks TARGET_POOL \
  --http-health-check HEALTH_CHECK

Para asociar o desasociar una verificación de estado mediante la API, realiza una solicitud HTTP POST a los URI correspondientes:

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/targetPools/[TARGET_POOL]/removeHealthCheck
https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/targetPools/[TARGET_POOL]/addHealthCheck

El cuerpo de tu solicitud debe contener la verificación de estado que deseas asociar o desasociar:

{
  "healthCheck": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/httpHealthChecks/HEALTH_CHECK"
}

Para obtener más información, consulta la documentación de referencia de la API de targetPools.addHealthCheck y targetPools.removeHealthCheck.

Agrega o quita un grupo de destino de copia de seguridad

Cuando creas un grupo de destino por primera vez, puedes optar por aplicar un grupo de destino de copia de seguridad que reciba tráfico si el grupo de destino no está en buen estado.

Si nunca configuraste un grupo de destino de copia de seguridad, también debes configurar verificaciones de estado para que todo funcione de manera correcta.

Para actualizar un recurso de grupo alternativo con gcloud compute, usa el comando target-pools set-backup:

gcloud compute target-pools set-backup TARGET_POOL \
    --backup-pool BACKUP_POOL \
    --failover-ratio FAILOVER_RATIO

Para realizar una solicitud de actualización o eliminación de un grupo alternativo mediante la API, envía una solicitud POST al siguiente URI:

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/targetPools/[TARGET_POOL]/setBackup?failoverRatio=FAILOVER

{
  "target": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/targetPools/BACKUP_POOL"
}

Si defines un objetivo vacío o no defines una proporción de conmutación por error, el comportamiento del grupo alternativo se inhabilitará para este grupo de destino.

Próximos pasos

  • Para obtener más información sobre los grupos de destino, consulta la documentación de referencia de la API de targetPools.setBackup.
  • Para obtener información sobre las reglas de reenvío, consulta Usa reglas de reenvío