Usa grupos de destino

El balanceo de cargas de red 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 tu 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 HTTP heredadas.

Un grupo de destino se compone de las siguientes propiedades:

name
[Obligatorio] El nombre de este grupo de destino. El nombre debe ser único en este proyecto, debe tener una longitud de 1 a 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 dígito, excepto el último carácter, que no puede ser un guion.
description
[Opcional] 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] 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 utiliza 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 destino, y el protocolo. Todas las conexiones de un cliente terminarán en la misma instancia, siempre que usen el mismo protocolo y 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 tuplas o 2 tuplas, esto proporcionará una mejor afinidad de sesión que 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 probablemente 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 distintos del primero no llevan el número de puerto, y el balanceador de cargas puede soltar los fragmentos sin el puerto. Consulta Balanceo de cargas y paquetes UDP fragmentados para obtener más información.

backupPool

[Opcional] Una URL completa a otro recurso de grupo de destino. Un grupo de copia de seguridad es un grupo de destino al que hace referencia otro grupo de destino. También debes definir failoverRatio para usar esta característica. Si la proporción de máquinas virtuales en buen estado en tu grupo de destino es inferior a failoverRatio, el balanceador de cargas de red envía tráfico a tu grupo de copia de seguridad. Solo puedes proporcionar un grupo de copia de seguridad por grupo de destino. El grupo de copia de seguridad debe estar en la misma región que el grupo de destino. Si la proporción de instancias en buen estado en tu grupo de destino cae por debajo de tu proporción de conmutación por error configurada, el balanceador de cargas de red usa las siguientes reglas para enrutar tu 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 de copia de seguridad.
  2. Si la proporción de instancias en buen estado respecto del total de instancias en el grupo de destino es menor que la proporción de conmutación por error, pero no hay instancias en buen estado restantes en el grupo de copia de seguridad, 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 todas las instancias del grupo de destino y del grupo de copia de seguridad fallan en sus verificaciones de estado, el tráfico se envía a todas las instancias del último grupo, como último recurso.
  4. Si el grupo de destino está vacío y todas las instancias del grupo de copia de seguridad fallan en sus verificaciones de estado, el tráfico se envía a todas las instancias del grupo de copia de seguridad, 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 está 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 de 0.0, entonces 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 esto si defines el campo backupPool.

Condiciones de conmutación por error

Condiciones Las nuevas conexiones van a
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 de copia de seguridad 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 de copia de seguridad 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 de copia de seguridad 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 de copia de seguridad están en mal estado grupo de copia de seguridad (último recurso)
No hay VM en el grupo de destino y no hay ninguna VM en el grupo de copia de seguridad. El tráfico se interrumpe

Agrega un grupo de destino

Para agregar un grupo de destino con 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 completos para 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.

Enumera grupos de destino

Para enumerar 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 un nombre de 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 con 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 tu 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, ya sea en buen estado o no.

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 o desasociar de cualquier grupo de destino.

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 de destino. Sin embargo, si consultas el estado de un grupo de destino sin una verificación de estado, el estado será unhealthy para 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 ayudarte a administrar tus instancias.

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 con 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 para 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 tu 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 de copia de seguridad mediante la API, envía una solicitud POST al siguiente URI:

POST https://www.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 destino vacío, o no defines una proporción de conmutación por error, el comportamiento del grupo de copia de seguridad se inhabilitará para este grupo de destino.

Qué sigue

  • 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