Best practice per l'utilizzo dei gateway in uscita di Cloud Service Mesh su cluster GKE
Questo documento descrive come utilizzare i gateway di uscita di Cloud Service Mesh e altri controlli di Google Cloud per proteggere il traffico in uscita (di uscita) dai carichi di lavoro di cui è stato eseguito il deployment in un cluster Google Kubernetes Engine (GKE). Questi controlli possono limitare le connessioni ai servizi esterni in base all'identità dell'applicazione di origine, allo spazio dei nomi di un team, al dominio di destinazione e ad altre proprietà delle richieste in uscita.
C'è un tutorial sugli annunci companion che puoi utilizzare come modello per configurare i controlli in uscita cluster.
I destinatari di questo documento includono rete, piattaforma e tecnici della sicurezza che amministrano i cluster GKE utilizzati da uno team di distribuzione del software. I controlli descritti qui potrebbero essere particolarmente utili per le organizzazioni che devono dimostrare la conformità alle normative (ad esempio, GDPR e PCI).
Introduzione
L’approccio tradizionale alla sicurezza di rete è stato quello di definire perimetri attorno a un gruppo di applicazioni. I firewall vengono utilizzati in questi perimetri per consentire o negare il traffico in base agli indirizzi IP di origine e di destinazione, garantendo al contempo l'attendibilità delle applicazioni e del traffico contenuti nel perimetro. Tuttavia, questa fiducia comporta dei rischi. Un malintenzionato interno al dominio o chiunque che comprometta il perimetro può muoversi liberamente all’interno della rete, accedere esfiltrare i dati, attaccare sistemi di terze parti e interferire con l’amministrazione sistemi operativi.
Quando i carichi di lavoro in esecuzione su un cluster Kubernetes effettuano connessioni in uscita verso gli host Internet, l'applicazione dei controlli di sicurezza tradizionali basati sull'IP può essere complicata perché:
Gli indirizzi IP dei pod non rappresentano in modo adeguato l'identità carico di lavoro durante la connessione. In un ambiente Kubernetes, l'IP del pod vengono assegnati in modo temporaneo e vengono riciclati spesso man mano che i pod vengono e via.
Spesso è impossibile identificare un insieme di indirizzi IP piccolo e fisso per determinati host di destinazione. Gli indirizzi IP cambiano di frequente e variano in base regione e può essere preso da intervalli di grandi dimensioni o rappresentare cache, proxy CDN.
Più team che condividono lo stesso cluster multi-tenant, con un di IP di origine, potrebbero avere connettività esterna diversa i tuoi requisiti.
Cloud Service Mesh è il servizio completamente supportato distribuzione del servizio Istio open source mesh. Un mesh di servizi consente di connettere, gestire e proteggere in modo uniforme la comunicazione tra le applicazioni. I mesh di servizi adottano un approccio incentrato sull'applicazione e utilizzano identità di applicazioni attendibili anziché un indirizzo IP di rete incentrato l'importanza di un approccio umile.
Puoi eseguire il deployment di un mesh di servizi in modo trasparente, senza dover modificare il codice dell'applicazione. L'utilizzo di un service mesh consente di disaccoppiare il lavoro dei team di sviluppo incaricati di fornire e rilasciare le funzionalità dell'applicazione dalle responsabilità degli amministratori di rete, fornendo un controllo dichiarativo del comportamento della rete.
Cloud Service Mesh offre l'opzione di deployment proxy di forwarding autonomi,noti come gateway in uscita, sul perimetro del mesh. Questa guida spiega come combinare le funzionalità del proxy gateway in uscita con funzionalità Google Cloud per controllare, autorizzare e osservare il traffico in uscita da carichi di lavoro con deployment in un cluster GKE.
Architettura di difesa in profondità
Il diagramma seguente mostra un'architettura che adotta un approccio alla difesa in profondità al controllo granulare del traffico in uscita per un cluster utilizzato i team di sicurezza. I controlli si basano sia su Livello 4 (trasporti) e Livello 7 (applicazione) i controlli di rete.
L'architettura utilizza le seguenti risorse e controlli:
Un cluster GKE privato: i nodi di un cluster GKE privato hanno solo indirizzi IP interni e non sono connessi a internet per impostazione predefinita.
Cloud NAT: Cloud NAT consente l'accesso a internet in uscita dal cluster privato.
Regole firewall Virtual Private Cloud (VPC): Configuri le regole firewall VPC per applicare il livello 4 (trasporto) alle connessioni da e verso i nodi in GKE in un cluster Kubernetes. Puoi applicare le regole firewall VPC alle VM in base agli account di servizio o ai tag di rete.
Pool di nodi GKE con account di servizio diversi: ti consente di configurare regole di firewall diverse da applicare a seconda del pool di nodi a cui appartiene un nodo.
Spazi dei nomi Kubernetes: crea spazi dei nomi per ogni team per fornire isolamento e controllo amministrativo delegato. Gli amministratori di rete utilizzano un ambito del nome dedicato per eseguire il deployment del gateway in uscita e per configurare il routing verso gli host esterni.
Kubernetes norme della rete: I criteri di rete consentono di applicare i controlli di livello 4 ai pod. Ogni criterio di rete ha ambito in uno spazio dei nomi e può essere definito in modo più granulare per determinati pod in uno spazio dei nomi.
Un gateway in uscita: il traffico che esce dai pod all'interno del mesh viene indirizzato tramite proxy gateway in uscita dedicati in esecuzione su nodi dedicati. Esegui il deployment gateway in uscita con Horizontal Pod Autoscaler per fare lo scale up e lo scale down del numero di repliche in base al traffico.
Criteri di autorizzazione: utilizzi i criteri di autorizzazione del mesh per applicare controlli di livello 7 (applicazione) al traffico tra i pod all'interno del mesh e al traffico in uscita dal mesh.
Risorse sidecar: utilizza le risorse sidecar per controllare l'ambito di configurazione dei proxy sidecar in esecuzione in ogni pod del carico di lavoro. Puoi utilizzare la risorsa Sidecar per configurare i namespace, i pod e i servizi esterni visibili a un carico di lavoro.
Accesso privato a Google: Questa opzione consente ai nodi e ai pod del cluster privato di accedere alle API di Google e di estrarre le immagini Docker da Container Registry.
GKE Workload Identity: Con Workload Identity, puoi utilizzare Identity and Access Management (IAM) per concedere autorizzazioni API a specifiche seguenti carichi di lavoro il principio del privilegio minimo, senza dover gestire i secret.
Configurazione dei controlli in uscita
Se utilizzi il gateway in uscita per proteggere il traffico dalla rete mesh, configurare i controlli per la difesa in profondità descritti in .
Utilizzare GKE privato con Cloud NAT
Laddove la sicurezza è importante, il primo requisito di molte organizzazioni è la evitare di assegnare indirizzi IP pubblici ai propri carichi di lavoro. Un cluster GKE privato soddisfa questo requisito. Puoi configurare in modalità VPC Native sui tuoi server in modo che ai pod e ai servizi vengano assegnati indirizzi IP nel VPC. Gli indirizzi IP dei pod nativi VPC sono instradabili in modo nativo all'interno rete VPC.
Alcuni carichi di lavoro potrebbero richiedere l'accesso a servizi esterni alla rete VPC. a internet. Per consentire ai carichi di lavoro di connettersi a host esterni senza doverli dotare di indirizzi IP pubblici, configura Cloud NAT per fornire la Network Address Translation (NAT).
Assicurati che Cloud NAT sia configurato in modo che un gateway in uscita può effettuare un numero sufficiente di connessioni simultanee destinazioni esterne. Puoi evitare l'esaurimento delle porte e i problemi con ritardi durante il riutilizzo della connessione impostando il numero minimo di porte per VM in modo appropriato. Per ulteriori dettagli, consulta la panoramica dell'indirizzo e della porta Cloud NAT. L'aumento del numero di repliche dei gateway in uscita può aiutare a ridurre le probabilità di conflitti di mappatura indipendenti dagli endpoint.
Configurare l'accesso privato Google per le API e i servizi Google
È probabile che i tuoi carichi di lavoro debbano avere accesso alle API e ai servizi di Google. Utilizza l'accesso privato Google con
Zone DNS personalizzate
per consentire la connettività da subnet VPC private alle API di Google utilizzando un set
con quattro indirizzi IP. Quando utilizzi questi indirizzi IP, non è necessario che i pod abbiano indirizzi IP esterni e il traffico non esce mai dalla rete di Google. Tu
può usare private.googleapis.com
(199.36.153.8/30
) o
restricted.googleapis.com
(199.36.153.4/30
), a seconda che tu sia
utilizzando
Controlli di servizio VPC.
Utilizzare Workload Identity e IAM per proteggere ulteriormente le API e i servizi Google
Utilizzo Identità carico di lavoro è il metodo consigliato per consentire ai carichi di lavoro GKE di autenticare con le API di Google e per consentire agli amministratori di applicare il "privilegio minimo" autorizzazione i controlli tramite IAM.
Quando utilizzi l'accesso privato Google, Workload Identity e IAM, consente in modo sicuro ai pod del carico di lavoro di bypassare il gateway in uscita e di connettersi direttamente alle API e ai servizi Google.
Utilizza gli spazi dei nomi Kubernetes per il controllo amministrativo
Gli spazi dei nomi sono risorse organizzative utili negli ambienti in cui ci sono molti utenti, team o tenant. Possono essere considerati una sorta di e consentono la responsabilità amministrativa di gruppi di Kubernetes risorse da delegare a amministratori diversi.
Gli spazi dei nomi sono una funzionalità importante per l'isolamento del controllo amministrativo. Tuttavia, non forniscono, per impostazione predefinita, l'isolamento dei nodi o del piano dati, o isolamento della rete.
Cloud Service Mesh si basa sugli spazi dei nomi Kubernetes utilizzandoli come unità di tenancy all'interno di un mesh di servizi. I criteri di autorizzazione mesh e le risorse collaterali possono limita la visibilità e l'accesso in base allo spazio dei nomi, all'identità e al livello 7 (applicazione) del traffico di rete.
Allo stesso modo, puoi utilizzare i criteri di rete di Kubernetes per consentire o negare connessioni di livello 4 (trasporto).
Esegui gateway in uscita su nodi gateway dedicati
L'esecuzione di gateway di uscita sui nodi di un pool di nodi gateway dedicato offre diversi vantaggi. I nodi rivolti all'esterno possono utilizzare configurata con protezione avanzata, e configurare le regole firewall VPC per impedire ai carichi di lavoro di raggiungere per gli host esterni. La scalabilità automatica dei pool di nodi può essere eseguita in modo indipendente il gestore della scalabilità automatica dei cluster.
Per consentire il controllo amministrativo separato del gateway in uscita, eseguine il deployment in uno spazio dei nomi istio-egress
dedicato. Tuttavia, gli spazi dei nomi sono una risorsa a livello di cluster e non è possibile utilizzarli per controllare su quali nodi viene eseguito il deployment. Per il controllo del deployment, utilizza un
selettore nodi
per il deployment del gateway in uscita, in modo che venga eseguito su nodi etichettati come
dei membri del pool di nodi del gateway.
Assicurati che solo i pod gateway possano essere eseguiti sui nodi gateway. Gli altri pod dovrebbero essere respinti dai nodi gateway, altrimenti i controlli in uscita potrebbero essere bypassati. È possibile impedire l'esecuzione dei carichi di lavoro su determinati nodi utilizzando incompatibilità e tolleranze. Devi incompatibile i nodi nel pool di nodi del gateway e aggiungere un'etichetta il deployment del gateway in uscita.
Applica le regole del firewall VPC a nodi specifici
Configuri il routing del mesh di servizi per indirizzare il traffico in uscita dai carichi di lavoro in esecuzione nel pool di nodi predefinito attraverso i gateway in uscita nel pool di nodi del gateway. Tuttavia, la configurazione di routing del mesh non deve essere considerata attendibile come confine di sicurezza perché esistono vari modi in cui un carico di lavoro può aggirare i proxy del mesh.
Per impedire ai carichi di lavoro delle applicazioni di connettersi direttamente a host esterni, Applicare regole firewall in uscita restrittive ai nodi nel pool di nodi predefinito. Applicare regole firewall separate ai nodi del gateway in modo che il gateway in uscita I pod in esecuzione su questi pod possono connettersi a host esterni.
Quando crei una regola firewall VPC, specifichi le porte e i protocolli consentiti o vietati dalla regola firewall e la direzione del traffico a cui si applica. Le regole in uscita si applicano al traffico in uscita
Le regole in entrata si applicano al traffico in entrata. Il valore predefinito per il traffico in uscita è allow
mentre il valore predefinito per il traffico in entrata è deny
.
Le regole firewall vengono applicate in ordine in base a un numero di priorità che puoi specificare. Le regole firewall sono stateful, il che significa che se il traffico specifico se una VM è consentita, è consentito anche restituire il traffico utilizzando la stessa connessione.
Il seguente diagramma mostra come è possibile applicare regole firewall separate ai nodi
in due diversi pool di nodi in base all'account di servizio assegnato a un nodo. Nella
in questo caso, una regola firewall predefinita deny all
nega l'accesso in uscita per l'intero
in un VPC. Per evitare di eseguire l'override delle regole firewall predefinite essenziali per il tuo
un cluster per funzionare, la regola deny all
deve utilizzare una priorità bassa come
65535 Viene applicata una regola firewall in uscita additiva e con priorità più alta
ai nodi gateway per consentire la connessione diretta a host esterni sulle porte
80 e 443. Il pool di nodi predefinito non ha accesso agli host esterni.
Utilizzare i criteri di rete di Kubernetes come firewall per pod e spazi dei nomi
Utilizza le funzionalità di Criteri di rete di Kubernetes di applicare un ulteriore livello di sicurezza come parte di una strategia di difesa in profondità. I criteri di rete hanno come ambito gli spazi dei nomi e operano a livello 4 (di trasporto). Con i criteri di rete, puoi limitare il traffico in entrata e in uscita:
- Tra spazi dei nomi
- Ai pod all'interno di uno spazio dei nomi
- A determinate porte e blocchi IP.
Dopo che un criterio di rete ha selezionato i pod in uno spazio dei nomi, tutte le connessioni non esplicitamente consentiti vengono rifiutati. Quando vengono applicati più criteri di rete, il risultato è additivo e rappresenta l'unione dei criteri. L'ordine in cui vengono applicati i criteri non è importante.
Il tutorial companion include i seguenti esempi di criteri di rete:
- Consenti le connessioni in uscita dagli spazi dei nomi dei carichi di lavoro agli spazi dei nomi
istio-system
eistio-egress
. I pod devono poter connettersi versoistiod
e al gateway in uscita. - Consenti ai carichi di lavoro di eseguire query DNS dagli spazi dei nomi dei carichi di lavoro alla porta 53 nello spazio dei nomi
kube-system
. - Se vuoi, consenti ai carichi di lavoro nello stesso spazio dei nomi di connettersi tra loro.
- Facoltativamente, consenti le connessioni in uscita tra gli spazi dei nomi utilizzati diversi team di applicazioni.
- Consenti le connessioni in uscita dagli spazi dei nomi dei carichi di lavoro ai VIP per API di Google (esposte mediante l'accesso privato Google). Cloud Service Mesh fornisce una CA gestita e la espone come API, pertanto i proxy sidecar devono essere in grado di connettersi. È anche probabile che alcuni carichi di lavoro necessitano dell'accesso alle API di Google.
- Consenti connessioni in uscita dagli spazi dei nomi dei carichi di lavoro ai metadati GKE in modo che i proxy collaterali e i carichi di lavoro possano creare metadati query e l'autenticazione nelle API di Google.
Per impostazione predefinita, quando un proxy sidecar viene inserito in un pod di carico di lavoro, le regole iptables
vengono programmate in modo che il proxy acquisisca tutto il traffico TCP in entrata e in uscita. Tuttavia, come accennato in precedenza, esistono modi per i carichi di lavoro per aggirare il proxy. Le regole firewall VPC impediscono l'accesso in uscita diretto dai nodi predefiniti che eseguono i carichi di lavoro. Puoi utilizzare i criteri di rete Kubernetes per assicurarti che non sia possibile alcun traffico in uscita diretto esterno dagli spazi dei nomi dei carichi di lavoro e che sia possibile il traffico in uscita verso lo spazio dei nomi istio-egress
.
Se controlli anche l'ingresso con i criteri di rete, devi creare criteri di ingresso corrispondenti a quelli di uscita.
Configurazione e sicurezza di Anthos Service Mesh
I carichi di lavoro in esecuzione in un mesh di servizi non vengono identificati in base ai relativi indirizzi IP. Cloud Service Mesh assegna un'identità efficace e verificabile di certificato X.509 e per ogni carico di lavoro. La comunicazione attendibile tra i carichi di lavoro viene stabilita utilizzando connessioni TLS reciproca (mTLS) autenticate e criptate.
L'uso dell'autenticazione mTLS con un'identità ben definita per ogni applicazione consente di usare i criteri di autorizzazione della rete mesh per avere un controllo granulare sul modo in cui dei carichi di lavoro possono comunicare con servizi esterni.
Sebbene il traffico possa uscire dal mesh direttamente dai proxy sidecar, se hai bisogno di un maggiore controllo, ti consigliamo di instradarlo tramite i gateway in uscita come descritto in questa guida.
Gestire la configurazione dei controlli in uscita in uno spazio dei nomi dedicato
Gli amministratori di rete possono gestire centralmente i controlli utilizzando un server
istio-egress
per la configurazione mesh relativa al traffico in uscita. Come consigliato in precedenza, esegui il deployment del gateway in uscita nello spazio dei nomi istio-egress
. Tu
può creare e gestire le voci di servizio, i gateway e i criteri di autorizzazione
nello spazio dei nomi.
Richiedi la configurazione esplicita delle destinazioni esterne
Assicurati che i proxy mesh siano programmati solo con route verso host esterni che
sono definite in modo esplicito
nel registro del mesh di servizi. Imposta la modalità del criterio per il traffico in uscita su REGISTRY_ONLY
in una risorsa sidecar predefinita per ogni spazio dei nomi. L'impostazione del criterio di traffico in uscita per il mesh non deve essere considerata, da sola, un controllo del perimetro sicuro.
Definire le destinazioni esterne con le voci di servizio
Configura Service Entries per registrare esplicitamente gli host esterni nel registry dei servizi del mesh. Per impostazione predefinita, le voci di servizio sono visibili a tutti gli spazi dei nomi. Utilizza la Attributo esportazioneTo per controllare a quali spazi dei nomi è visibile una voce di servizio. Voci di servizio determinare le route in uscita configurate nei proxy mesh, ma che di per sé non essere considerati un controllo sicuro per determinare quali a cui possono connettersi i carichi di lavoro host.
Configura il comportamento del gateway in uscita con la risorsa Gateway
Configura il comportamento del bilanciamento del carico dei gateway in uscita utilizzando la risorsa Gateway. Il bilanciatore del carico può essere configurato per un particolare insieme di host, protocolli e porte associati al deployment di un gateway in uscita. Per Ad esempio, un gateway potrebbe essere configurato per il traffico in uscita verso le porte 80 e 443 per qualsiasi host esterno.
In Cloud Service Mesh 1.6 e versioni successive, mTLS automatico è abilitato per impostazione predefinita. Con mTLS automatico, un proxy sidecar client rileva automaticamente se il server ha un sidecar. Il lato client invia mTLS ai carichi di lavoro con file collaterali e invia traffico di testo normale ai carichi di lavoro senza file collaterali. Anche con mTLS automatico, il traffico inviato al gateway in uscita dai proxy sidecar non utilizza automaticamente mTLS. a indicare il modo in cui le connessioni al gateway in uscita devi impostare la modalità TLS sulla risorsa Gateway. Se possibile, utilizza mTLS per le connessioni dai proxy sidecar gateway in uscita.
È possibile consentire ai carichi di lavoro di avviare autonomamente le connessioni TLS (HTTPS). Se i carichi di lavoro originano le connessioni TLS, in genere sulla porta 443,
devi configurare il gateway in modo che utilizzi la modalità passthrough
per le connessioni su quel
una porta. Tuttavia, l'utilizzo della modalità passthrough
significa che il gateway non può essere applicato
criteri di autorizzazione basati sull'identità del carico di lavoro o delle proprietà
della richiesta criptata. Inoltre, attualmente non è possibile utilizzare
mTLS e passthrough
insieme.
Configurare i servizi virtuali e le regole di destinazione per instradare il traffico attraverso il gateway
Utilizza Servizi virtuali e Regole di destinazione per configurare l'instradamento del traffico dai proxy sidecar tramite il gateway di uscita alle destinazioni esterne. I servizi virtuali definiscono regole per l'associazione di determinate tipologie di traffico. Il traffico corrispondente viene quindi inviato a una destinazione. Destinazione le regole possono definire sottoinsiemi (ad esempio, il gateway in uscita o un host esterno) e come deve essere gestito il traffico quando viene instradato alla destinazione.
Utilizza una singola regola di destinazione per più host di destinazione per specificare esplicitamente come deve essere protetto il traffico dai proxy sidecar al gateway. Come spiegato in precedenza, il metodo preferito è che i carichi di lavoro inviino richieste in testo normale e che il proxy sidecar origini una connessione mTLS al gateway.
Utilizza una regola di destinazione per ogni host esterno per configurare il gateway di uscita in modo da eseguire l'upgrade delle richieste HTTP semplici in modo da utilizzare una connessione TLS (HTTPS) durante l'inoltro alla destinazione. L'upgrade di una connessione in testo normale a TLS è spesso definito come origine TLS.
Controllare l'ambito della configurazione del proxy con la risorsa Sidecar
Configura una risorsa sidecar predefinita per ogni spazio dei nomi per controllare il comportamento dei proxy sidecar. Utilizza la proprietà di uscita della risorsa Sidecar per controllare e ridurre al minimo gli host di destinazione configurati negli ascoltatori in uscita dei proxy. Una tipica configurazione minima può Includi le seguenti destinazioni per ogni spazio dei nomi:
- Pod nello stesso spazio dei nomi
- API e servizi Google
- Il server di metadati GKE
- Host esterni specifici che sono stati configurati utilizzando voci di servizio
La configurazione dei listener in uscita nei proxy sidecar non dovrebbe come controlli di sicurezza.
Una best practice consiste nell'utilizzare le risorse Sidecar per limitare le dimensioni del proxy configurazione. Per impostazione predefinita, ogni proxy sidecar in un mesh è configurato per consentire di inviare traffico a tutti gli altri proxy. Il consumo di memoria del file collaterale e il piano di controllo possono essere ridotti notevolmente dei proxy che rimandano solo agli host di cui hanno bisogno per comunicare con.
Utilizza il criterio di autorizzazione per consentire o negare il traffico al gateway in uscita
AuthorizationPolicy è una risorsa che consente di configurare criteri di controllo dell'accesso granulari per il traffico mesh. Puoi creare criteri per consentire o negare il traffico in base a proprietà dell'origine, della destinazione o del traffico stesso (ad esempio, un host o le intestazioni di una richiesta HTTP).
Per consentire o negare le connessioni in base all'identità o al nome del visibile del carico di lavoro di origine, la connessione al gateway di uscita deve essere autenticata con mTLS. Le connessioni dai sidecar al gateway di uscita non utilizzano automaticamente mTLS, pertanto la regola di destinazione per le connessioni al gateway deve specificare esplicitamente la modalità TLS ISTIO_MUTUAL
.
Per consentire o negare le richieste al gateway utilizzando i criteri di autorizzazione, per i carichi di lavoro devono inviare semplici richieste HTTP a destinazioni esterne al mesh. I proxy sidecar possono quindi inoltrare la richiesta al gateway utilizzando mTLS e il gateway può dare origine a una connessione TLS sicura all'host esterno.
Per supportare i requisiti in uscita di diversi team e applicazioni, configurare il "privilegio minimo" separato di autorizzazione per spazio dei nomi carico di lavoro. Ad esempio, possono essere applicati criteri diversi al gateway in uscita specificando regole basate sullo spazio dei nomi del carico di lavoro di origine e sugli attributi della richiesta nel seguente modo:
Se lo spazio dei nomi di origine è team-x E l'host di destinazione è example.com, consenti il traffico.
Se lo spazio dei nomi di origine è team-y E l'host di destinazione è httpbin.org E il percorso è /status/418, consenti il traffico.
Tutte le altre richieste vengono rifiutate.
Configura il gateway in uscita in modo che abbia origine le connessioni TLS (HTTPS) verso la destinazione
Configura le regole di destinazione in modo che il gateway in uscita origini connessioni TLS (HTTPS) a destinazioni esterne.
Affinché originazione TLS al gateway in uscita funzioni, i carichi di lavoro devono inviare richieste HTTP. Se il carico di lavoro avvia TLS, il gateway in uscita aggrega TLS su rispetto al TLS originale e le richieste al servizio esterno non andranno a buon fine.
Poiché i carichi di lavoro inviano richieste HTTP semplici, configura proxy sidecar per stabilire una connessione mTLS durante l'invio al gateway. Il gateway in uscita termina quindi la connessione mTLS e avvia una normale connessione TLS (HTTPS) all'host di destinazione.
Questo approccio offre diversi vantaggi:
Puoi utilizzare un criterio di autorizzazione per consentire o negare il traffico in base agli attributi del carico di lavoro di origine e delle richieste.
Il traffico tra i pod del carico di lavoro e il gateway in uscita è criptato e autenticato (mTLS) e il traffico tra il gateway in uscita e la destinazione è criptato (TLS/HTTPS).
All'interno della mesh, i proxy sidecar possono osservare e agire sulle proprietà di richieste HTTP (ad esempio, intestazioni), offrendo opzioni aggiuntive per osservabilità e controllo.
Il codice dell'applicazione può essere semplificato. Non è necessario che gli sviluppatori gestire certificati o librerie client HTTPS e il mesh di servizi può garantire una comunicazione sicura con crittografie standard e aggiornate.
Le connessioni TLS originate dal gateway in uscita ai servizi esterni possono essere riutilizzate per il traffico di molti pod. Il riutilizzo della connessione è molto più è efficiente e riduce il rischio di raggiungere i limiti di connessione.
DNS, nomi host e caratteri jolly
Quando indirizzi, neghi o consenti il traffico in base all'host di destinazione, devi avere piena fiducia nell'integrità dei tuoi sistemi DNS per risolvere i nomi DNS nell'indirizzo IP corretto. Nei cluster Kubernetes Engine, il servizio DNS Kubernetes gestisce le query DNS e, a sua volta, delega le query esterne al server di metadati GKE e al DNS interno. Imposta l'attributo resolution delle voci di servizio su DNS quando esegui il routing verso host esterni, in modo che i proxy sidecar siano responsabili dell'esecuzione di query DNS.
Cloud Service Mesh può instradare il traffico in base a host con caratteri jolly. Il caso più semplice è un carattere jolly per gli host che condividono un nome comune e sono ospitati su un insieme comune di server. Ad esempio, se un singolo insieme di server può pubblicare i domini
corrisponde a *.example.com
, si può utilizzare un host con caratteri jolly.
Un gateway in uscita standard non può inoltrare in base a host wildcard più generali e arbitrari (ad esempio *.com
) a causa di alcune limitazioni del proxy Envoy utilizzato da Istio. Envoy può solo instradare il traffico a host predefiniti,
o all'indirizzo IP di destinazione originale di una richiesta.
Quando utilizzi un gateway in uscita, l'IP di destinazione originale della richiesta viene perso perché viene sostituito con l'IP del gateway e gli host di destinazione arbitrari non possono essere preconfigurati.
Applicazione amministrativa dei criteri
Utilizza il controllo degli accessi basato sui ruoli (RBAC) di Kubernetes
Solo gli amministratori autorizzati devono essere in grado di configurare i controlli di uscita.
Configura
Controllo degli accessi basato su ruoli (RBAC) di Kubernetes
per evitare l'elusione non autorizzata dei controlli in uscita. Applica i ruoli RBAC in modo che solo gli amministratori di rete possano gestire gli spazi dei nomi istio-egress
,istio-system,
e kube-system
e le seguenti risorse:
- Sidecar
- ServiceEntry
- Gateway
- AuthorizationPolicy
- NetworkPolicy
Limitare l'utilizzo delle tolleranze
Come descritto in precedenza, puoi utilizzare le incompatibilità e le tolleranze per impedire il deployment dei pod di carico di lavoro su nodi gateway. Tuttavia, per impostazione predefinita, non esiste nulla che impedisca il deployment dei carichi di lavoro con una tolleranza per i nodi gateway e, di conseguenza, consenta di bypassare i controlli di uscita. Se è possibile applicare il controllo amministrativo centralizzato sulle pipeline di deployment, puoi utilizzarle per applicare limitazioni all'utilizzo di determinate chiavi di tolleranza.
Un altro approccio consiste nell'utilizzare Controllo di ammissione Kubernetes. Anthos include un componente chiamato Policy Controller che funge da controller di ammissione Kubernetes e convalida che i deployment e che soddisfino i vincoli del criterio specificati.
Assicurati che il traffico venga registrato
Spesso è necessario registrare tutto il traffico che attraversa i perimetri di rete. Il logging del traffico è essenziale se devi dimostrare la conformità alle normative comuni sulla protezione dei dati. I log del traffico vengono inviati direttamente a Cloud Logging e è possibile accedervi dalle dashboard di Cloud Service Mesh nella console Google Cloud. Puoi filtrare i log in base a vari attributi, tra cui origine/destinazione, identità, spazio dei nomi, attributi del traffico e latenza.
Per consentire il debug semplice con kubectl
, attiva il logging del traffico per stdout
quando
installando Cloud Service Mesh utilizzando
Impostazione accessLogFile.
Gli audit log vengono inviati a Cloud Logging ogni volta che la CA Mesh crea un certificato per un carico di lavoro.
Valuta la possibilità di utilizzare un cluster separato per i gateway in uscita all'interno di mesh multi-cluster
Cloud Service Mesh può essere implementato in più di un cluster GKE. Le mesh multicluster introducono nuove possibilità per controllare il traffico in uscita, ma anche alcune limitazioni.
Anziché eseguire il deployment del gateway in uscita in un pool di nodi dedicato, puoi eseguire il deployment il gateway a un cluster separato che non esegue i normali carichi di lavoro. L'utilizzo di un cluster distinto offre un isolamento simile tra carichi di lavoro e gateway, evitando al contempo la necessità di utilizzare contaminazioni e tolleranze. Il gateway in uscita può condividere il cluster separato con i gateway in entrata o altri servizi centrali.
Puoi utilizzare i criteri di rete di Kubernetes nei deployment multi-cluster, ma poiché operano al livello 4 (trasporto), non possono limitare in base allo spazio dei nomi o al pod di destinazione.
Passaggi successivi
- Prova il tutorial complementare
- Consulta la guida alla protezione di GKE
- Scopri come gestire la configurazione e i criteri in tutta l'infrastruttura con Anthos Configuration Management
- Per altre architetture di riferimento, diagrammi e best practice, visita il Centro architetture di Google Cloud.