En esta página se explica cómo configurar el registro multiinquilino en clústeres de Google Kubernetes Engine (GKE).
Es habitual que varios equipos compartan un mismo clúster de GKE. Compartir un clúster ofrece varias ventajas, como facilitar la detección de servicios y simplificar la seguridad. Además, los administradores de clústeres tienen menos clústeres que mantener. Sin embargo, los equipos de aplicaciones individuales suelen tener su propio proyecto. Esta estructura, que tiene un clúster de GKE principal, pero espacios de nombres independientes para cada equipo de aplicaciones, se denomina multitenencia. El proyecto del equipo de la aplicación se llama inquilino.
Con Google Cloud, los administradores de clústeres de GKE pueden crear un sistema en el que los registros del clúster permanezcan en el proyecto principal de GKE y los registros de los inquilinos se distribuyan a los proyectos de los inquilinos. Para configurar los registros de esta forma, usa el enrutador de registros. El router de registros te permite controlar cómo fluyen los registros en tu Google Cloud proyecto Google Cloud y cómo se enrutan a los destinos admitidos.
Para crear registros específicos de un arrendatario, el administrador del clúster crea un receptor para dirigir las entradas de registro al proyecto de cada arrendatario. En cada proyecto de inquilino, los equipos pueden controlar cómo se almacenan y se usan los registros. Por ejemplo, pueden monitorizarlos configurando métricas y alertas basadas en registros.
Te recomendamos que los _Default
sinks de los proyectos principales de GKE incluyan un filtro de exclusión. El filtro de exclusión evita que los registros del cliente se ingieran tanto en el proyecto principal de GKE como en el proyecto del cliente.
Requisitos previos
- Familiarízate con los siguientes documentos sobre multitenencia y enrutamiento:
- Asegúrate de que tienes un proyecto de arrendatario y un proyecto principal.
Configurar el registro multicliente
Puedes configurar el registro multiempresa con la CLI de Google Cloud o con laGoogle Cloud consola.
gcloud
Para configurar el registro multicliente en clústeres de GKE, sigue estos pasos:
Define las siguientes variables de entorno:
export TENANT_NAMESPACE="TENANT_NAMESPACE" export MAIN_PROJECT="MAIN_PROJECT_ID" export TENANT_PROJECT="TENANT_PROJECT_ID"
Haz los cambios siguientes:
TENANT_NAMESPACE
: nombre del espacio de nombres del proyecto de inquilinoMAIN_PROJECT_ID
: el ID de proyecto de tu proyecto principalTENANT_PROJECT_ID
: el ID del proyecto de tu arrendatario
Crea un espacio de nombres en tu clúster multicliente:
kubectl create namespace $TENANT_NAMESPACE
Crea un sumidero de registro en el proyecto de GKE main:
gcloud logging sinks create gke-$TENANT_NAMESPACE-sink \ logging.googleapis.com/projects/$TENANT_PROJECT \ --project=$MAIN_PROJECT \ --log-filter=resource.labels.namespace_name="$TENANT_NAMESPACE" \ --description="Log sink to $TENANT_PROJECT for $TENANT_NAMESPACE namespace"
Este comando crea un sumidero de registros que envía todos los registros relacionados con el espacio de nombres
$TENANT_NAMESPACE
al proyecto de inquilino.Es posible que tengas que usar un
--log-filter
más restrictivo. Por ejemplo, si tu clúster y tu arrendatario tienen el mismo espacio de nombres, añade un filtro de clúster.Para obtener más información sobre estos campos, consulta la documentación de la API
gcloud logging sinks create
.Obtén la identidad de escritura del receptor del proyecto principal y asígnala a una variable de entorno.
export SERVICE_ACCOUNT=$(gcloud logging sinks describe gke-$TENANT_NAMESPACE-sink \ --project=$MAIN_PROJECT \ --format='value(writerIdentity)')
Asigna el rol Escritor de registros (
logging.bucketWriter
) a la cuenta de servicio que usa el sumidero. El siguiente comando concede al proyecto principal permisos para escribir registros en el proyecto de inquilino:gcloud projects add-iam-policy-binding $TENANT_PROJECT \ --member=$SERVICE_ACCOUNT --role='roles/logging.logWriter' \ --condition="expression=resource.name.endsWith(\"projects/$TENANT_PROJECT\"),title=Log writer for $TENANT_NAMESPACE,description=Grants Logs Writer role to service account $SERVICE_ACCOUNT used by gke-$TENANT_NAMESPACE-sink"
Para obtener más información sobre estos campos, consulta la documentación de la API
gcloud projects add-iam-policy-binding
.Si quieres, crea un filtro de exclusión para el sumidero que enrute los registros al segmento
_Default
del proyecto principal. Si no crea un filtro de exclusión en el_Default
, los registros enrutados aparecerán tanto en el_Default
del proyecto principal como en el del inquilino. Para crear un filtro de exclusión, siga estos pasos:gcloud logging sinks update _Default --project=$MAIN_PROJECT \ --add-exclusion="name=gke-$TENANT_NAMESPACE-default-exclusion,description=\"Exclusion filter on the _Default bucket for $TENANT_NAMESPACE\",filter=resource.labels.namespace_name=\"$TENANT_NAMESPACE\""
Para obtener más información sobre estos campos, consulta la documentación de la API
gcloud logging sinks update
.
Consola
Para implementar el registro multicliente en GKE, sigue estos pasos:
Crea el sumidero de registro en el proyecto principal:
- Usa el Google Cloud selector de proyectos de la consola para seleccionar el proyecto principal de GKE.
-
En la Google Cloud consola, ve a la página Enrutador de registros:
Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuya sección sea Registro.
- En la página Log Router (Enrutador de registros), haz clic en Create sink (Crear sumidero).
- Escribe un nombre y una descripción para el receptor y, a continuación, haz clic en Siguiente.
- En el menú Seleccionar servicio de receptor, selecciona Otro proyecto.
En el campo Sink destination (Destino de receptor), añade el siguiente destino:
logging.googleapis.com/projects/TENANT_PROJECT_ID
Sustituye
TENANT_PROJECT_ID
por el ID del proyecto de tu inquilino.Haz clic en Siguiente.
En Crear filtro de inclusión, añada el siguiente filtro:
resource.labels.namespace_name="TENANT_NAMESPACE"
Sustituye TENANT_NAMESPACE por el nombre del espacio de nombres del proyecto de tu arrendatario.
Puede que quieras un filtro de inclusión más restrictivo. Por ejemplo, si tu clúster y tu arrendatario tienen el mismo espacio de nombres, puedes añadir una cláusula para incluir solo las entradas de registro de un clúster específico.
Haz clic en Crear sumidero. El nuevo receptor aparecerá en la lista Receptores de Log Router.
Copia la identidad de escritura del receptor en el portapapeles:
- En la página Enrutador de registros, busca el sumidero de registros.
- En ese receptor, haz clic en Más y, a continuación, selecciona Ver detalles del receptor.
- En el panel Sink details (Detalles del receptor), busca el campo Writer identity (Identidad del escritor) y copia el valor en el portapapeles. Omitir
serviceAccount:
del valor copiado.
En el proyecto de inquilino, asigna el rol Escritor de registros (
roles/logging.logWriter
) a la cuenta de servicio que usa el sumidero del proyecto principal. El proyecto principal necesita este permiso para escribir registros en el proyecto de inquilino.-
En la Google Cloud consola, ve a la página Gestión de identidades y accesos:
Ve a Gestión de identidades y accesos.
Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuyo subtítulo sea IAM y administrador.
- Haz clic en Conceder acceso.
- En el campo Nuevos principales, añade la cuenta de servicio del receptor.
- En el menú desplegable Selecciona un rol, selecciona Logging y elige Escritor de registros.
- Haz clic en Guardar.
-
También puede crear un filtro de exclusión en el segmento
_Default
del proyecto principal para evitar que los registros que se enrutan a un proyecto de arrendatario se escriban en el segmento de registros_Default
del proyecto principal:-
En la Google Cloud consola, ve a la página Enrutador de registros:
Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuya sección sea Registro.
- Junto al contenedor
_Default
, haz clic en Más y selecciona Editar receptor. - En la sección Seleccionar los registros que se excluirán del sumidero, haga clic en Añadir exclusión.
- Añade un nombre de filtro.
En el cuadro Crear filtro de exclusión, añade lo siguiente:
resource.labels.namespace_name="TENANT_NAMESPACE"
Haz clic en Actualizar receptor.
-
Verificar los registros del arrendatario
Una vez que hayas empezado a usar cargas de trabajo que utilicen TENANT_NAMESPACE, puedes verificar que el proyecto de inquilino recibe registros específicos del inquilino:
- Selecciona el proyecto de arrendatario con el Google Cloud selector de proyectos de la consola.
-
En la Google Cloud consola, ve a la página Explorador de registros:
Ve al Explorador de registros.
Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuya sección sea Registro.
En el campo del editor de consultas, ejecuta la siguiente consulta:
resource.labels.namespace_name="TENANT_NAMESPACE"
En el panel Resultados de la consulta, deberías ver los registros específicos del arrendatario que se han enrutado desde el proyecto principal.
Usar registros de inquilinos
En los proyectos del cliente, cada equipo puede controlar cómo se enrutan, almacenan y analizan los registros. Una vez que los registros se hayan dirigido a los proyectos de inquilino, los equipos de aplicaciones podrán elegir si quieren dirigir sus registros a destinos admitidos, como los cubos de Logging, o a destinos de terceros mediante Pub/Sub. Para obtener información sobre el enrutamiento de entradas de registro, consulta Enrutar registros a destinos admitidos.
Los equipos de aplicaciones también pueden configurar alertas en función del contenido de los registros o de las métricas derivadas de los registros. Para obtener más información, consulta el artículo sobre cómo monitorizar los registros.
Limpieza
Puedes eliminar los objetos que hayas creado para el registro multiempresa mediante gcloud
o la consola Google Cloud .
gcloud
Para quitar los objetos que has creado para el registro multiempresa, sigue estos pasos:
Define variables para simplificar los siguientes comandos:
export TENANT_NAMESPACE="TENANT_NAMESPACE" export MAIN_PROJECT="MAIN_PROJECT_ID" export TENANT_PROJECT="TENANT_PROJECT_ID"
Haz los cambios siguientes:
TENANT_NAMESPACE
: nombre del espacio de nombres del proyecto de inquilinoMAIN-PROJECT-ID
: el ID de proyecto de tu proyecto principalTENANT-PROJECT-ID
: el ID del proyecto de tu arrendatario
Quita el rol Escritor de registros (
roles/logging.logWriter
) de la cuenta de servicio del proyecto de inquilino:export SERVICE_ACCOUNT=$(gcloud logging sinks describe gke-$TENANT_NAMESPACE-sink \ --project=$MAIN_PROJECT | \ --format='value(writerIdentity)' gcloud projects remove-iam-policy-binding $TENANT_PROJECT \ --member=$SERVICE_ACCOUNT \ --role='roles/logging.logWriter' \ --all
Elimina el receptor de registro:
gcloud logging sinks delete gke-$TENANT_NAMESPACE-sink \ --project=$MAIN_PROJECT
Elimina el espacio de nombres:
kubectl delete namespace $TENANT_NAMESPACE
Consola
En el proyecto de inquilino, quita el rol Escritor de registros (
roles/logging.logWriter
) de la cuenta de servicio:-
En la Google Cloud consola, ve a la página Gestión de identidades y accesos:
Ve a Gestión de identidades y accesos.
Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuyo subtítulo sea IAM y administrador.
- En la cuenta de servicio que quieras eliminar, haz clic en edit Editar principal.
- En el panel Editar acceso, haga clic en Eliminar rol junto al rol Escritor de registros y, a continuación, en Guardar.
-
En el proyecto principal, elimina el receptor de registro:
- Usa el selector de proyectos de la consola Google Cloud para seleccionar el proyecto de GKE del arrendatario.
-
En la Google Cloud consola, ve a la página Enrutador de registros:
Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuya sección sea Registro.
- En el receptor que quieras eliminar, haz clic en more_vert Más.
- Selecciona Eliminar receptor.
- En el panel de confirmación, haz clic en Eliminar.
Limitaciones
El registro multitenant tiene las siguientes limitaciones:
- La cuota del número de receptores de registro por proyecto es de 200. Si necesitas más de 200 inquilinos, solicita un aumento de la cuota abriendo un caso de asistencia.
Hay un límite de 50 filtros de exclusión por contenedor de registro. Si tienes previsto tener más de 50 inquilinos, debes revisar el enfoque del filtro de exclusión del segmento
_Default
. También puedes hacer lo siguiente:Crea un único filtro de exclusión que excluya todos los espacios de nombres que no sean del sistema o predeterminados con este comando:
gcloud logging sinks update _Default \ --project=$MAIN_PROJECT \ --add-exclusion="name=gke-all-tenant-default-exclusion,description=\"Exclusion filter on the _Default bucket for all tenants\",filter=resource.labels.namespace_name !~ \"kube\" AND resource.labels.namespace_name !~ \"system\ AND resource.labels.namespace_name != \"Default\""
Duplicar los registros entre el proyecto de cliente y el proyecto principal sin crear el filtro de exclusión.