Configurar el registro multicliente

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 Trusted Cloud by S3NS, 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 Trusted Cloud proyecto Trusted 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

Configurar el registro multicliente

Puedes configurar el registro multiempresa con la CLI de Google Cloud o con laTrusted Cloud consola.

gcloud

Para configurar el registro multicliente en clústeres de GKE, sigue estos pasos:

  1. 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 inquilino
    • MAIN_PROJECT_ID: el ID de proyecto de tu proyecto principal
    • TENANT_PROJECT_ID: el ID del proyecto de tu arrendatario
  2. Crea un espacio de nombres en tu clúster multicliente:

    kubectl create namespace $TENANT_NAMESPACE
    
  3. 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.

  4. 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)')
    
  5. 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.

  6. 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:

  1. Crea el sumidero de registro en el proyecto principal:

    1. Usa el Trusted Cloud selector de proyectos de la consola para seleccionar el proyecto principal de GKE.
    2. En la Trusted Cloud consola, ve a la página Enrutador de registros:

      Ve a Enrutador de registros.

      Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuya sección sea Registro.

    3. En la página Log Router (Enrutador de registros), haz clic en Create sink (Crear sumidero).
    4. Escribe un nombre y una descripción para el receptor y, a continuación, haz clic en Siguiente.
    5. En el menú Seleccionar servicio de receptor, selecciona Otro proyecto.
    6. 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.

    7. Haz clic en Siguiente.

    8. 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.

    9. Haz clic en Crear sumidero. El nuevo receptor aparecerá en la lista Receptores de Log Router.

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

    1. En la página Enrutador de registros, busca el sumidero de registros.
    2. En ese receptor, haz clic en Más y, a continuación, selecciona Ver detalles del receptor.
    3. 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.
  3. 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.

    1. En la Trusted 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.

    2. Haz clic en Conceder acceso.
    3. En el campo Nuevos principales, añade 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. 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:

    1. En la Trusted Cloud consola, ve a la página Enrutador de registros:

      Ve a Enrutador de registros.

      Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuya sección sea Registro.

    2. Junto al contenedor _Default, haz clic en Más y selecciona Editar receptor.
    3. En la sección Seleccionar los registros que se excluirán del sumidero, haga clic en Añadir exclusión.
    4. Añade un nombre de filtro.
    5. En el cuadro Crear filtro de exclusión, añade lo siguiente:

      resource.labels.namespace_name="TENANT_NAMESPACE"
      
    6. 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:

  1. Selecciona el proyecto de arrendatario con el Trusted Cloud selector de proyectos de la consola.
  2. En la Trusted 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.

  3. 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 Trusted Cloud .

gcloud

Para quitar los objetos que has creado para el registro multiempresa, sigue estos pasos:

  1. 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 inquilino
    • MAIN-PROJECT-ID: el ID de proyecto de tu proyecto principal
    • TENANT-PROJECT-ID: el ID del proyecto de tu arrendatario
  2. 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
    
  3. Elimina el receptor de registro:

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

    kubectl delete namespace $TENANT_NAMESPACE
    

Consola

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

    1. En la Trusted 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.

    2. En la cuenta de servicio que quieras eliminar, haz clic en Editar principal.
    3. En el panel Editar acceso, haga clic en Eliminar rol junto al rol Escritor de registros y, a continuación, en Guardar.
  2. En el proyecto principal, elimina el receptor de registro:

    1. Usa el selector de proyectos de la consola Trusted Cloud para seleccionar el proyecto de GKE del arrendatario.
    2. En la Trusted Cloud consola, ve a la página Enrutador de registros:

      Ve a Enrutador de registros.

      Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuya sección sea Registro.

    3. En el receptor que quieras eliminar, haz clic en Más.
    4. Selecciona Eliminar receptor.
    5. 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.

Siguientes pasos