Best practice per il networking GKE


Questo documento illustra le best practice per la configurazione delle opzioni di networking per i cluster Google Kubernetes Engine (GKE). È pensata per essere una guida alla pianificazione dell'architettura per Cloud Architect e Network Engineer con suggerimenti di configurazione dei cluster applicabili alla maggior parte dei cluster GKE. Prima di creare i tuoi cluster GKE, ti consigliamo di esaminare tutte le sezioni di questo documento per comprendere le opzioni di networking supportate da GKE e le relative implicazioni.

Le opzioni di networking che scegli influiscono sull'architettura dei tuoi cluster GKE. Una volta configurate, alcune di queste opzioni non possono essere modificate senza ricreare il cluster.

Questo documento non è stato pensato per introdurre i concetti o la terminologia di networking di Kubernetes e presuppone che tu abbia già un certo livello di concetti generali di networking e conoscenza del networking di Kubernetes. Per ulteriori informazioni, consulta la panoramica della rete GKE.

Durante la revisione di questo documento, considera quanto segue:

  • Come prevedi di esporre internamente i carichi di lavoro alla tua rete Virtual Private Cloud (VPC), ad altri carichi di lavoro nel cluster, in altri cluster GKE o esternamente a internet.
  • Come prevedi di scalare i tuoi carichi di lavoro.
  • I tipi di servizi Google che vuoi utilizzare.

Per un elenco di controllo riepilogativo di tutte le best practice, consulta il riepilogo dell'elenco di controllo.

Progettazione del VPC

Durante la progettazione delle reti VPC, segui le best practice per la progettazione VPC.

La seguente sezione fornisce alcuni suggerimenti specifici di GKE per la progettazione di reti VPC.

Usa cluster nativi di VPC

Ti consigliamo di utilizzare cluster nativi VPC. I cluster nativi di VPC utilizzano intervalli di indirizzi IP alias sui nodi GKE e sono necessari per i cluster GKE privati e per la creazione di cluster su VPC condivisi e offrono molti altri vantaggi. Per i cluster creati in modalità Autopilot, la modalità nativa del VPC è sempre attiva e non può essere disattivata.

I cluster nativi di VPC scalano più facilmente rispetto a quelli basati su route senza consumare le route di Google Cloud e sono quindi meno suscettibili a raggiungere i limiti di routing.

I vantaggi dell'utilizzo di cluster nativi di VPC vanno di pari passo con il supporto IP alias. Ad esempio, i gruppi di endpoint di rete (NEG) possono essere utilizzati solo con indirizzi IP secondari, quindi sono supportati solo su cluster nativi VPC.

Usa reti VPC condivise

I cluster GKE richiedono un'attenta pianificazione degli indirizzi IP. La maggior parte delle organizzazioni tende ad avere una struttura di gestione centralizzata con un team di amministrazione di rete che può allocare uno spazio di indirizzi IP per i cluster e un amministratore della piattaforma per il funzionamento dei cluster. Questo tipo di struttura organizzativa funziona bene con l'architettura di rete VPC condiviso di Google Cloud. Nell'architettura di rete VPC condiviso, un amministratore di rete può creare subnet e condividerle con VPC. Puoi creare cluster GKE in un progetto di servizio e utilizzare le subnet condivise dal VPC condiviso nel progetto host. Il componente indirizzo IP rimane nel progetto host, mentre gli altri componenti del cluster risiedono nel progetto di servizio.

In generale, una rete VPC condiviso è un'architettura utilizzata di frequente, adatta alla maggior parte delle organizzazioni con un team di gestione centralizzato. Ti consigliamo di utilizzare le reti VPC condiviso per creare le subnet per i cluster GKE ed evitare conflitti di indirizzi IP in tutta l'organizzazione. Potresti anche voler usare i VPC condivisi per la governance delle funzioni operative. Ad esempio, puoi avere un team di rete che lavora solo sui componenti di rete e l'affidabilità e un altro team che lavora su GKE.

Strategie di gestione degli indirizzi IP

Tutti i cluster Kubernetes, inclusi i cluster GKE, richiedono un indirizzo IP univoco per ogni pod.

Per saperne di più, consulta il modello di networking di GKE.

In GKE, tutti questi indirizzi IP sono instradabili in tutta la rete VPC. Di conseguenza, la pianificazione degli indirizzi IP è necessaria perché gli indirizzi non possono sovrapporsi allo spazio di indirizzi IP interni utilizzato on-premise o in altri ambienti connessi. Le sezioni seguenti suggeriscono strategie per la gestione degli indirizzi IP con GKE.

Pianifica l'allocazione degli indirizzi IP richiesta

I cluster privati sono consigliati e sono ulteriormente discussi nella sezione Sicurezza di rete. Nel contesto dei cluster privati, sono supportati solo i cluster nativi di VPC che richiedono i seguenti intervalli di indirizzi IP:

  • Intervallo di indirizzi IP del piano di controllo: utilizza una subnet /28 all'interno degli intervalli privati di indirizzi IP inclusi nella specifica RFC 1918. Devi assicurarti che questa subnet non si sovrapponga a nessun altro routing tra domini (CIDR) senza classe nella rete VPC.
  • Subnet nodo: la subnet con l'intervallo di indirizzi IP principali che vuoi allocare a tutti i nodi nel cluster. Anche i servizi di tipo LoadBalancer che utilizzano l'annotazione cloud.google.com/load-balancer-type: "Internal" utilizzano questa subnet per impostazione predefinita. Puoi inoltre utilizzare una subnet dedicata per i bilanciatori del carico interni.
  • Intervallo di indirizzi IP dei pod: l'intervallo IP allocato per tutti i pod nel cluster. GKE esegue il provisioning di questo intervallo come alias della subnet. Per maggiori informazioni, consulta Intervalli di indirizzi IP per i cluster nativi VPC
  • Intervallo di indirizzi IP del servizio: l'intervallo di indirizzi IP allocato per tutti i servizi nel cluster. GKE esegue il provisioning di questo intervallo come alias della subnet.

Per i cluster privati, devi definire una subnet di nodi, un intervallo di indirizzi IP del pod e un intervallo di indirizzi IP del servizio.

Se vuoi utilizzare lo spazio di indirizzi IP in modo più efficiente, consulta Ridurre l'utilizzo degli indirizzi IP interni in GKE.

L'intervallo di indirizzi IP del piano di controllo è dedicato al piano di controllo gestito da GKE che risiede in un progetto tenant gestito da Google in peering con il tuo VPC. Questo intervallo di indirizzi IP non deve sovrapporsi ad alcun indirizzo IP nel gruppo di peering VPC perché GKE importa questa route nel tuo progetto. Ciò significa che se disponi di route per lo stesso CIDR nel tuo progetto, potresti riscontrare problemi di routing.

Quando crei un cluster, la subnet ha un intervallo principale per i nodi del cluster e deve esistere prima della creazione del cluster. La subnet deve contenere il numero massimo di nodi previsto nel cluster e gli indirizzi IP del bilanciatore del carico interno nel cluster che utilizza la subnet.

Puoi utilizzare il gestore della scalabilità automatica dei cluster per limitare il numero massimo di nodi.

Gli intervalli di indirizzi IP di pod e servizi sono rappresentati come intervalli secondari distinti della subnet, implementati come indirizzi IP alias in cluster nativi di VPC.

Scegli intervalli di indirizzi IP sufficientemente ampi in modo da poter ospitare tutti i nodi, i pod e i servizi per il cluster.

Considera le seguenti limitazioni:

Utilizza più di indirizzi IP RFC 1918 privati

Per alcuni ambienti, in un'organizzazione potrebbe già essere allocato lo spazio RFC 1918 in grandi blocchi CIDR contigui. Puoi utilizzare spazio non conforme alla RFC 1918 per i CIDR aggiuntivi per i cluster GKE, se non si sovrappongono agli indirizzi IP pubblici di proprietà di Google. Ti consigliamo di utilizzare la parte 100.64.0.0/10 dello spazio di indirizzi RFC perché lo spazio di indirizzi Classe E può presentare problemi di interoperabilità con l'hardware on-premise. Puoi usare IP pubblici riutilizzati privatamente (PUPI).

Se utilizzi indirizzi IP pubblici utilizzati privatamente, utilizzali con cautela e valuta la possibilità di controllare gli annunci di route nelle reti on-premise verso internet quando scegli questa opzione.

Non utilizzare Network Address Translation (SNAT) di origine in un cluster con traffico da pod a pod e da pod a servizio. Questo determina la rottura del modello di networking di Kubernetes.

Kubernetes presuppone che tutti gli indirizzi IP non RFC 1918 siano indirizzi IP pubblici riutilizzati privatamente e utilizza SNAT per tutto il traffico proveniente da questi indirizzi.

Se per il tuo cluster GKE utilizzi un indirizzo IP non RFC 1918, per i cluster GKE dovrai disabilitare esplicitamente SNAT o configurare l'agente configurare l'agente di mascheramento IP in modo da escludere gli indirizzi IP dei pod del cluster e gli intervalli di indirizzi IP secondari per i servizi da SNAT. Per i cluster Autopilot, non sono richiesti passaggi aggiuntivi.

Usa la modalità subnet personalizzata

Quando configuri la rete, selezioni anche la modalità della subnet: auto (predefinita) o custom (consigliata). La modalità auto lascia l'allocazione delle subnet a Google ed è una buona opzione per iniziare senza pianificare gli indirizzi IP. Tuttavia, ti consigliamo di selezionare la modalità custom perché ti consente di scegliere intervalli di indirizzi IP che non si sovrappongano ad altri intervalli nel tuo ambiente. Se utilizzi un VPC condiviso, può essere selezionato da un amministratore dell'organizzazione o di rete.

L'esempio seguente crea una rete denominata my-net-1 con modalità subnet personalizzata:

gcloud compute networks create my-net-1 --subnet-mode custom

Pianifica la densità dei pod per nodo

Per impostazione predefinita, i cluster standard riservano un intervallo /24 per ogni nodo al di fuori dello spazio di indirizzi dei pod nella subnet e consentono di ospitare fino a 110 pod per nodo. Tuttavia, puoi configurare un cluster Standard in modo che supporti fino a 256 pod per nodo, con un intervallo /23 riservato per ogni nodo. A seconda delle dimensioni dei nodi e del profilo dell'applicazione dei pod, potresti eseguire un numero notevolmente inferiore di pod su ciascun nodo.

Se non prevedi di eseguire più di 64 pod per nodo, ti consigliamo di modificare il numero massimo di pod per nodo in modo da preservare lo spazio di indirizzi IP nella subnet del pod.

Se prevedi di eseguire più dei 110 pod predefiniti per nodo, puoi aumentare il numero massimo di pod per nodo fino a 256, di cui /23 riservati per ogni nodo. Con questo tipo di configurazione ad alta densità di pod, consigliamo di utilizzare istanze con 16 o più core della CPU per garantire la scalabilità e le prestazioni del cluster.

Per i cluster Autopilot, il numero massimo di pod per nodo è impostato su 32, riservando un intervallo di /26 a ogni nodo. Questa impostazione non è configurabile nei cluster Autopilot.

Evita sovrapposizioni con indirizzi IP utilizzati in altri ambienti

Puoi connettere la tua rete VPC a un ambiente on-premise o ad altri fornitori di servizi cloud tramite Cloud VPN o Cloud Interconnect. Questi ambienti possono condividere le route, rendendo lo schema di gestione degli indirizzi IP on-premise importante nella pianificazione degli indirizzi IP per GKE. Ti consigliamo di assicurarti che gli indirizzi IP non si sovrappongano a quelli utilizzati in altri ambienti.

Crea una subnet del bilanciatore del carico

Crea una subnet del bilanciatore del carico separata per esporre i servizi con il bilanciamento del carico TCP/UDP interno. Se non viene utilizzata una subnet bilanciatore del carico separata, questi servizi vengono esposti utilizzando un indirizzo IP della subnet del nodo, il che può comportare l'utilizzo di tutto lo spazio allocato nella subnet prima del previsto e può impedirti di scalare il cluster GKE al numero previsto di nodi.

Utilizzare una subnet del bilanciatore del carico separata significa anche che puoi filtrare il traffico da e verso i nodi GKE separatamente ai servizi esposti dal bilanciamento del carico TCP/UDP interno, il che ti consente di impostare limiti di sicurezza più rigidi.

Prenota spazio sufficiente di indirizzi IP per il gestore della scalabilità automatica dei cluster

Puoi utilizzare il gestore della scalabilità automatica dei cluster per aggiungere e rimuovere dinamicamente i nodi nel cluster, in modo da controllare i costi e migliorare l'utilizzo. Tuttavia, quando utilizzi il gestore della scalabilità automatica dei cluster, assicurati che la pianificazione degli indirizzi IP tenga conto della dimensione massima di tutti i pool di nodi. Ogni nuovo nodo richiede il proprio indirizzo IP del nodo e il proprio insieme allocabile di indirizzi IP di pod in base ai pod configurati per nodo. Il numero di pod per nodo può essere configurato in modo diverso rispetto a quanto configurato a livello di cluster. Non puoi modificare il numero di pod per nodo dopo aver creato il cluster o il pool di nodi. Dovresti prendere in considerazione i tipi di carichi di lavoro e assegnarli a pool di nodi distinti per un'allocazione ottimale degli indirizzi IP.

Valuta la possibilità di utilizzare il provisioning automatico dei nodi con il gestore della scalabilità automatica dei cluster, in particolare se utilizzi cluster nativi di VPC. Per ulteriori informazioni, consulta Intervalli di limitazione dei nodi.

Condividi gli indirizzi IP tra i cluster

Potresti dover condividere gli indirizzi IP tra i cluster se hai un team centralizzato che gestisce l'infrastruttura per i cluster. Per condividere gli indirizzi IP tra i cluster GKE, consulta Condivisione di intervalli di indirizzi IP tra i cluster GKE. È possibile ridurre l'esaurimento degli IP creando tre intervalli per pod, servizi e nodi, e riutilizzandoli o condividendoli, in particolare in un modello VPC condiviso. Questa configurazione può anche semplificare la gestione degli indirizzi IP per gli amministratori di rete, in quanto non richiede loro di creare subnet specifiche per ogni cluster.

Considera quanto segue:

  • Come best practice, utilizza subnet e intervalli di indirizzi IP separati per tutti i cluster.
  • Puoi condividere l'intervallo di indirizzi IP del pod secondario, ma questa operazione è sconsigliata perché un cluster potrebbe utilizzare tutti gli indirizzi IP.
  • Puoi condividere intervalli di indirizzi IP del servizio secondari, ma questa funzionalità non funziona con Cloud DNS con ambito VPC per GKE.

Se esaurisci gli indirizzi IP, puoi creare intervalli aggiuntivi di indirizzi IP dei pod utilizzando CIDR multi-pod discontinui.

Condividi gli indirizzi IP per i servizi LoadBalancer interni

Puoi condividere un singolo indirizzo IP con un massimo di 50 backend utilizzando porte diverse. Questo consente di ridurre il numero di indirizzi IP necessari per i servizi LoadBalancer interni.

Per maggiori informazioni, vedi IP condiviso.

Opzioni di sicurezza di rete

In questa sezione sono descritti alcuni suggerimenti chiave per l'isolamento del cluster. La sicurezza di rete per i cluster GKE è una responsabilità condivisa tra Google e gli amministratori del cluster.

Usa GKE Dataplane V2

GKE Dataplane V2 è basato su eBPF e offre un'esperienza integrata di sicurezza e visibilità di rete. Quando crei un cluster utilizzando GKE Dataplane V2 non è necessario abilitare esplicitamente i criteri di rete perché GKE Dataplane V2 gestisce il routing dei servizi, l'applicazione dei criteri di rete e il logging. Abilita il nuovo dataplane con l'opzione Google Cloud CLI --enable-dataplane-v2 durante la creazione di un cluster. Dopo aver configurato i criteri di rete, è possibile configurare un oggetto CRD NetworkLogging predefinito per registrare le connessioni di rete consentite e negate. Consigliamo di creare cluster con GKE Dataplane V2 per sfruttare appieno le funzionalità integrate come il logging dei criteri di rete.

Scegli un tipo di cluster privato

I cluster pubblici hanno indirizzi IP sia privati che pubblici sui nodi e solo un endpoint pubblico per i nodi del piano di controllo. I cluster privati offrono un maggiore isolamento poiché hanno solo indirizzi IP interni sui nodi e dispongono di endpoint privati o pubblici per i nodi del piano di controllo (che possono essere ulteriormente isolati e sono discussi nella sezione Ridurre al minimo l'esposizione del piano di controllo del cluster). Nei cluster privati, puoi comunque accedere alle API di Google con l'accesso privato Google. Ti consigliamo di scegliere i cluster privati.

In un cluster privato, i pod sono isolati dalle comunicazioni in entrata e in uscita (perimetro del cluster). Puoi controllare questi flussi direzionali esponendo i servizi utilizzando il bilanciamento del carico e Cloud NAT, trattati nella sezione sulla connettività dei cluster di questo documento. Il seguente diagramma mostra questo tipo di configurazione:

Diagramma 1: comunicazione tra cluster privati

Questo diagramma mostra come può comunicare un cluster privato. I client on-premise possono connettersi al cluster con il client kubectl. L'accesso ai servizi Google viene fornito tramite l'accesso privato Google e la comunicazione con internet è disponibile solo tramite Cloud NAT.

Per saperne di più, consulta requisiti, restrizioni e limitazioni dei cluster privati.

Riduci al minimo l'esposizione del piano di controllo del cluster

In un cluster privato, il server API GKE può essere esposto come endpoint pubblico o privato. Puoi decidere quale endpoint usare quando crei il cluster. Puoi controllare l'accesso con reti autorizzate, nelle quali sia gli endpoint pubblici che quelli privati consentono per impostazione predefinita tutte le comunicazioni tra il pod e gli indirizzi IP dei nodi nel cluster. Per abilitare un endpoint privato quando crei un cluster, utilizza il flag --enable-private-endpoint.

Autorizza l'accesso al piano di controllo

Le reti autorizzate possono aiutarti a determinare quali subnet di indirizzi IP possono accedere ai nodi del piano di controllo GKE. Dopo aver abilitato queste reti, puoi limitare l'accesso a intervalli di indirizzi IP di origine specifici. Se l'endpoint pubblico è disabilitato, questi intervalli di indirizzi IP di origine devono essere privati. Se è abilitato un endpoint pubblico, puoi consentire intervalli di indirizzi IP pubblici o interni. Configura pubblicità di route personalizzate per consentire all'endpoint privato del piano di controllo del cluster di essere raggiungibile da un ambiente on-premise. Puoi rendere l'endpoint API GKE privato raggiungibile a livello globale utilizzando l'opzione --enable-master-global-access quando crei un cluster.

Il seguente diagramma mostra la connettività tipica del piano di controllo tramite reti autorizzate:

Diagramma 2: Connettività del piano di controllo utilizzando reti autorizzate

Questo diagramma mostra che gli utenti attendibili riescono a comunicare con il piano di controllo GKE attraverso l'endpoint pubblico in quanto fanno parte di reti autorizzate, mentre l'accesso da parte di utenti non attendibili è bloccato. Le comunicazioni da e verso il cluster GKE avvengono tramite l'endpoint privato del piano di controllo.

Consenti la connettività al piano di controllo

Alcuni pod di sistema su ogni nodo worker dovranno raggiungere servizi come il server API Kubernetes (kube-apiserver), le API di Google o il server di metadati. kube-apiserver deve anche comunicare con alcuni pod di sistema, come event-exporter specificamente. Questa comunicazione è consentita per impostazione predefinita. Se esegui il deployment di regole firewall VPC all'interno dei progetti (maggiori dettagli nella sezione Limita il traffico dei cluster), assicurati che questi pod possano continuare a comunicare con kube-apiserver e con le API Google.

Esegui il deployment dei proxy per l'accesso al piano di controllo dalle reti in peering

L'accesso al piano di controllo per i cluster GKE privati avviene tramite peering di rete VPC. Il peering di rete VPC non è transitivo, pertanto non puoi accedere al piano di controllo del cluster da un'altra rete in peering.

Se vuoi l'accesso diretto da un'altra rete in peering o da on-premise quando utilizzi un'architettura hub e spoke, esegui il deployment dei proxy per il traffico del piano di controllo.

Limita il traffico del cluster utilizzando i criteri di rete

Sono possibili diversi livelli di sicurezza di rete per i carichi di lavoro dei cluster che possono essere combinati: regole firewall VPC, criteri firewall gerarchici e criteri di rete Kubernetes. Le regole firewall VPC e i criteri firewall gerarchici si applicano a livello di macchina virtuale (VM), ovvero i nodi worker su cui si trovano i pod del cluster GKE. I criteri di rete di Kubernetes si applicano a livello di pod per applicare i percorsi di traffico tra pod e pod.

L'implementazione di firewall VPC può interrompere la comunicazione predefinita necessaria con il piano di controllo, ad esempio la comunicazione kubelet con il piano di controllo. GKE crea le regole firewall obbligatorie per impostazione predefinita, ma possono essere sovrascritte. Alcuni deployment potrebbero richiedere il piano di controllo per raggiungere il cluster nel servizio. Puoi usare i firewall VPC per configurare un criterio in entrata che renda il servizio accessibile.

I criteri di rete GKE vengono configurati tramite l'API Network Policy di Kubernetes Puoi abilitare i criteri di rete quando crei un cluster utilizzando l'opzione gcloud container clusters create --enable-network-policy. Per limitare il traffico utilizzando i criteri di rete, puoi seguire la guida all'implementazione del progetto base per la limitazione del traffico di Anthos.

Abilita i criteri di sicurezza di Google Cloud Armor per il traffico in entrata

Con i criteri di sicurezza di Google Cloud Armor, puoi proteggere le applicazioni che utilizzano bilanciatori del carico delle applicazioni esterni da attacchi DDoS e altri attacchi basati sul web bloccando questo traffico sul perimetro della rete. In GKE, abilita i criteri di sicurezza di Google Cloud Armor per le applicazioni utilizzando Ingress per i bilanciatori del carico delle applicazioni esterni e aggiungendo un criterio di sicurezza a BackendConfig collegato all'oggetto Ingress.

Utilizza Identity-Aware Proxy per fornire l'autenticazione per le applicazioni con utenti IAM

Se vuoi eseguire il deployment di servizi accessibili solo agli utenti all'interno dell'organizzazione, ma senza la necessità di trovarti nella rete aziendale, puoi utilizzare Identity-Aware Proxy per creare un livello di autenticazione per queste applicazioni. Per abilitare Identity-Aware Proxy per GKE, segui i passaggi di configurazione per aggiungere Identity-Aware Proxy all'interno di BackendConfig per il servizio Ingress. Identity-Aware Proxy può essere combinato con Google Cloud Armor.

Usa i vincoli dei criteri dell'organizzazione per migliorare ulteriormente la sicurezza

Utilizzando i vincoli dei criteri dell'organizzazione, puoi impostare criteri per migliorare ulteriormente il tuo livello di sicurezza. Ad esempio, puoi utilizzare i vincoli per limitare la creazione dei bilanciatori del carico a determinati tipi, ad esempio solo i bilanciatori del carico interni.

Scalabilità della connettività dei cluster

Questa sezione illustra le opzioni scalabili per la connettività DNS e in uscita dai cluster verso internet e i servizi Google.

Utilizza Cloud DNS per GKE

Puoi utilizzare Cloud DNS per GKE per fornire una risoluzione DNS di pod e servizi con DNS gestito senza un provider DNS ospitato su cluster. Cloud DNS elimina l'overhead associato alla gestione di un server DNS ospitato in un cluster e non richiede scalabilità, monitoraggio o gestione delle istanze DNS poiché si tratta di un servizio Google ospitato.

Abilita NodeLocal DNSCache

GKE utilizza kube-dns per fornire il servizio DNS locale del cluster come componente aggiuntivo predefinito del cluster. kube-dns viene replicato nel cluster in funzione del numero totale di core e nodi nel cluster.

Puoi migliorare le prestazioni del DNS con NodeLocal DNSCache. NodeLocal DNSCache è un componente aggiuntivo di cui viene eseguito il deployment come DaemonSet e non richiede modifiche alla configurazione dei pod. Le ricerche DNS nel servizio di pod locale non creano connessioni aperte che devono essere monitorate sul nodo, il che consente una scalabilità maggiore. Le ricerche di nomi host esterni vengono inoltrate a Cloud DNS, mentre tutte le altre query DNS vengono indirizzate a kube-dns.

Abilita NodeLocal DNSCache per tempi di ricerca delle query DNS più coerenti e migliore scalabilità dei cluster. Per i cluster Autopilot, NodeLocal DNSCache è abilitato per impostazione predefinita e non può essere sostituito.

La seguente opzione Google Cloud CLI abilita NodeLocal DNSCache quando crei un cluster: --addons NodeLocalDNS.

Se hai il controllo sul nome che le applicazioni vogliono risolvere, esistono modi per migliorare la scalabilità DNS. Ad esempio, utilizza un nome di dominio completo (termina il nome host con un punto) o disattiva l'espansione del percorso di ricerca tramite l'opzione del file manifest Pod.dnsConfig.

Usa Cloud NAT per l'accesso a internet da cluster privati

Per impostazione predefinita, i cluster privati non hanno accesso a internet. Per consentire ai pod di raggiungere internet, abilita Cloud NAT per ogni regione. Abilita Cloud NAT almeno per gli intervalli primari e secondari nella subnet GKE. Assicurati di allocare un numero sufficiente di indirizzi IP per Cloud NAT e porte per VM.

Segui le best practice per la configurazione del gateway Cloud NAT mentre utilizzi Cloud NAT per i cluster privati:

  • Quando crei il gateway Cloud NAT, abilitalo solo per gli intervalli di subnet utilizzati dai cluster. Contando tutti i nodi in tutti i cluster, puoi determinare quante VM consumer NAT ci sono nel progetto.
  • Utilizza l'allocazione dinamica delle porte per allocare un numero diverso di porte per VM, in base all'utilizzo della VM. Inizia con un minimo di 64 porte e un massimo di 2048.

  • Se devi gestire molte connessioni simultanee alla stessa destinazione a 3 tuple, riduci il timeout di TCP TIME_WAIT dal suo valore predefinito 120s a 5s. Per maggiori informazioni, consulta la sezione Specificare timeout diversi per NAT.

  • Abilita il logging degli errori di Cloud NAT per controllare i log correlati.

  • Controlla i log del gateway Cloud NAT dopo la configurazione del gateway. Per ridurre i problemi relativi allo stato di allocazione, potrebbe essere necessario aumentare il numero massimo di porte per VM.

Dovresti evitare il doppio SNAT per il traffico dei pod (SNAT prima nel nodo GKE e poi di nuovo con Cloud NAT). A meno che tu non richieda a SNAT di nascondere gli indirizzi IP dei pod nelle reti on-premise connesse da Cloud VPN o Cloud Interconnect, disable-default-snat e di trasferire il monitoraggio SNAT a Cloud NAT per la scalabilità. Questa soluzione funziona per tutti gli intervalli IP di subnet primari e secondari. Utilizza i criteri di rete per limitare il traffico esterno dopo l'abilitazione di Cloud NAT. Cloud NAT non è necessario per accedere ai servizi Google.

Utilizza l'accesso privato Google per accedere ai servizi Google

Nei cluster privati, i pod non hanno indirizzi IP pubblici per raggiungere servizi pubblici, tra cui API e servizi Google. L'accesso privato Google consente alle risorse Google Cloud private di raggiungere i servizi Google.

L'accesso privato Google è abilitato per impostazione predefinita nei cluster privati, tranne nei cluster VPC condiviso.

Gestione delle applicazioni

Quando crei applicazioni raggiungibili esternamente o internamente all'organizzazione, assicurati di utilizzare le opzioni e il tipo di bilanciatore del carico corretti. Questa sezione fornisce alcuni suggerimenti su come esporre e scalare le applicazioni con Cloud Load Balancing.

Utilizza il bilanciamento del carico nativo del container

Utilizza il bilanciamento del carico nativo del container quando esponi i servizi utilizzando HTTP(S) esternamente. Il bilanciamento del carico nativo del container consente meno hop di rete, minore latenza e una distribuzione del traffico più precisa. Inoltre, aumenta la visibilità dei tempo di round trip e ti consente di utilizzare funzionalità di bilanciamento del carico come Google Cloud Armor.

Scegli la risorsa GKE corretta per esporre l'applicazione

A seconda dell'ambito dei client (interni, esterni o anche interni al cluster), della regione dell'applicazione e dei protocolli che utilizzi, sono disponibili risorse GKE diverse che puoi utilizzare per esporre l'applicazione. La panoramica del networking di servizi spiega queste opzioni e può aiutarti a scegliere la risorsa migliore per esporre ogni parte della tua applicazione utilizzando le opzioni di bilanciamento del carico di Google Cloud.

Crea controlli di integrità basati su BackendConfig

Se utilizzi una risorsa Ingress per esporre i servizi, utilizza una configurazione del controllo di integrità in una CRD BackendConfig per utilizzare la funzionalità di controllo di integrità del bilanciatore del carico delle applicazioni esterno. Puoi indirizzare il controllo di integrità all'endpoint appropriato e impostare le tue soglie. Senza un CRD BackendConfig, i controlli di integrità vengono dedotti dai parametri del probe di idoneità o utilizzano parametri predefiniti.

Utilizza il criterio del traffico locale per conservare gli indirizzi IP originali

Quando utilizzi un bilanciatore del carico di rete passthrough interno con GKE, imposta l'opzione externalTrafficPolicy su Local per conservare l'indirizzo IP di origine delle richieste. Utilizza questa opzione se la tua applicazione richiede l'indirizzo IP di origine originale. Tuttavia, l'opzione externalTrafficPolicy local può portare a una distribuzione del carico meno ottimale, quindi utilizza questa funzionalità solo quando necessario. Per i servizi HTTP(S), puoi utilizzare i controller Ingress e ottenere l'indirizzo IP originale leggendo l'intestazione X-Forwarded-For nella richiesta HTTP.

Usa Private Service Connect

Puoi utilizzare Private Service Connect per condividere i servizi del bilanciatore del carico di rete passthrough interno tra altre reti VPC. È utile per i servizi ospitati su cluster GKE, ma che servono i clienti in esecuzione in progetti diversi e VPC diversi.

Puoi utilizzare Private Service Connect per ridurre il consumo di indirizzi IP fornendo connettività tra i VPC con indirizzi IP sovrapposti.

Operazioni e amministrazione

Le seguenti sezioni contengono best practice operative per garantire opzioni di autorizzazione granulari per i tuoi carichi di lavoro. Per evitare di creare regole firewall manuali, segui le best practice operative riportate in questa sezione. Include inoltre suggerimenti per la distribuzione dei carichi di lavoro, il monitoraggio e l'accesso in GKE.

Utilizza le autorizzazioni IAM per GKE per controllare i criteri nelle reti VPC condiviso

Quando si utilizzano le reti VPC condivise, le regole firewall per i bilanciatori del carico vengono create automaticamente nel progetto host.

Per evitare di dover creare manualmente le regole firewall, assegna un ruolo personalizzato con privilegi minimi all'account di servizio GKE nel progetto host denominato service-HOST_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com.

Sostituisci HOST_PROJECT_NUMBER con il numero del progetto host per il VPC condiviso.

Il ruolo personalizzato che crei deve avere le seguenti autorizzazioni:

  • compute.firewalls.create
  • compute.firewalls.get
  • compute.firewalls.list
  • compute.firewalls.delete

Inoltre, le regole firewall create da GKE hanno sempre la priorità predefinita di 1000, quindi puoi impedire il flusso di traffico specifico creando regole firewall a una priorità più elevata.

Se vuoi limitare la creazione di determinati tipi di bilanciatori del carico, utilizza i criteri dell'organizzazione per limitare la creazione dei bilanciatori del carico.

Utilizza cluster regionali e distribuisci i tuoi carichi di lavoro per garantire una disponibilità elevata

I cluster a livello di regione possono aumentare la disponibilità di applicazioni in un cluster, perché il piano di controllo del cluster e i nodi sono distribuiti in più zone.

Tuttavia, per ottenere la migliore esperienza utente possibile in caso di errore di una zona, utilizza il gestore della scalabilità automatica del cluster per assicurarti che il cluster possa gestire il carico richiesto in qualsiasi momento.

Puoi anche utilizzare l'anti-affinità dei pod per assicurarti che i pod di un determinato servizio siano pianificati in più zone.

Per ulteriori informazioni su come configurare queste impostazioni per l'alta disponibilità e l'ottimizzazione dei costi, consulta le best practice per i cluster GKE ad alta disponibilità.

Usa Cloud Logging e Cloud Monitoring e abilita il logging dei criteri di rete

Anche se ogni organizzazione ha requisiti diversi in termini di visibilità e controllo, ti consigliamo di abilitare il logging dei criteri di rete. Questa funzionalità è disponibile solo con GKE Dataplane V2. Il logging dei criteri di rete offre visibilità sull'applicazione dei criteri e sui modelli di traffico dei pod. Tieni presente che il logging dei criteri di rete comporta dei costi.

Per i cluster GKE che utilizzano la versione 1.14 o successive, Logging e Monitoring sono entrambi abilitati per impostazione predefinita. Monitoring offre una dashboard per i cluster GKE. Logging abilita anche le annotazioni GKE per i log di flusso VPC. Per impostazione predefinita, Logging raccoglie i log per tutti i carichi di lavoro di cui è stato eseguito il deployment nel cluster, ma esiste anche un'opzione per i log solo di sistema. Utilizza la dashboard di GKE per osservare e impostare gli avvisi. Per i cluster creati in modalità Autopilot, il monitoraggio e il logging vengono abilitati automaticamente e non sono configurabili.

Tieni presente che Google Cloud Observability comporta dei costi.

Riepilogo elenco di controllo

Area Esercitati
Progettazione di VPC
Strategie di gestione degli indirizzi IP
Opzioni di sicurezza di rete
Scalabilità
Pubblicazione delle applicazioni
Operazioni e amministrazione

Passaggi successivi