Esta página explica como configurar o registo multi-inquilino para clusters do Google Kubernetes Engine (GKE).
É comum várias equipas partilharem um único cluster do GKE. A partilha de um cluster oferece várias vantagens, incluindo uma deteção de serviços mais fácil, segurança simplificada e significa que os administradores de clusters têm menos clusters para manter. No entanto, as equipas de aplicações individuais têm frequentemente o seu próprio projeto separado. Esta estrutura, que tem um cluster do GKE principal, mas espaços de nomes separados para cada equipa de aplicações, é denominada multi-tenancy. O projeto da equipa de aplicações chama-se inquilino.
Com o Google Cloud, os administradores de clusters do GKE podem criar um sistema em que os registos do cluster permanecem no projeto principal do GKE e os registos de inquilinos são distribuídos aos projetos de inquilinos. Para configurar os seus registos desta forma, use o Log Router. O Log Router permite-lhe controlar o fluxo dos registos no seu Google Cloud projeto e como os registos são encaminhados para destinos suportados.
Para criar registos específicos do inquilino, o administrador do cluster cria um destinatário para encaminhar as entradas de registo para o projeto de cada inquilino. Em cada projeto de inquilino, as equipas individuais podem controlar a forma como os registos são armazenados e usados, como a monitorização dos registos através da configuração de métricas baseadas em registos e alertas baseados em registos.
Recomendamos que os _Default
destinos nos projetos principais do GKE incluam
um filtro de exclusão. O filtro de exclusão impede que os registos do inquilino sejam carregados no projeto principal do GKE e no projeto do inquilino.
Pré-requisitos
- Familiarize-se com os seguintes documentos acerca da multi-instância e do encaminhamento:
- Certifique-se de que tem um projeto de inquilino e um projeto principal existentes.
Configure o registo multiinquilino
Pode configurar o registo multiinquilino através da CLI do Google Cloud ou da Google Cloud consola.
gcloud
Para configurar o registo multiinquilino para clusters do GKE, conclua os seguintes passos:
Defina as seguintes variáveis de ambiente:
export TENANT_NAMESPACE="TENANT_NAMESPACE" export MAIN_PROJECT="MAIN_PROJECT_ID" export TENANT_PROJECT="TENANT_PROJECT_ID"
Substitua o seguinte:
TENANT_NAMESPACE
: o nome do espaço de nomes do projeto de inquilinoMAIN_PROJECT_ID
: o ID do projeto principalTENANT_PROJECT_ID
: o ID do projeto do seu projeto de inquilino
Crie um espaço de nomes no cluster multiinquilino:
kubectl create namespace $TENANT_NAMESPACE
Crie um destino de registo no projeto do GKE principal:
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 cria um destino de registo que envia todos os registos relacionados com o espaço de nomes
$TENANT_NAMESPACE
para o projeto do inquilino.Pode ter de usar um
--log-filter
mais restritivo. Por exemplo, se o cluster e o inquilino tiverem o mesmo espaço de nomes, adicione um filtro de cluster.Para mais informações sobre estes campos, consulte a
gcloud logging sinks create
documentação da API.Obtenha a identidade do escritor a partir do destino 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)')
Conceda a função Escritor de registos (
logging.bucketWriter
) à conta de serviço usada pelo destino. O comando seguinte concede autorizações do projeto principal para escrever registos no projeto 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 mais informações sobre estes campos, consulte a
gcloud projects add-iam-policy-binding
documentação da API.Opcionalmente, crie um filtro de exclusão para o destino que encaminha os registos para o contentor
_Default
do projeto principal. Se não criar um filtro de exclusão no contentor_Default
, os registos encaminhados aparecem no contentor_Default
do projeto principal e no contentor de registos do inquilino. 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 estes campos, consulte a
gcloud logging sinks update
documentação da API.
Consola
Para implementar o registo multi-inquilino para o GKE, conclua os seguintes passos:
Crie o destino do registo no projeto principal:
- Use o seletor de projetos da consola para selecionar o projeto principal do GKE. Google Cloud
-
Na Google Cloud consola, aceda à página Log Router:
Se usar a barra de pesquisa para encontrar esta página, selecione o resultado cuja legenda é Registo.
- Na página Log Router, clique em Criar destino.
- Introduza um Nome e uma Descrição para o destino e, de seguida, clique em Seguinte.
- No menu Selecionar serviço de destino, selecione Outro projeto.
No campo Destino de sincronização, adicione o seguinte destino:
logging.googleapis.com/projects/TENANT_PROJECT_ID
Substitua
TENANT_PROJECT_ID
pelo ID do projeto do seu projeto de inquilino.Clicar em Seguinte.
Em Criar filtro de inclusão, adicione o seguinte filtro:
resource.labels.namespace_name="TENANT_NAMESPACE"
Substitua TENANT_NAMESPACE pelo nome do espaço de nomes do projeto do inquilino.
Pode querer um filtro de inclusão mais restritivo. Por exemplo, quando o cluster e o inquilino têm o mesmo espaço de nomes, considere adicionar uma cláusula para incluir apenas entradas de registo para um cluster específico.
Clique em Criar destino. O novo destino aparece na lista Destinos do Log Router.
Copie a identidade do escritor do destino para a área de transferência:
- Na página Log Router, localize o destino do registo.
- Para esse destino, clique em Mais e, de seguida, selecione Ver detalhes do destino.
- No painel Detalhes do destino, localize o campo Identidade do escritor
e, de seguida, copie o valor para a área de transferência. Omita
serviceAccount:
do valor copiado.
No projeto de inquilino, conceda a função Escritor de registos (
roles/logging.logWriter
) à conta de serviço usada pelo coletor do projeto principal. O projeto principal precisa desta autorização para escrever registos no projeto de inquilino.-
Na Google Cloud consola, aceda à página IAM:
Se usar a barra de pesquisa para encontrar esta página, selecione o resultado cujo subtítulo é IAM e administração.
- Clique em Conceder acesso.
- No campo Novos membros, adicione a conta de serviço do destino.
- No menu pendente Selecionar uma função, selecione Registo e escolha Escritor de registos.
- Clique em Guardar.
-
Opcionalmente, crie um filtro de exclusão no contentor
_Default
do projeto principal para impedir que os registos encaminhados para um projeto de inquilino sejam escritos no contentor de registos_Default
no projeto principal:-
Na Google Cloud consola, aceda à página Log Router:
Se usar a barra de pesquisa para encontrar esta página, selecione o resultado cuja legenda é Registo.
- Junto ao contentor
_Default
, clique em Mais e selecione Editar destino. - Na secção Escolha os registos a filtrar da sincronização, clique em Adicionar exclusão.
- Adicione um nome do filtro.
Na caixa Crie um filtro de exclusão, adicione o seguinte:
resource.labels.namespace_name="TENANT_NAMESPACE"
Clique em Atualizar destino.
-
Valide os registos do inquilino
Depois de começar a usar cargas de trabalho que usam TENANT_NAMESPACE, pode verificar se o projeto de inquilino está a receber registos específicos do inquilino:
- Selecione o projeto de inquilino através do Google Cloud seletor de projetos da consola.
-
Na Google Cloud consola, aceda à página Explorador de registos:
Aceda ao Explorador de registos
Se usar a barra de pesquisa para encontrar esta página, selecione o resultado cuja legenda é Registo.
No campo do editor de consultas, execute a seguinte consulta:
resource.labels.namespace_name="TENANT_NAMESPACE"
No painel Resultados da consulta, deve ver registos específicos do inquilino que foram encaminhados a partir do projeto principal.
Use registos de inquilinos
Nos projetos de inquilinos, cada equipa pode controlar a forma como os registos são encaminhados, armazenados e analisados. Depois de os registos serem encaminhados para os projetos de inquilinos, as equipas de aplicações individuais podem optar por encaminhar os respetivos registos para destinos suportados, como contentores de registos, ou para destinos de terceiros através do Pub/Sub. Para obter informações sobre as entradas de registo de encaminhamento, consulte o artigo Encaminhe registos para destinos suportados.
As equipas de aplicações individuais também podem configurar alertas com base no conteúdo dos registos ou nas métricas derivadas dos registos. Para mais informações, consulte o artigo Monitorize os seus registos.
Limpar
Pode remover os objetos que criou para o registo multiinquilino através do comando
gcloud
ou da consola Google Cloud .
gcloud
Para remover os objetos que criou para o registo multi-inquilino, conclua os seguintes passos:
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 o seguinte:
TENANT_NAMESPACE
: o nome do espaço de nomes do projeto de inquilinoMAIN-PROJECT-ID
: o ID do projeto principalTENANT-PROJECT-ID
: o ID do projeto do seu projeto de inquilino
Remova a função Logs Writer (
roles/logging.logWriter
) da conta de serviço no projeto do 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
Elimine o destino do registo:
gcloud logging sinks delete gke-$TENANT_NAMESPACE-sink \ --project=$MAIN_PROJECT
Elimine o espaço de nomes:
kubectl delete namespace $TENANT_NAMESPACE
Consola
No projeto de inquilino, remova a função Escritor de registos (
roles/logging.logWriter
) da conta de serviço:-
Na Google Cloud consola, aceda à página IAM:
Se usar a barra de pesquisa para encontrar esta página, selecione o resultado cujo subtítulo é IAM e administração.
- Para a conta de serviço que quer eliminar, clique em edit Editar principal.
- No painel Editar acesso, clique em Eliminar função junto à função Logs Writer e clique em Guardar.
-
No projeto principal, elimine o destino do registo:
- Use o seletor de projetos da consola para selecionar o projeto do GKE do inquilino. Google Cloud
-
Na Google Cloud consola, aceda à página Log Router:
Se usar a barra de pesquisa para encontrar esta página, selecione o resultado cuja legenda é Registo.
- Para a pia que quer eliminar, clique em more_vert Mais.
- Selecione Eliminar destino.
- No painel de confirmação, clique em Eliminar.
Limitações
O registo multi-inquilino tem as seguintes limitações:
- A quota para o número de sinks de registo por projeto é de 200. Se precisar de mais de 200 inquilinos, peça um aumento da quota abrindo um registo de apoio ao cliente.
Existe um limite de 50 filtros de exclusão por contentor de registos. Se pretender ter mais de 50 inquilinos, a abordagem de filtro de exclusão para o bucket
_Default
tem de ser revista. Em alternativa, pode fazer o seguinte:Crie um único filtro de exclusão que exclua todos os espaços de nomes não pertencentes ao sistema ou não predefinidos através deste 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 registos entre o projeto de inquilino e o projeto principal não criando o filtro de exclusão.
O que se segue?
- Saiba mais sobre as práticas recomendadas para a multi-posse empresarial no GKE.