En esta página se muestra cómo habilitar la afinidad de sesión en una revisión de un servicio de Cloud Run.
Cómo funciona la afinidad de sesión
De forma predeterminada, la afinidad de sesión no está habilitada, por lo que las solicitudes del mismo cliente pueden gestionarse mediante diferentes instancias, como se muestra a continuación:
Si habilitas la afinidad de sesión, Cloud Run dirigirá las solicitudes secuenciales de un cliente determinado a la misma instancia de revisión. Cloud Run usa una cookie de afinidad de sesión con un TTL de 30 días e inspecciona su valor para identificar varias solicitudes del mismo cliente y dirigir todas estas solicitudes a la misma instancia, tal como se muestra a continuación:
Comportamientos clave que debes tener en cuenta
Como se muestra en el diagrama anterior, si la afinidad de sesión está habilitada, un cliente llegará a la misma instancia. Sin embargo, ten en cuenta que la instancia puede recibir solicitudes de diferentes clientes. La afinidad de sesión no significa que la instancia esté dedicada únicamente a un cliente.
Debido al comportamiento de autoescalado de Cloud Run, la afinidad de sesión es una afinidad en la medida de lo posible. Si la instancia se termina por cualquier motivo o alcanza la concurrencia máxima de solicitudes o la utilización máxima de la CPU, se rompe la afinidad de sesión y las solicitudes posteriores se dirigen a otra instancia.
Aunque puede almacenar en caché los datos de sesión del cliente en la memoria de las instancias, no puede dar por hecho que un cliente siempre se volverá a conectar a la misma instancia, incluso cuando la afinidad de sesión esté habilitada.
La afinidad de sesión de Cloud Load Balancing y la afinidad de sesión de Cloud Run son dos implementaciones independientes de la afinidad de sesión. Puedes habilitar la afinidad de sesión de Cloud Run en un servicio de Cloud Run, aunque esté detrás de un balanceador de carga. Sin embargo, no debes habilitar la afinidad de sesión de Cloud Load Balancing en un grupo de puntos finales de red sin servidor, ya que no se admite.
Afinidad de sesión y división del tráfico
La afinidad de sesión se habilita o inhabilita a nivel de revisión. Si habilitas la afinidad de sesión en una revisión de Cloud Run y también usas la división del tráfico, la afinidad de sesión tendrá prioridad sobre la división del tráfico. En casos extremos, si un solo cliente que usa la afinidad de sesión es responsable de la gran mayoría de todas las solicitudes, todas esas solicitudes se pueden enrutar a una revisión determinada, independientemente de la configuración de división del tráfico.
Si habilitas la división del tráfico en revisiones en las que algunas tienen habilitada la afinidad de sesión y otras no, las solicitudes se irán transfiriendo gradualmente a las revisiones que tengan habilitada la afinidad de sesión, aunque no cambies explícitamente la configuración de la división del tráfico. Esto se debe a que cada solicitud que no tenga una cookie de afinidad de sesión adjunta está sujeta a una división aleatoria, en la que algunas se asignarán a una revisión con afinidad de sesión y, posteriormente, esas solicitudes se mantendrán con esa revisión concreta.
Al actualizar la configuración de división del tráfico de un servicio de Cloud Run, las solicitudes posteriores con cookies de afinidad de sesión adjuntas se pueden asignar a una revisión diferente. Cloud Run minimiza el número de clientes que se redirigen a una nueva revisión.
Por ejemplo, si un servicio dividía el tráfico en un 90 % y un 10%, y la división del tráfico se actualiza a un 80 % y un 20%, el 10% del tráfico se redirigirá a la revisión que ahora sirve el 20% del tráfico.
Definir la afinidad de sesión
Cualquier cambio en la configuración conlleva la creación de una nueva revisión. Las revisiones posteriores también recibirán automáticamente este ajuste de configuración, a menos que hagas cambios explícitos para modificarlo.
Puedes definir la afinidad de sesión mediante la consola, la línea de comandos de gcloud o un archivo .yaml cuando creas un servicio o desplegas una revisión: Google Cloud
Consola
En la Google Cloud consola, ve a Cloud Run:
Seleccione Servicios en el menú y haga clic en Implementar contenedor para configurar un nuevo servicio. Si vas a configurar un servicio que ya tienes, haz clic en él y, a continuación, en Editar y desplegar nueva revisión.
Si vas a configurar un servicio nuevo, rellena la página de configuración inicial del servicio y, a continuación, haz clic en Contenedores, volúmenes, redes y seguridad para desplegar la página de configuración del servicio.
Haz clic en la pestaña Redes.
- Haga clic en el cuadro de texto Afinidad de sesión.
Haz clic en Crear o en Implementar.
gcloud
Para especificar la afinidad de sesión, usa el siguiente comando:
gcloud run services update SERVICE --session-affinity
Sustituir
- SERVICE con el nombre del servicio que estás actualizando.
Para quitar la afinidad de sesión, usa el comando
gcloud run services update SERVICE --no-session-affinity
YAML
Si va a crear un servicio, puede saltarse este paso. Si va a actualizar un servicio, descargue su configuración YAML:
gcloud run services describe SERVICE --format export > service.yaml
Añade la anotación
run.googleapis.com/sessionAffinity:
:spec: template: metadata: annotations: run.googleapis.com/sessionAffinity: 'BOOL'
Sustituir
- "BOOL" con el valor "
true
" para definir la afinidad de sesión o "false
" para quitarla.
- "BOOL" con el valor "
Crea o actualiza el servicio con el siguiente comando:
gcloud run services replace service.yaml
Terraform
Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.
Añade lo siguiente a un recursogoogle_cloud_run_v2_service
en tu configuración de Terraform:resource "google_cloud_run_v2_service" "default" {
name = "cloudrun-service-aff"
location = "REGION"
deletion_protection = false
ingress = "INGRESS_TRAFFIC_ALL"
template {
containers {
image = "us-docker.pkg.dev/cloudrun/container/hello"
}
session_affinity = BOOL
}
}
Sustituye:
- REGION con la región Google Cloud . Por ejemplo,
europe-west1
. - BOOL con el valor
true
para definir la afinidad de sesión ofalse
para quitarla.
Ver la configuración de afinidad de sesión
Para ver la configuración de afinidad de sesión actual de tu servicio de Cloud Run, haz lo siguiente:
Consola
En la Google Cloud consola, ve a Cloud Run:
Haz clic en el servicio que te interese para abrir la página Detalles del servicio.
Haz clic en la pestaña Revisiones.
En el panel de detalles de la derecha, el ajuste de afinidad de sesión se encuentra en la pestaña Redes.
gcloud
Usa el siguiente comando:
gcloud run services describe SERVICE
Busca el ajuste de afinidad de sesión en la configuración devuelta.