Questa pagina spiega come configurare il logging multi-tenant per di Google Kubernetes Engine (GKE).
È comune che più team condividano un singolo cluster GKE. La condivisione di un cluster offre diversi vantaggi, tra cui un servizio più semplice l'individuazione delle risorse, la sicurezza semplificata meno cluster da mantenere. I singoli team che si occupano delle applicazioni spesso hanno progetto separato. Questa struttura, con un cluster GKE principale, ma separato per ogni team dell'applicazione è detta multitenancy. L'applicazione progetto del team è denominato tenant.
Con Google Cloud, gli amministratori dei cluster GKE possono creare un sistema dove i log per il cluster rimangono nel progetto GKE principale e i log dei tenant sono distribuiti nei progetti tenant. Per configurare i log in questo modo, utilizza il router dei log. La Il router dei log ti consente di controllare il flusso dei log all'interno del tuo progetto Google Cloud e come i log vengono instradati alle destinazioni supportate.
Per creare log specifici per il tenant, l'amministratore del cluster crea un'istanza sink per instradare le voci di log al progetto di ciascun tenant. Nella per ogni progetto tenant, i singoli team possono controllare la modalità di archiviazione dei log e in uso, ad esempio il monitoraggio dei log configurando metriche basate su log e e avvisi basati su log.
Consigliamo di includere i sink _Default
nei progetti GKE principali
un filtro di esclusione. Il filtro di esclusione impedisce
di essere importati sia nel progetto GKE principale
del progetto tenant.
Prerequisiti
- Acquisire familiarità con i seguenti documenti su multi-tenancy e routing:
- Assicurati di avere già un progetto tenant e un progetto principale.
Configura il logging multi-tenant
Puoi configurare il logging multi-tenant utilizzando Google Cloud CLI o nella console Google Cloud.
gcloud
Per configurare il logging multi-tenant per i cluster GKE, completa segui questi passaggi:
Imposta le seguenti variabili di ambiente:
export TENANT_NAMESPACE="TENANT_NAMESPACE" export MAIN_PROJECT="MAIN_PROJECT_ID" export TENANT_PROJECT="TENANT_PROJECT_ID"
Sostituisci quanto segue:
TENANT_NAMESPACE
: il nome dello spazio dei nomi del progetto tenantMAIN_PROJECT_ID
: l'ID del progetto principaleTENANT_PROJECT_ID
: l'ID del progetto tenant
Crea uno spazio dei nomi nel tuo cluster multi-tenant:
kubectl create namespace $TENANT_NAMESPACE
Crea un sink di log nel progetto GKE principale:
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"
Questo comando crea un sink di log che invia tutti i log correlati
$TENANT_NAMESPACE
al progetto tenant.Potresti dover utilizzare un criterio
--log-filter
più restrittivo. Ad esempio, se cluster e tenant hanno lo stesso spazio dei nomi, quindi aggiungi un filtro del cluster.Per ulteriori informazioni su questi campi, consulta Documentazione dell'API
gcloud logging sinks create
.Recupera l'identità writer dal sink del progetto principale e assegnala in una variabile di ambiente.
export SERVICE_ACCOUNT=$(gcloud logging sinks describe gke-$TENANT_NAMESPACE-sink \ --project=$MAIN_PROJECT \ --format='value(writerIdentity)')
Concedi l'autorizzazione Writer log (
logging.bucketWriter
) all'account di servizio usato dal sink. Il comando seguente concede le autorizzazioni principali del progetto per scrivere i log nel progetto tenant: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"
Per ulteriori informazioni su questi campi, consulta Documentazione dell'API
gcloud projects add-iam-policy-binding
.Facoltativamente, crea un filtro di esclusione per il sink a cui instrada i log il bucket
_Default
del progetto principale. Se non crei un'esclusione sul bucket_Default
, i log con routing verranno visualizzati sia_Default
bucket del progetto principale e del bucket di log tenant. Per creare un filtro di esclusione, procedi nel seguente modo: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\""
Per ulteriori informazioni su questi campi, consulta Documentazione dell'API
gcloud logging sinks update
.
Console
Per implementare il logging multi-tenant per GKE, completa la seguenti passaggi:
Crea il sink di log nel progetto principale:
- Utilizza il selettore di progetti della console Google Cloud per selezionare l'istanza principale GKE progetto.
-
Nella console Google Cloud, vai alla pagina Router dei log:
Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Logging.
- Nella pagina Router dei log, fai clic su Crea sink.
- Inserisci un nome e una descrizione per il sink e poi fai clic su Avanti.
- Nel menu Seleziona servizio sink, scegli Altro progetto.
Nel campo Destinazione sink, aggiungi la destinazione seguente:
logging.googleapis.com/projects/TENANT_PROJECT_ID
Sostituisci
TENANT_PROJECT_ID
con l'ID progetto di del tuo progetto tenant.Fai clic su Avanti.
In Crea filtro di inclusione, aggiungi il seguente filtro:
resource.labels.namespace_name="TENANT_NAMESPACE"
Sostituisci TENANT_NAMESPACE con il nome del tenant nello spazio dei nomi del progetto.
Ti consigliamo di applicare un filtro di inclusione più restrittivo. Ad esempio, quando cluster e tenant hanno lo stesso spazio dei nomi, valuta la possibilità di aggiungere per includere solo le voci di log di un cluster specifico.
Fai clic su Crea sink. Il nuovo sink viene visualizzato nella Sink del router dei log.
Copia l'identità writer del sink negli appunti:
- Nella pagina Router dei log, individua il sink di log.
- Per quel lavello, fai clic su Altro, quindi seleziona Visualizza dettagli sink.
- Nel riquadro Dettagli sink, individua il campo Identità scrittore,
quindi copia il valore negli appunti. Ometti
serviceAccount:
dal valore copiato.
Nel progetto tenant, concedi il writer di log (
roles/logging.logWriter
) all'account di servizio utilizzato dall'amministratore nel sink del progetto. Il progetto principale richiede questa autorizzazione per scrivere i log in del progetto tenant.-
Nella console Google Cloud, vai alla pagina IAM:
Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo IAM e Console di amministrazione.
- Fai clic su Concedi accesso.
- Nel campo Nuove entità, aggiungi l'account di servizio del sink.
- Nel menu a discesa Seleziona un ruolo, seleziona Logging e Scegli Writer log.
- Fai clic su Salva.
-
Se vuoi, crea un filtro di esclusione nel bucket
_Default
della rete principale per impedire che i log instradati a un progetto tenant vengano scritto nel bucket di log_Default
nel progetto principale:-
Nella console Google Cloud, vai alla pagina Router dei log:
Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Logging.
- Accanto al bucket
_Default
, fai clic su Altro e seleziona Modifica sink. - Nella sezione Scegli i log da filtrare dal sink, fai clic su Aggiungi esclusione.
- Aggiungi un nome per il filtro.
Nella casella Crea un filtro di esclusione, aggiungi quanto segue:
resource.labels.namespace_name="TENANT_NAMESPACE"
Fai clic su Aggiorna sink.
-
Verifica i log del tenant
Dopo aver iniziato a utilizzare i carichi di lavoro che usano TENANT_NAMESPACE, puoi verificare che il progetto tenant riceva i log specifici per il tenant:
- Seleziona il progetto tenant utilizzando il selettore di progetti della console Google Cloud.
-
Nella console Google Cloud, vai alla pagina Esplora log:
Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Logging.
Nel campo dell'editor di query, esegui questa query:
resource.labels.namespace_name="TENANT_NAMESPACE"
Nel riquadro Risultati delle query dovresti vedere i log specifici del tenant che sono indirizzate dal progetto principale.
Usa log tenant
Nei progetti tenant, ogni team può controllare il routing, l'archiviazione e analizzato. Dopo che i log sono stati indirizzati ai progetti tenant, l'utente i team delle applicazioni possono scegliere di instradare i log a destinazioni supportate, Logging dei bucket o verso destinazioni di terze parti tramite utilizzando Pub/Sub. Per informazioni sulle voci di log di routing, consulta Esegui il routing dei log alle destinazioni supportate.
I singoli team addetti alle applicazioni possono anche impostare avvisi basati sui contenuti o metriche derivate dai log. Per ulteriori informazioni, vedi Monitora i log.
Esegui la pulizia
Puoi rimuovere gli oggetti che hai creato per il logging multi-tenant utilizzando
gcloud
o la console Google Cloud.
gcloud
Per rimuovere gli oggetti creati per il logging multi-tenant, completa la seguenti passaggi:
Imposta le variabili per semplificare i seguenti comandi:
export TENANT_NAMESPACE="TENANT_NAMESPACE" export MAIN_PROJECT="MAIN_PROJECT_ID" export TENANT_PROJECT="TENANT_PROJECT_ID"
Sostituisci quanto segue:
TENANT_NAMESPACE
: il nome dello spazio dei nomi del progetto tenantMAIN-PROJECT-ID
: l'ID del progetto principaleTENANT-PROJECT-ID
: l'ID del progetto tenant
Rimuovi il writer di log (
roles/logging.logWriter
) dell'account di servizio nel tenant progetto: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
Elimina il sink di log:
gcloud logging sinks delete gke-$TENANT_NAMESPACE-sink \ --project=$MAIN_PROJECT
Elimina lo spazio dei nomi:
kubectl delete namespace $TENANT_NAMESPACE
Console
Nel progetto tenant, rimuovi Writer log (
roles/logging.logWriter
) dell'account di servizio:-
Nella console Google Cloud, vai alla pagina IAM:
Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo IAM e Console di amministrazione.
- In corrispondenza dell'account di servizio che vuoi eliminare, fai clic su edit Modifica entità.
- Nel riquadro Modifica accesso, fai clic su Elimina ruolo. accanto al ruolo Writer log, quindi fai clic su Salva.
-
Nel progetto principale, elimina il sink di log:
- Utilizza il selettore di progetti della console Google Cloud per selezionare il tenant progetto GKE.
-
Nella console Google Cloud, vai alla pagina Router dei log:
Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Logging.
- Fai clic su more_vert Altro in corrispondenza del sink che vuoi eliminare.
- Seleziona Elimina sink.
- Nel riquadro di conferma, fai clic su Elimina.
Limitazioni
Il logging multi-tenant presenta le seguenti limitazioni:
- La quota per il numero di sink di log per progetto è 200. Se hai bisogno di più di 200 tenant, richiedi un aumento della quota aprendo un richiesta di assistenza.
Esiste un limite di 50 filtri di esclusione per di log del bucket. Se intendi avere più di 50 tenant, l'approccio al filtro di esclusione per il bucket
_Default
deve essere rivisti. In alternativa, puoi procedere nel seguente modo:Crea un singolo filtro di esclusione che escluda tutti gli elementi non di sistema o spazi dei nomi non predefiniti utilizzando questo 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\""
Duplica i log tra il progetto tenant e il progetto principale in base a non sta creando il filtro di esclusione.
Passaggi successivi
- Informazioni su Best practice per la multitenancy aziendale su GKE.