Configurar a geração de registros de multilocatário


Nesta página, você aprende a configurar o registro de vários locatários em clusters do Google Kubernetes Engine (GKE).

É comum que várias equipes compartilhem um único cluster do GKE. O compartilhamento de um cluster oferece várias vantagens, incluindo a descoberta de serviços mais fácil, a segurança simplificada e significa que os administradores de cluster têm menos clusters para manter. No entanto, as equipes de aplicativos individuais geralmente têm seus próprios projetos separados. Essa estrutura, com um cluster principal do GKE, mas namespaces separados para cada equipe de aplicativo, é chamada de multilocação. O projeto da equipe de aplicativo é chamado de locatário.

Com o Google Cloud, os administradores do cluster do GKE podem criar um sistema em que os registros do cluster permaneçam no projeto principal do GKE. Esses registros são distribuídos para projetos de locatário. Para configurar os registros dessa maneira, use o Roteador de registros. O Roteador de registros oferece controle sobre como os registros fluem dentro do seu projeto do Google Cloud e como eles são roteados para destinos compatíveis.

Para criar registros específicos de locatário, o administrador do cluster cria um coletor para rotear entradas de registro para o projeto de cada locatário. Em cada projeto de locatário, equipes individuais podem controlar como os registros são armazenados e usados, por exemplo, monitorando os registros configurando métricas e alertas com base em registros.

Recomendamos que os coletores _Default nos projetos principais do GKE incluam um filtro de exclusão. O filtro de exclusão impede que os registros de locatário sejam processados no projeto principal do GKE e no projeto de locatário.

Pré-requisitos

Configurar a geração de registros multilocatários

É possível configurar a geração de registros multilocatário usando a Google Cloud CLI ou o console do Google Cloud.

gcloud

Para configurar a geração de registros multilocatário para clusters do GKE, conclua as etapas a seguir:

  1. Configure as variáveis de ambiente a seguir:

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

    Substitua:

    • TENANT_NAMESPACE: o nome do namespace do projeto de locatário
    • MAIN_PROJECT_ID: o ID do projeto principal
    • TENANT_PROJECT_ID: o ID do projeto de locatário
  2. Crie um namespace no cluster de vários locatários:

    kubectl create namespace $TENANT_NAMESPACE
    
  3. Crie um coletor de registro no projeto principal do 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"
    

    Esse comando cria um coletor de registros que envia todos os registros relacionados ao namespace $TENANT_NAMESPACE para o projeto de locatário.

    Talvez seja necessário usar um --log-filter mais restritivo. Por exemplo, se o cluster e o locatário tiverem o mesmo namespace, adicione um filtro de cluster.

    Para mais informações sobre esses campos, consulte a documentação da API gcloud logging sinks create.

  4. Consiga a identidade do gravador do coletor no projeto principal e atribua-a a uma variável de ambiente.

    export SERVICE_ACCOUNT=$(gcloud logging sinks describe gke-$TENANT_NAMESPACE-sink \
        --project=$MAIN_PROJECT \
        --format='value(writerIdentity)')
    
  5. Conceda o papel Gravador de registros (logging.bucketWriter) à conta de serviço usada pelo coletor. O comando a seguir concede permissões principais ao projeto para gravar registros no projeto de locatário:

     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 mais informações sobre esses campos, consulte a documentação da API gcloud projects add-iam-policy-binding.

  6. Se quiser, crie um filtro de exclusão para o coletor que direciona os registros para o bucket _Default do projeto principal. Se você não criar um filtro de exclusão no bucket _Default, os registros roteados aparecerão no bucket _Default do projeto principal e no bucket de registro do locatário. Para criar um filtro de exclusão, faça o seguinte:

    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 mais informações sobre esses campos, consulte a documentação da API gcloud logging sinks update.

Console

Para implementar a geração de registros multilocatário para o GKE, conclua as seguintes etapas:

  1. Crie o coletor de registros no projeto principal do GKE:

    1. Use o seletor de projetos do console do Google Cloud para selecionar o projeto principal do GKE.
    2. No painel de navegação do console do Google Cloud, selecione Logging e clique em Roteador de registros:

      Acessar o roteador de registros

    3. Na página Roteador de registros, clique em Criar coletor.
    4. Insira um Nome e uma Descrição para o coletor e clique em Avançar.
    5. No menu Selecionar serviço do coletor, escolha Outro projeto.
    6. No campo Destino do coletor, adicione o seguinte destino:

      logging.googleapis.com/projects/TENANT_PROJECT_ID
      

      Substitua TENANT_PROJECT_ID pelo ID do projeto de locatário.

    7. Clique em Next.

    8. No Filtro de inclusão da versão, adicione o seguinte filtro:

      resource.labels.namespace_name="TENANT_NAMESPACE"
      

      Substitua TENANT_NAMESPACE pelo nome do namespace do projeto do locatário.

      Talvez você queira um filtro de inclusão mais restritivo. Por exemplo, quando o cluster e o locatário tiverem o mesmo namespace, considere adicionar uma cláusula para incluir apenas entradas de registro em um cluster específico.

    9. Clique em Criar coletor. O novo coletor é exibido na lista Coletores do roteador de registros.

  2. Copie a identidade do gravador do coletor para a área de transferência:

    1. Na página do Roteador de registros, localize o coletor de registros.
    2. Nesse coletor, clique em Mais e selecione Ver detalhes do coletor.
    3. No painel Detalhes do coletor, localize o campo Identidade do gravador e copie o valor para a área de transferência. Omita serviceAccount: do valor copiado.
  3. No projeto de locatário, conceda o papel Gravador de registros (roles/logging.logWriter) à conta de serviço usada pelo coletor do projeto principal. O projeto principal precisa dessa permissão para gravar registros no projeto de locatário.

    1. No painel de navegação do console do Google Cloud, selecione IAM:

      Acesse o IAM

    2. Clique em Conceder acesso.
    3. No campo Novos membros, adicione a conta de serviço do coletor.
    4. Na lista suspensa Selecionar um papel, selecione Logging e Gravador de registros.
    5. Clique em Save.
  4. Se quiser, crie um filtro de exclusão no bucket _Default do projeto principal para evitar que os registros roteados para um projeto de locatário sejam gravados no bucket _Default no projeto principal:

    1. No painel de navegação do console do Google Cloud, selecione Logging e clique em Roteador de registros:

      Acessar o roteador de registros

    2. Ao lado do bucket _Default, clique em Mais e selecione Editar coletor.
    3. Na seção Escolher os registros para filtrar o coletor, clique em Adicionar exclusão.
    4. Adicione um Nome do filtro.
    5. Na caixa Criar um filtro de exclusão, adicione as seguintes informações:

      resource.labels.namespace_name="TENANT_NAMESPACE"
      
    6. Clique em Atualizar coletor.

Verificar os registros do locatário

Depois de começar a utilizar cargas de trabalho que usam TENANT_NAMESPACE, é possível verificar se o projeto de locatário está recebendo registros específicos do locatário:

  1. Selecione o projeto do locatário usando o seletor de projetos do Console do Google Cloud.
  2. No painel de navegação do console do Google Cloud, selecione Logging e clique em Análise de registros:

    Acessar a Análise de registros

  3. No campo do editor de consultas, execute a seguinte consulta:

    resource.labels.namespace_name="TENANT_NAMESPACE"
    

    No painel Resultados da consulta, você verá registros específicos do locatário que foram roteados do projeto principal.

Usar registros do locatário

Nos projetos de locatário, cada equipe pode controlar como os registros são roteados, armazenados e analisados. Depois que os registros são roteados para os projetos de locatário, as equipes de aplicativos individuais podem optar por rotear os registros para destinos compatíveis, como buckets de registros, ou para destinos de terceiros usando o Pub/Sub. Para informações sobre como rotear entradas de registro, consulte Rotear registros para destinos compatíveis.

Equipes de aplicativos individuais também podem configurar alertas com base no conteúdo de registros ou em métricas derivadas de registros. Para mais informações, consulte Monitorar seus registros.

Limpar

É possível remover os objetos criados para a geração de registros de vários locatários usando gcloud ou o Console do Cloud.

gcloud

Para remover os objetos criados para a geração de registros de vários locatários, conclua as etapas a seguir:

  1. Defina variáveis para simplificar os seguintes comandos:

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

    Substitua:

    • TENANT_NAMESPACE: o nome do namespace do projeto de locatário
    • MAIN-PROJECT-ID: o ID do projeto principal
    • TENANT-PROJECT-ID: o ID do projeto de locatário
  2. Remova o papel Gravador de registros (roles/logging.logWriter) da conta de serviço no projeto de locatário:

    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. Exclua o coletor de registros:

    gcloud logging sinks delete gke-$TENANT_NAMESPACE-sink \
        --project=$MAIN_PROJECT
    
  4. Exclua o namespace:

    kubectl delete namespace $TENANT_NAMESPACE
    

Console

  1. No projeto de locatário, remova o papel Gravador de registros (roles/logging.logWriter) da conta de serviço:

    1. No painel de navegação do console do Google Cloud, selecione IAM:

      Acesse o IAM

    2. Na conta de serviço que você quer excluir, clique em Editar principal.
    3. No painel Editar acesso, clique em Excluir papel ao lado do papel Gravador de registros e clique em Salvar.
  2. No projeto principal, exclua o coletor de registros (Beta):

    1. Use o seletor de projetos do console do Google Cloud para escolher o projeto do locatário do GKE.
    2. No painel de navegação do console do Google Cloud, selecione Logging e clique em Roteador de registros:

      Acessar o roteador de registros

    3. No coletor que você quer excluir, clique em Mais .
    4. Selecione Excluir coletor.
    5. No painel de confirmação, clique em Excluir.

Limitações

A geração de registros de vários locatários tem as seguintes limitações:

  • A cota para o número de coletores de registros por projeto é 200. Se precisar de mais de 200 locatários, solicite um aumento da cota abrindo um caso de suporte.
  • Há um limite de 50 filtros de exclusão por bucket de registro. Se você pretende ter mais de 50 locatários, a abordagem da regra de exclusão para o bucket _Default precisa ser revisada. Como alternativa, você pode fazer o seguinte:

    • Crie um único filtro de exclusão que exclua todos os namespaces não padrão ou não do sistema usando 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\""
      
    • Registros duplicados entre o projeto de locatário e o projeto principal não criando a regra de exclusão.

A seguir