Questa pagina spiega la multitenancy del cluster su Google Kubernetes Engine (GKE). Sono inclusi i cluster condivisi da diversi utenti su una singola organizzazione e i cluster condivisi da istanze di un'applicazione SaaS (Software as a Service). L'architettura di cluster multi-tenancy è un'alternativa alla gestione di molti cluster mono-tenant.
Questa pagina riassume anche le funzionalità di Kubernetes e GKE che possono essere utilizzate per gestire i cluster multi-tenant.
Che cos'è la multitenancy?
Un cluster multi-tenant è condiviso da più utenti e/o carichi di lavoro che sono o "tenant". Gli operatori dei cluster multi-tenant devono isolare i tenant tra loro per ridurre al minimo i danni che un tenant compromesso o malintenzionato può causare al cluster e agli altri tenant. Inoltre, le risorse del cluster devono essere allocate equamente tra i tenant.
Quando pianifichi un'architettura multi-tenant, devi considerare i livelli di isolamento delle risorse in Kubernetes: cluster, spazio dei nomi, nodo, pod e contenitore. Devi anche considerare le implicazioni di sicurezza della condivisione di diversi tipi di risorse tra gli utenti. Ad esempio, pianificare pod da tenant diversi lo stesso nodo può ridurre il numero di macchine necessarie nel cluster. D'altra parte, potresti dover impedire il collocamento in colocation di determinati carichi di lavoro. Ad esempio, potresti non consentire l'esecuzione di codice non attendibile esterno alla tua organizzazione sullo stesso nodo dei container che elaborano informazioni sensibili.
Sebbene Kubernetes non possa garantire l'isolamento perfettamente sicuro tenant, offre funzionalità che possono essere sufficienti per casi d'uso specifici. Puoi separare ogni tenant e le relative risorse Kubernetes in propri spazi dei nomi. Puoi quindi utilizzare i criteri per applicare e l'isolamento dei tenant. In genere, i criteri sono limitati allo spazio dei nomi e possono essere utilizzati per limitare accesso API, per limitare l'utilizzo delle risorse e per limitare i container che possono eseguire.
I tenant di un cluster multi-tenant condividono:
- Estensioni, controller, componenti aggiuntivi e definizioni di risorse personalizzate (CRD).
- Il piano di controllo del cluster. Ciò implica che il cluster le operazioni, la sicurezza e l'auditing sono centralizzate.
L'utilizzo di un cluster multi-tenant presenta diversi vantaggi rispetto all'utilizzo di più cluster mono-tenant:
- Riduzione dell'overhead di gestione
- Riduzione della frammentazione delle risorse
- Non è necessario attendere la creazione del cluster per i nuovi tenant
Casi d'uso multi-tenancy
Questa sezione descrive come configurare un cluster per per i casi d'uso multi-tenancy.
Architettura multi-tenancy aziendale
In un ambiente aziendale, gli tenant di un cluster sono team distinti all'interno dell'organizzazione. In genere, ogni tenant ha uno spazio dei nomi corrispondente. Modelli alternativi di multi-tenancy con un tenant per cluster o un tenant per progetti Google Cloud, sono più difficili da gestire. Il traffico di rete all'interno di uno spazio dei nomi è illimitato. Traffico di rete tra devono essere consentiti in modo esplicito. Questi criteri possono essere applicati utilizzando il criterio di rete di Kubernetes.
Gli utenti del cluster sono suddivisi in tre ruoli diversi, a seconda il privilegio:
- Amministratore del cluster
- Questo ruolo è destinato agli amministratori dell'intero cluster, che gestiscono tutti i tenant. Gli amministratori di cluster possono creare, leggere, aggiornare ed eliminare qualsiasi criterio . Possono creare spazi dei nomi e assegnarli agli amministratori.
- Amministratore spazio dei nomi
- Questo ruolo è riservato agli amministratori di singoli tenant specifici. Un amministratore del nome spazio può gestire gli utenti nel proprio spazio.
- Sviluppatore
- I membri di questo ruolo possono creare, leggere, aggiornare ed eliminare oggetti non correlati ai criteri con spazio dei nomi, come pod, job ed ingressi. Gli sviluppatori dispongono di questi privilegi solo negli spazi dei nomi a cui hanno accesso.
Per informazioni sulla configurazione di più cluster multi-tenant per un consulta le best practice per le best practice che lo richiedono.
Provider di SaaS multi-tenancy
I tenant di un cluster di un provider SaaS sono le istanze per cliente e il piano di controllo del SaaS. Per sfruttare i criteri basati sullo spazio dei nomi, le istanze dell'applicazione devono essere organizzate in spazi dei nomi propri, così come i componenti del piano di controllo del SaaS. Gli utenti finali non possono interagiscono direttamente con il piano di controllo Kubernetes, che a sua volta interagisce con il piano di controllo Kubernetes.
Ad esempio, una piattaforma di blogging potrebbe essere eseguita su un cluster multi-tenant. In questo caso, i tenant sono l'istanza del blog di ciascun cliente e l'istanza dal piano di controllo. Il piano di controllo della piattaforma e ogni blog ospitato venivano tutti eseguiti in spazi dei nomi separati. I clienti potevano creare ed eliminare blog, aggiornare le versioni del software di blogging tramite l'interfaccia della piattaforma senza avere alcuna visibilità sul funzionamento del cluster.
Applicazione dei criteri multi-tenancy
GKE e Kubernetes forniscono diverse funzionalità che possono essere utilizzate per gestire i cluster multi-tenant. Le sezioni seguenti forniscono una panoramica di questi le funzionalità di machine learning.
Controllo degli accessi
GKE dispone di due sistemi di controllo dell'accesso: Identity and Access Management (IAM) e controllo degli accessi basato sui ruoli (RBAC). IAM è il sistema di controllo dell'accesso di Google Cloud per la gestione dell'autenticazione e dell'autorizzazione per le risorse Google Cloud. Puoi utilizzare IAM per concedere agli utenti l'accesso a GKE di Kubernetes. L'RBAC è integrato in Kubernetes e concede autorizzazioni granulari per risorse e operazioni specifiche all'interno dei cluster.
Per ulteriori informazioni su queste opzioni e su quando utilizzarle, consulta la Panoramica del controllo dell'accesso.
Fai riferimento alle istruzioni per RBAC e la guida illustrativa IAM per scoprire come utilizzarli sistemi di controllo dell'accesso.
Puoi utilizzare le autorizzazioni IAM e RBAC insieme agli spazi dei nomi per limitare le interazioni degli utenti con le risorse del cluster nella console Google Cloud. Per ulteriori informazioni, consulta Attivare l'accesso e visualizzare le risorse del cluster per spazio dei nomi.Criteri di rete
Rete cluster norme per consentirti di controllare la comunicazione tra i pod del cluster. I criteri specificano gli spazi dei nomi, le etichette e gli intervalli di indirizzi IP con cui un pod può comunicare.
Consulta le istruzioni relative alle norme della rete per istruzioni su come abilitare l'applicazione forzata dei criteri di rete su con GKE.
Segui il tutorial sui criteri di rete per scoprire come scrivere i criteri di rete.
Quote delle risorse
Le quote delle risorse gestiscono la quantità di risorse utilizzate dagli oggetti in un nello spazio dei nomi. Puoi impostare le quote in termini di utilizzo di CPU e memoria o il conteggio degli oggetti. Le quote delle risorse consentono di assicurare che nessun tenant utilizzi più del relativo la quota assegnata delle risorse del cluster.
Per ulteriori informazioni, consulta la documentazione relativa alle quote delle risorse.
Controllo dell'ammissione dei pod basato su criteri
Per impedire l'esecuzione nel tuo cluster di pod che violano i tuoi confini di sicurezza, utilizza un controller di ammissione. I controller di ammissione possono verificare le specifiche dei pod rispetto ai criteri che definisci e possono impedire l'esecuzione nel cluster dei pod che violano questi criteri.
GKE supporta i seguenti tipi di controllo di ammissione:
- Policy Controller: dichiara criteri predefiniti o personalizzati e applicali su larga scala ai cluster utilizzando i fleet. Policy Controller è un'implementazione dell'agente di criteri aperti Gatekeeper open source e una funzionalità di GKE Enterprise.
- Controller di ammissione PodSecurity: Applica criteri predefiniti corrispondenti agli standard di sicurezza dei pod in singoli cluster o in spazi dei nomi specifici.
Anti-affinità pod
Puoi utilizzare l'anti-affinità dei pod per impedire la pianificazione di pod di tenant diversi sullo stesso nodo.
I vincoli di anti-affinità si basano sui pod
etichette.
Ad esempio, la specifica del pod riportata di seguito descrive un pod con l'etichetta "team":
"billing"
e una regola di anti-affinità che impedisce la pianificazione del pod insieme ai pod senza l'etichetta.
apiVersion: v1
kind: Pod
metadata:
name: bar
labels:
team: "billing"
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- topologyKey: "kubernetes.io/hostname"
labelSelector:
matchExpressions:
- key: "team"
operator: NotIn
values: ["billing"]
Lo svantaggio di questa tecnica è che gli utenti malintenzionati potrebbero aggirare la regola applicando l'etichetta team: billing
a un pod arbitrario. Anti-affinità pod
da sola non è in grado di applicare in modo sicuro i criteri sui cluster con tenant non attendibili.
Fai riferimento al pod anti-affinità per ulteriori informazioni.
Nodi dedicati con incompatibilità e tolleranze
Le incompatibilità dei nodi sono un altro modo per controllare la pianificazione dei carichi di lavoro. Puoi utilizzare le incompatibilità dei nodi per prenotare nodi specializzati da utilizzare da parte di determinati tenant. Ad esempio, puoi dedicare nodi con GPU ai tenant specifici i cui carichi di lavoro richiedono GPU. Per i cluster Autopilot, le tolleranze dei nodi sono supportate solo separazione dei carichi di lavoro. Le incompatibilità dei nodi vengono aggiunte automaticamente dal provisioning automatico dei nodi, se necessario.
Per dedicare un pool di nodi a un determinato tenant, applica un'alterazione con effect: "NoSchedule"
al pool di nodi. Poi
solo i pod con una tolleranza corrispondente possono essere pianificati sui nodi nel nodo
piscina.
Lo svantaggio di questa tecnica è che utenti malintenzionati potrebbero aggiungere tolleranze i propri pod per ottenere l'accesso al pool di nodi dedicato. Incompatibilità e tolleranze dei nodi da sola non è in grado di applicare in modo sicuro i criteri sui cluster con tenant non attendibili.
Per ulteriori informazioni, vedi Incompatibilità e tolleranze nella documentazione di Kubernetes.