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, utilize o roteador de registros do Cloud Logging. O Roteador de registros oferece a você o controle sobre como os registros fluem dentro do seu projeto do Google Cloud e como os registros fluem para outros projetos do Google Cloud.
Para criar registros específicos de locatário, o administrador do cluster cria um coletor para exportar entradas de registro para um bucket de registros criado no projeto do locatário. Outra opção é criar uma regra de exclusão para evitar que os registros de locatário sejam armazenados no projeto principal do GKE.
No diagrama a seguir, você tem uma visão geral de uma arquitetura de registro de vários locatários usando buckets de registro:
Essa arquitetura inclui o seguinte:
- Um bucket de registros criado em cada projeto de locatário.
- Um coletor de registros criado para cada namespace de locatário.
- Uma conta de serviço criada automaticamente para cada coletor de registro.
- Regras de exclusão para, opcionalmente, impedir a duplicação de registros no projeto principal do GKE.
Nas seções a seguir, orientamos você sobre como criar essa arquitetura.
Pré-requisitos
- Familiarize-se com os seguintes conceitos:
- Ter um projeto de locatário atual e um projeto principal.
Como configurar a geração de registros de vários locatários
É possível configurar a geração de registros multilocatário usando a Google Cloud CLI ou o Console do Google Cloud.
gcloud
Para implementar a geração de registros multilocatário para clusters do GKE, conclua as etapas a seguir:
Defina variáveis:
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árioMAIN_PROJECT_ID
: o ID do projeto principalTENANT_PROJECT_ID
: o ID do projeto de locatário
Crie um namespace no cluster de vários locatários:
kubectl create namespace $TENANT_NAMESPACE
Crie o bucket de registros (Beta) no projeto de locatário:
gcloud logging buckets create gke-$TENANT_NAMESPACE-log-bucket \ --project=$TENANT_PROJECT \ --location=global \ --description="Log bucket for $TENANT_NAMESPACE namespace from $MAIN_PROJECT"
Para mais informações sobre esses campos, consulte a documentação da API
gcloud logging buckets create
.Crie um coletor de registro no projeto principal do GKE:
gcloud logging sinks create gke-$TENANT_NAMESPACE-sink \ logging.googleapis.com/projects/$TENANT_PROJECT/locations/global/buckets/gke-$TENANT_NAMESPACE-log-bucket \ --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 bucket de registro criado na etapa anterior.Às vezes, pode ser necessário usar um
--log-filter
mais restritivo. Por exemplo, se o cluster e o locatário tiverem o mesmo namespace, será possível adicionar um filtro de cluster.Para mais informações sobre esses campos, consulte a documentação da API
gcloud logging sinks create
.Receba a conta de serviço do coletor no projeto principal e atribua-a a uma variável. Essa conta de serviço será necessária para conceder permissões na próxima etapa.
export SERVICE_ACCOUNT=$(gcloud logging sinks describe gke-$TENANT_NAMESPACE-sink \ --project=$MAIN_PROJECT \ --format='value(writerIdentity)')
Conceda o papel
logging.bucketWriter
à conta de serviço usada pelo coletor. O projeto principal precisa dessa permissão para gravar no bucket no projeto de locatário.gcloud projects add-iam-policy-binding $TENANT_PROJECT \ --member=$SERVICE_ACCOUNT --role='roles/logging.bucketWriter' \ --condition="expression=resource.name.endsWith(\"locations/global/buckets/gke-$TENANT_NAMESPACE-log-bucket\"),title=Log bucket writer for $TENANT_NAMESPACE,description=Grants logging.bucketWriter 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
.Opcionalmente, crie uma regra de exclusão no bucket
_Default
. Isso impede que os registros de locatário também sejam gravados no bucket principal. Se você omitir esse comando, terá registros duplicados no bucket_Default
do projeto principal e no bucket de locatário.gcloud logging sinks update _Default --project=$MAIN_PROJECT \ --add-exclusion="name=gke-$TENANT_NAMESPACE-default-exclusion,description=\"Exclusion rule 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:
Crie um bucket de registro (Beta) no projeto de locatário:
Acesse o menu Armazenamento de registros:
Use o seletor de projetos do console do Google Cloud para escolher o projeto do locatário do GKE.
Clique em Criar bucket de registros.
Insira um Nome e uma Descrição para o bucket.
No menu suspenso Selecionar região de bucket de registros, selecione uma região.
Clique em Create bucket. O novo bucket aparecerá na lista Bucket de registros.
Crie o coletor de registros no projeto principal do GKE:
- Use o seletor de projetos do console do Google Cloud para selecionar o projeto principal do GKE.
- No console do Google Cloud, selecioneGeração de registros no menu
de navegação eRoteador de registros:
Acessar o roteador de registros - Na página Roteador de registros, clique em Criar coletor.
- Insira um Nome e uma Descrição para o coletor e clique em Avançar.
- No menu Selecionar serviço do coletor, escolha Outro projeto.
No campo Destino do coletor, adicione o seguinte destino:
logging.googleapis.com/projects/TENANT_PROJECT_ID/locations/LOG_BUCKET_REGION/buckets/BUCKET_NAME
Substitua:
TENANT_PROJECT_ID
: o ID do projeto principalLOG_BUCKET_REGION
: a região onde você criou o bucket de registroBUCKET_NAME
: o nome do bucket de registro criado na seção anterior
Clique em Próxima.
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.
Clique em Criar coletor. O novo coletor aparecerá na lista Coletores de roteamento de registros.
Copie a Identidade do gravador do coletor para a área de transferência:
- Use o seletor de projetos do console do Google Cloud para selecionar o projeto principal do GKE.
- Na página do Roteador de registros, localize o coletor de registros.
- Nesse coletor, clique em Mais e selecione Ver detalhes do coletor.
- 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.
Conceda o papel Gravador de bucket de registro à conta de serviço usada pelo coletor do locatário. O projeto principal precisa dessa permissão para gravar no bucket no projeto de locatário.
No console do Google Cloud, abra a página IAM.
Clique em Add.
No campo Novos membros, adicione a conta de serviço do coletor.
Na lista suspensa Selecionar um papel, selecione Logging e escolha Gravador de bucket de registros.
Clique em Save.
Opcionalmente, crie uma regra de exclusão no bucket
_Default
. Isso impede que os registros de locatário também sejam gravados no bucket principal. Se você omitir esse comando, terá registros duplicados no bucket_Default
do projeto principal e no bucket de locatário.- No console do Google Cloud, selecioneGeração de registros no menu
de navegação eRoteador de registros:
Acessar o roteador de registros - Ao lado do bucket
_Default
, clique em Mais e selecione Editar coletor. - Na seção Escolher os registros para filtrar o coletor, clique em Adicionar exclusão.
- Adicione um Nome do filtro.
Na caixa Criar um filtro de exclusão, adicione as seguintes informações:
resource.labels.namespace_name="TENANT_NAMESPACE"
Clique em Atualizar coletor.
- No console do Google Cloud, selecioneGeração de registros no menu
de navegação eRoteador de registros:
Como verificar registros de 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:
No projeto de locatário, acesse a página Explorerde registros no Console do Google Cloud.
Clique em Refinar escopo.
Selecione Escopo por armazenamento e escolha o bucket do locatário:
gke-TENANT_NAMESPACE-log-bucket
Como fazer a limpeza
É 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:
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árioMAIN-PROJECT-ID
: o ID do projeto principalTENANT-PROJECT-ID
: o ID do projeto de locatário
Se você criou uma regra de exclusão no projeto principal, remova-a:
gcloud logging sinks update _Default \ --project=$MAIN_PROJECT \ --remove-exclusions=gke-$TENANT_NAMESPACE-default-exclusion
Remova o papel
bucketWriter
da conta de serviço: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.bucketWriter' \ --all
Exclua o coletor de registros:
gcloud logging sinks delete gke-$TENANT_NAMESPACE-sink \ --project=$MAIN_PROJECT
Exclua o bucket de registros:
gcloud logging buckets delete gke-$TENANT_NAMESPACE-log-bucket \ --project=$TENANT_PROJECT \ --location=global
Exclua o namespace:
kubectl delete namespace $TENANT_NAMESPACE
Console
Se você criou uma regra de exclusão no projeto principal, remova-a:
- No console do Google Cloud, selecioneGeração de registros no menu
de navegação eRoteador de registros:
Acessar o roteador de registros - Ao lado do bucket
_Default
, clique em Mais - Selecione Editar coletor.
- Ao lado da regra de exclusão que você criou, clique em Excluir.
- Clique em Atualizar coletor.
- No console do Google Cloud, selecioneGeração de registros no menu
de navegação eRoteador de registros:
No projeto principal, remova a conta de serviço:
No console do Google Cloud, abra a página IAM.
Selecione a conta de serviço do coletor.
Clique em Remover.
Na janela de confirmação, clique em Confirmar.
No projeto de locatário, exclua o coletor de registro:
- Use o seletor de projetos do console do Google Cloud para escolher o projeto do locatário do GKE.
- No console do Google Cloud, selecioneGeração de registros no menu
de navegação eRoteador de registros:
Acessar o roteador de registros No coletor que você quer excluir, clique em Mais more_vert.
Selecione Excluir coletor.
No painel de confirmação, clique em Excluir.
No projeto principal, exclua o bucket de registro (Beta):
- Use o seletor de projetos do console do Google Cloud para selecionar o projeto principal do GKE.
No menu do Logging, selecione Armazenamento de registros.
No bucket que você quer excluir, clique em Mais more_vert.
Selecione Excluir bucket.
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 absoluto de 50 regras 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:Crie uma única regra de exclusão que filtre todos os namespaces não padrão ou de sistema usando este comando:
gcloud logging sinks update _Default \ --project=$MAIN_PROJECT \ --add-exclusion="name=gke-all-tenant-default-exclusion,description=\"Exclusion rule 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
- Saiba mais sobre as Práticas recomendadas para multilocação empresarial no GKE.