Configura el registro de varios usuarios


En esta página, se explica cómo configurar el registro multiusuario para clústeres de Google Kubernetes Engine (GKE).

Es común que varios equipos compartan un solo clúster de GKE. Compartir un clúster ofrece varias ventajas, como el descubrimiento de servicios más sencillo y la seguridad simplificada, y significa que los administradores de clústeres tienen que mantener menos clústeres. Sin embargo, los equipos de aplicaciones individuales a menudo tienen su propio proyecto. Esta estructura, que tiene un clúster de GKE principal, pero espacios de nombres diferentes para cada equipo de aplicaciones, recibe el nombre de “de varios usuarios”. El proyecto del equipo de aplicación se denomina usuario.

Con Google Cloud, los administradores de clústeres de GKE pueden crear un sistema en el que los registros del clúster permanecen en el proyecto principal de GKE y los registros de usuarios se distribuyen en los proyectos de usuarios. Para configurar tus registros de esta manera, usa el enrutador de registros. El enrutador de registros, te permite controlar cómo fluyen los registros dentro de tu proyecto de Google Cloud y cómo se enrutan a los destinos compatibles.

Para crear registros específicos del usuario, el administrador del clúster crea un receptor con el fin de enrutar entradas de registro a los proyectos de cada usuario. En cada proyecto de usuario, los equipos individuales pueden controlar cómo se almacenan y usan los registros, como supervisar los registros mediante la configuración de métricas basadas en registros y alertas basadas en registros.

Recomendamos que los receptores _Default en proyectos principales de GKE incluyan un filtro de exclusión. El filtro de exclusión evita que se transfieran los registros de usuarios en el proyecto principal de GKE y en el proyecto de usuario.

Requisitos previos

Configura el registro de varios usuarios

Puedes configurar el registro multiusuario mediante Google Cloud CLI o la consola de Google Cloud.

gcloud

A fin de configurar el registro de varios usuarios para clústeres de GKE, completa los siguientes pasos:

  1. Configura las siguientes variables del entorno:

    export TENANT_NAMESPACE="TENANT_NAMESPACE"
    export MAIN_PROJECT="MAIN_PROJECT_ID"
    export TENANT_PROJECT="TENANT_PROJECT_ID"
    

    Reemplaza lo siguiente:

    • TENANT_NAMESPACE: es el nombre del espacio de nombres del proyecto de usuario.
    • MAIN_PROJECT_ID: es el ID del proyecto principal.
    • TENANT_PROJECT_ID: es el ID de tu proyecto de usuario.
  2. Crea un espacio de nombres en tu clúster de múltiples instancias:

    kubectl create namespace $TENANT_NAMESPACE
    
  3. Crea un receptor de registros en el proyecto principal de GKE:

    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 receptor de registros que envía todos los registros relacionados con el espacio de nombres $TENANT_NAMESPACE al proyecto de usuario.

    Es posible que debas usar un --log-filter más restrictivo. Por ejemplo, si tu clúster y tu usuario tienen el mismo espacio de nombres, agrega un filtro de clúster.

    Para obtener más información sobre estos campos, consulta la documentación de la API de gcloud logging sinks create.

  4. Obtén la identidad de escritor del receptor en el 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)')
    
  5. Otorga el rol de Escritor de registros (logging.bucketWriter) a la cuenta de servicio que usa el receptor. Con el siguiente comando, se otorgan los permisos principales del proyecto para escribir registros en el proyecto de usuario:

     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 de gcloud projects add-iam-policy-binding.

  6. De forma opcional, crea un filtro de exclusión para el receptor que enruta los registros al bucket _Default del proyecto principal. Si no creas un filtro de exclusión en el bucket _Default, los registros enrutados aparecerán en el bucket _Default del proyecto principal y en el bucket de registro de usuario. Para crear un filtro de exclusión, haz lo siguiente:

    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 de gcloud logging sinks update.

Consola

A fin de implementar el registro de varios usuarios en GKE, completa los siguientes pasos:

  1. Crea el receptor de registros en el proyecto principal:

    1. Usa el selector de proyectos de la consola de Google Cloud para seleccionar el proyecto principal de GKE.
    2. En el panel de navegación de la consola de Google Cloud, selecciona Logging y, luego, Enrutador de registros:

      Ir a Enrutador de registros

    3. En la página Enrutador de registros, haz clic en Crear receptor.
    4. Ingresa un Nombre y una Descripción para tu receptor y haz clic en Siguiente.
    5. En el menú Selecciona el servicio de receptor, selecciona Otro proyecto.
    6. En el campo Destino del receptor, agrega el siguiente destino:

      logging.googleapis.com/projects/TENANT_PROJECT_ID
      

      Reemplaza TENANT_PROJECT_ID por el ID de tu proyecto de usuario.

    7. Haz clic en Siguiente.

    8. En Crear filtro de inclusión, agrega el siguiente filtro:

      resource.labels.namespace_name="TENANT_NAMESPACE"
      

      Reemplaza TENANT_NAMESPACE por el nombre del espacio de nombres del proyecto de tu usuario.

      Es posible que quieras un filtro de inclusión más restrictivo. Por ejemplo, cuando tu clúster y tu usuario tienen el mismo espacio de nombres, considera agregar una cláusula para incluir solo las entradas de registro de un clúster específico.

    9. Haz clic en Crear receptor. Tu receptor nuevo aparece en la lista Receptores del enrutador de registros.

  2. Copia la identidad de escritor del receptor en el portapapeles:

    1. En la página Enrutador de registros, busca el receptor de registros.
    2. En ese receptor, haz clic en Más y, luego, selecciona Ver detalles de receptor.
    3. En el panel Detalles del receptor, ubica el campo Identidad del escritor y, luego, copia el valor en tu portapapeles. Omite serviceAccount: en el valor copiado.
  3. En el proyecto de usuario, otorga el rol de Escritor de registros (roles/logging.logWriter) a la cuenta de servicio que usa el receptor del proyecto principal. El proyecto principal necesita este permiso para escribir registros en el proyecto de usuario.

    1. En el panel de navegación de la consola de Google Cloud , selecciona IAM:

      Ir a IAM

    2. Haz clic en Grant access.
    3. En el campo Principales nuevas, agrega la cuenta de servicio del receptor.
    4. En el menú desplegable Selecciona un rol, selecciona Logging y elige Escritor de registros.
    5. Haz clic en Guardar.
  4. De forma opcional, crea un filtro de exclusión en el bucket _Default del proyecto principal para evitar que los registros que se enrutan a un proyecto de usuario se escriban en el bucket de registro _Default en el proyecto principal:

    1. En el panel de navegación de la consola de Google Cloud, selecciona Logging y, luego, Enrutador de registros:

      Ir a Enrutador de registros

    2. Junto al bucket _Default, haz clic en Más y selecciona Editar receptor.
    3. En la sección Elige registros para filtrar fuera del receptor, haz clic en Agregar exclusión.
    4. Agrega un nombre de filtro.
    5. En el cuadro Crear un filtro de exclusión, agrega lo siguiente:

      resource.labels.namespace_name="TENANT_NAMESPACE"
      
    6. Haz clic en Actualizar receptor.

Verifica los registros de usuarios

Una vez que comienzas a usar cargas de trabajo que usan TENANT_NAMESPACE, puedes verificar que el proyecto de usuario reciba registros específicos de usuario:

  1. Selecciona el proyecto de usuario mediante el selector de proyectos de la consola de Google Cloud.
  2. En el panel de navegación de la consola de Google Cloud, selecciona Logging y, luego, Explorador de registros:

    Ir al Explorador de registros

  3. En el campo query-editor, ejecuta la siguiente consulta:

    resource.labels.namespace_name="TENANT_NAMESPACE"
    

    En el panel Resultados de la consulta, deberías ver los registros específicos de usuarios que se enrutaron desde el proyecto principal.

Usa registros de usuario

En los proyectos de usuario, cada equipo puede controlar cómo se enrutan, almacenan y analizan los registros. Una vez que los registros se enrutan a los proyectos de usuario, los equipos de aplicaciones individuales pueden optar por enrutar sus registros a destinos compatibles, como los bucket de registros, o a destinos de terceros mediante Pub/Sub. Para obtener información sobre el enrutamiento de entradas de registro, consulta Enruta registros a destinos compatibles.

Los equipos de aplicaciones individuales también pueden configurar alertas basadas en el contenido de los registros o las métricas derivadas de registros. Para obtener más información, consulta Supervisa tus registros.

Realiza una limpieza

Puedes quitar los objetos que creaste para el registro de varios usuarios mediante gcloud o la consola de Google Cloud.

gcloud

A fin de quitar los objetos que creaste para el registro de varios usuarios, completa los siguientes pasos:

  1. Configura las variables para simplificar los siguientes comandos:

    export TENANT_NAMESPACE="TENANT_NAMESPACE"
    export MAIN_PROJECT="MAIN_PROJECT_ID"
    export TENANT_PROJECT="TENANT_PROJECT_ID"
    

    Reemplaza lo siguiente:

    • TENANT_NAMESPACE: es el nombre del espacio de nombres del proyecto de usuario.
    • MAIN-PROJECT-ID: es el ID del proyecto principal.
    • TENANT-PROJECT-ID: es el ID de tu proyecto de usuario.
  2. Quita el rol de Escritor de registros (roles/logging.logWriter) de la cuenta de servicio en el proyecto de usuario:

    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
    
  3. Borra el receptor de registros:

    gcloud logging sinks delete gke-$TENANT_NAMESPACE-sink \
        --project=$MAIN_PROJECT
    
  4. Borra el espacio de nombres:

    kubectl delete namespace $TENANT_NAMESPACE
    

Consola

  1. En el proyecto de usuario, quita el rol de Escritor de registros (roles/logging.logWriter) de la cuenta de servicio:

    1. En el panel de navegación de la consola de Google Cloud , selecciona IAM:

      Ir a IAM

    2. En la cuenta de servicio que deseas borrar, haz clic en Editar principal.
    3. En el panel Editar acceso, haz clic en Borrar función junto al rol de Escritor de registros y haz clic en Guardar.
  2. En el proyecto principal, borra el receptor de registros:

    1. Usa el selector de proyectos de la consola de Google Cloud para seleccionar el proyecto de usuario de GKE.
    2. En el panel de navegación de la consola de Google Cloud, selecciona Logging y, luego, Enrutador de registros:

      Ir a Enrutador de registros

    3. En el receptor que deseas borrar, haz clic en Más.
    4. Selecciona Borrar receptor.
    5. En el panel de confirmación, haz clic en Borrar.

Limitaciones

El registro de varios usuarios tiene las siguientes limitaciones:

  • La cuota para la cantidad de receptores de registros por proyecto es de 200. Si necesitas más de 200 usuarios, solicita un aumento de cuota mediante la apertura de un caso de asistencia.
  • Existe un límite de 50 filtros de exclusión por bucket de registros. Si deseas tener más de 50 usuarios, se debe revisar el enfoque del filtro de exclusión del bucket _Default. Como alternativa, puedes hacer lo siguiente:

    • Crea un solo filtro de exclusión que excluya todos los espacios de nombres que no sean del sistema ni predeterminados mediante 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\""
      
    • Crea registros duplicados entre el proyecto de usuario y el proyecto principal mediante la creación del filtro de exclusión.

¿Qué sigue?