Questa pagina descrive 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 ingegneri di rete con consigli sulla configurazione dei cluster applicabili alla maggior parte dei cluster GKE. Prima di creare i cluster GKE, ti consigliamo di esaminare tutte le sezioni di questa pagina 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. Alcune di queste opzioni non possono essere modificate una volta configurate senza ricreare il cluster.
Prima di leggere questa pagina, assicurati di conoscere i concetti e la terminologia di rete di Kubernetes, alcuni concetti generali di rete e il networking di Kubernetes. Per maggiori informazioni, consulta la panoramica della rete GKE.
Durante la revisione di queste best practice, tieni presente quanto segue:
- Il modo in cui prevedi di esporre internamente i carichi di lavoro alla tua rete Virtual Private Cloud (VPC), ad altri carichi di lavoro nel cluster, ad altri cluster GKE o esternamente a internet.
- Come prevedi di scalare i 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.
Best practice per la progettazione di VPC
Quando progetti le tue reti VPC, segui le best practice per la progettazione VPC.
La sezione seguente fornisce alcuni consigli specifici per GKE per la progettazione della rete VPC.
Utilizza cluster nativi di VPC
Ti consigliamo di utilizzare cluster VPC nativi. I cluster nativi VPC utilizzano intervalli di indirizzi IP alias sui nodi GKE e sono necessari per i cluster basati sul peering di rete VPC, per i cluster su VPC condivise e offrono molti altri vantaggi. Per i cluster creati in modalità Autopilot, la modalità nativa VPC è sempre attiva e non può essere disattivata.
I cluster VPC nativi scalano più facilmente rispetto ai cluster basati su route senza consumare Google Cloud route e quindi sono meno soggetti a raggiungere i limiti di routing.
I vantaggi dell'utilizzo di cluster VPC nativi vanno di pari passo con il supporto dell'IP alias. Ad esempio, i gruppi di endpoint di rete (NEG) possono essere utilizzati solo con indirizzi IP secondari, pertanto sono supportati solo nei cluster VPC nativi.
Utilizza 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 lo spazio degli 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 i VPC. Puoi creare cluster GKE in un progetto di servizio e utilizzare le subnet condivise dal VPC condiviso nel progetto host. Il componente dell'indirizzo IP rimane nel progetto host, mentre gli altri componenti del cluster si trovano 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 tuoi cluster GKE ed evitare conflitti di indirizzi IP nella tua organizzazione. Potresti anche voler utilizzare i VPC condivisi per la governance delle funzioni operative. Ad esempio, puoi avere un team di rete che lavora solo su componenti e affidabilità di rete 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 GKE.
In GKE, tutti questi indirizzi IP sono instradabili in tutta la rete VPC. Pertanto, 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.
Best practice:
Pianifica l'assegnazione degli indirizzi IP necessari.Utilizza uno spazio non RFC 1918, se necessario.
Utilizza la modalità subnet personalizzata.
Pianifica la densità dei pod per nodo.
Evita sovrapposizioni con gli indirizzi IP utilizzati in altri ambienti.
Crea una subnet del bilanciatore del carico.
Riserva spazio di indirizzi IP sufficiente per lo strumento di scalabilità automatica del cluster.
Condividi gli indirizzi IP tra i cluster.
Condividi gli indirizzi IP per i servizi LoadBalancer interni.
Pianifica l'assegnazione degli indirizzi IP necessari
Ti consigliamo di utilizzare cluster nativi VPC con Private Service Connect (PSC). I cluster che utilizzano il peering di rete VPC devono essere cluster VPC nativi.
I cluster VPC nativi richiedono i seguenti intervalli di indirizzi IP:
- Intervallo di indirizzi IP del control plane: utilizza una subnet /28 all'interno degli intervalli privati di indirizzi IP inclusi nella RFC 1918. Devi assicurarti che questa subnet non si sovrapponga ad alcun altro CIDR (Classless Inter-Domain Routing) nella rete VPC.
- Subnet dei nodi: la subnet con l'intervallo di indirizzi IP primari che vuoi allocare per tutti i nodi del cluster. I servizi di tipo
LoadBalancer
che utilizzano l'annotazionecloud.google.com/load-balancer-type: "Internal"
utilizzano anche questa subnet per impostazione predefinita. Puoi anche utilizzare una subnet dedicata per i bilanciatori del carico interni. - Intervallo di indirizzi IP del pod: l'intervallo IP che allochi per tutti i pod nel tuo cluster. GKE esegue il provisioning di questo intervallo come alias della subnet. Per saperne di più, vedi Intervalli di indirizzi IP per i cluster VPC nativi.
- Intervallo di indirizzi IP del servizio: l'intervallo di indirizzi IP che allochi per tutti i servizi nel cluster. GKE esegue il provisioning di questo intervallo come alias della subnet.
Quando configuri la rete del cluster, devi definire una subnet dei nodi, un intervallo di indirizzi IP dei pod e un intervallo di indirizzi IP dei servizi.
Se vuoi utilizzare lo spazio degli indirizzi IP in modo più efficiente, consulta Ridurre l'utilizzo degli indirizzi IP interni in GKE.
L'intervallo di indirizzi IP del control plane è dedicato al control plane gestito da GKE che si trova 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 hai route allo 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 ospitare il numero massimo di nodi che prevedi nel cluster e gli indirizzi IP del bilanciatore del carico interno nel cluster utilizzando la subnet.
Puoi utilizzare il gestore della scalabilità automatica del 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 nei cluster VPC nativi.
Scegli intervalli di indirizzi IP sufficientemente ampi da poter ospitare tutti i nodi, i pod e i servizi del cluster.
Tieni presenti le seguenti limitazioni:
- Puoi espandere gli intervalli di indirizzi IP principali, ma non puoi ridurli. Questi intervalli di indirizzi IP non possono essere discontigui.
- Puoi espandere l'intervallo di pod aggiungendo intervalli di pod aggiuntivi al cluster o creando nuovi node pool con altri intervalli di pod secondari.
- L'intervallo di indirizzi IP secondario per i servizi non può essere espanso o modificato per tutta la durata del cluster.
- Esamina le limitazioni per l'intervallo di indirizzi IP secondari per pod e servizi.
Utilizzare più indirizzi IP RFC 1918 privati
Per alcuni ambienti, lo spazio RFC 1918 in grandi blocchi CIDR contigui potrebbe essere già allocato in un'organizzazione. Puoi utilizzare lo spazio non RFC 1918 per CIDR aggiuntivi per i cluster GKE, se non si sovrappongono a 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 utilizzare IP pubblici riutilizzati privatamente (PUPI).
Quando utilizzi indirizzi IP pubblici utilizzati privatamente, fai attenzione e valuta la possibilità di controllare le pubblicità di route nelle reti on-premise a internet quando scegli questa opzione.
Non devi utilizzare la traduzione degli Network Address Translation (SNAT) in un cluster con traffico pod-to-pod e pod-to-service. In questo modo si interrompe il 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 utilizzi un indirizzo IP non RFC 1918 per il tuo cluster GKE, per i cluster standard devi disattivare esplicitamente SNAT o configurare l'agente di mascheramento IP in modo che escluda da SNAT gli indirizzi IP dei pod del cluster e gli intervalli di indirizzi IP secondari per i servizi. Per i cluster Autopilot, questa operazione non richiede passaggi aggiuntivi.
Utilizzare la modalità di subnet personalizzata
Quando configuri la rete, seleziona anche la modalità subnet: auto
(impostazione predefinita)
o custom
(opzione consigliata). La modalità auto
lascia l'allocazione della 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 sovrappongono ad altri intervalli nel tuo ambiente. Se utilizzi un VPC condiviso, questa modalità può essere selezionata da un amministratore dell'organizzazione o da un amministratore di rete.
L'esempio seguente crea una rete denominata my-net-1
con la 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 dello spazio di indirizzi dei pod nella subnet e consentono fino a 110 pod per nodo. Tuttavia, puoi configurare un cluster Standard per supportare 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 per preservare lo spazio di indirizzi IP nella subnet dei pod.
Se prevedi di eseguire più di 110 pod per nodo predefiniti, puoi aumentare il numero massimo di pod per nodo fino a 256, con /23 riservato per ogni nodo. Con questo tipo di configurazione ad alta densità di pod, consigliamo di utilizzare istanze con 16 o più core 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 /26 per ogni nodo. Questa impostazione non è configurabile nei cluster Autopilot.
Evita sovrapposizioni con gli indirizzi IP utilizzati in altri ambienti
Puoi connettere la tua rete VPC a un ambiente on-premise o ad altri provider di servizi cloud tramite Cloud VPN o Cloud Interconnect. Questi ambienti possono condividere le route, rendendo importante lo schema di gestione degli indirizzi IP on-premise 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 del bilanciatore del carico separata, questi servizi vengono esposti utilizzando un indirizzo IP della subnet dei nodi, il che può portare all'utilizzo di tutto lo spazio allocato in quella subnet prima del previsto e impedire lo scale up del cluster GKE al numero previsto di nodi.
L'utilizzo di una subnet del bilanciatore del carico separata significa anche che puoi filtrare il traffico verso e da i nodi GKE separatamente dai servizi esposti dal bilanciamento del carico TCP/UDP interno, il che ti consente di impostare limiti di sicurezza più rigidi.
Riserva spazio di indirizzi IP sufficiente per lo scalatore automatico del cluster
Puoi utilizzare lo scalatore automatico del 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 del cluster, assicurati che la pianificazione degli indirizzi IP tenga conto delle dimensioni massime di tutti i node pool. Ogni nuovo nodo richiede il proprio indirizzo IP del nodo, nonché il proprio insieme allocabile di indirizzi IP dei 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. Devi prendere in considerazione i tipi di workload 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 del cluster, soprattutto se utilizzi cluster nativi di VPC. Per ulteriori informazioni, vedi Intervalli di limitazione dei nodi.
Condividere 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, vedi Condivisione degli intervalli di indirizzi IP tra i cluster GKE. Puoi ridurre l'esaurimento degli IP creando tre intervalli per pod, servizi e nodi e riutilizzandoli o condividendoli, soprattutto in un modello VPC condiviso. Questa configurazione può anche semplificare la gestione degli indirizzi IP da parte degli amministratori di rete in quanto non richiede la creazione di 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 dei pod secondari, ma non è consigliabile 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 di indirizzi IP del pod aggiuntivi utilizzando il CIDR multi-pod discontinuo.
Condividere gli indirizzi IP per i servizi LoadBalancer interni
Puoi condividere un singolo indirizzo IP con un massimo di 50 backend utilizzando porte diverse. In questo modo, puoi ridurre il numero di indirizzi IP necessari per i servizi LoadBalancer interni.
Per ulteriori informazioni, vedi IP condiviso.
Best practice per la sicurezza della rete
In questa sezione sono descritti alcuni consigli chiave per l'isolamento del cluster. La sicurezza di rete per i cluster GKE è una responsabilità condivisa tra Google e gli amministratori dei cluster.
Best practice:
Utilizza GKE Dataplane V2.Ridurre al minimo l'esposizione dei nodi.
Ridurre al minimo l'esposizione del control plane del cluster.
Autorizza l'accesso al control plane.
Consenti la connettività del control plane.
Deploy proxies for control plane access from peered networks (Deployment di proxy per l'accesso al control plane dalle reti in peering).
Limita il traffico del cluster utilizzando i criteri di rete.
Attiva i criteri di sicurezza di Google Cloud Armor per Ingress.
Utilizza Identity-Aware Proxy per fornire l'autenticazione per le applicazioni con utenti IAM.
Utilizza i vincoli dei criteri dell'organizzazione per migliorare ulteriormente la sicurezza.
Utilizza GKE Dataplane V2
GKE Dataplane V2 si basa su
eBPF e offre un'esperienza integrata di sicurezza e visibilità della rete. Quando crei un cluster utilizzando
GKE Dataplane V2, non devi abilitare esplicitamente i criteri di rete perché
GKE Dataplane V2 gestisce il routing dei servizi, l'applicazione dei criteri di rete e
la registrazione. Abilita il nuovo piano dati con l'opzione Google Cloud CLI
--enable-dataplane-v2
durante la creazione di un cluster. Una volta configurati i criteri di rete, è possibile configurare un oggetto CRD NetworkLogging
predefinito per registrare le connessioni di rete consentite e negate. Ti consigliamo di creare cluster
con GKE Dataplane V2 per sfruttare al meglio le funzionalità integrate, come il logging delle policy di rete.
Ridurre al minimo l'esposizione dei nodi
In un cluster con solo nodi privati, i pod sono isolati dalla comunicazione in entrata e in uscita (il perimetro del cluster). Puoi controllare questi flussi direzionali esponendo i servizi utilizzando il bilanciamento del carico e Cloud NAT, come descritto nella sezione Connettività del cluster di questo documento. Il seguente diagramma mostra questo tipo di configurazione:
Questo diagramma mostra come può comunicare un cluster con nodi privati. 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 a internet è disponibile solo utilizzando Cloud NAT.
Ridurre al minimo l'esposizione del control plane del cluster
Il control plane ha due tipi di endpoint per l'accesso al cluster:
- Endpoint basato sul DNS
- Endpoint basati su IP
Utilizza solo l'endpoint basato su DNS per accedere al control plane per una configurazione semplificata e un livello di sicurezza flessibile e basato su criteri.
L'endpoint DNS è accessibile da qualsiasi rete raggiungibile dalle API, incluse le reti on-premise o di altri cloud. Google Cloud Per abilitare l'endpoint basato su DNS, utilizza il flag --enable-dns-access
.
Il server API GKE può essere esposto anche come
endpoint pubblico o basato su IP privato. Puoi decidere quale endpoint utilizzare quando
crei il cluster. Puoi controllare l'accesso con le reti autorizzate, in cui gli endpoint pubblici e privati consentono per impostazione predefinita tutte le comunicazioni tra l'IP del pod e del nodo nel cluster. Per abilitare un endpoint privato quando
crei un cluster, utilizza il
flag --enable-private-endpoint
.
Autorizza l'accesso al control plane
Le reti autorizzate possono contribuire a determinare le subnet di indirizzi IP in grado di accedere
ai nodi del control plane GKE. Dopo aver attivato queste reti, puoi limitare l'accesso a intervalli di indirizzi IP di origine specifici. Se l'endpoint pubblico
è disattivato, questi intervalli di indirizzi IP di origine devono essere privati. Se è attivato un endpoint pubblico, puoi consentire intervalli di indirizzi IP pubblici o interni.
Configura annunci di route personalizzati per consentire all'endpoint privato del control plane 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 control plane utilizzando le reti autorizzate:
Questo diagramma mostra gli utenti attendibili in grado di comunicare con il control plane GKE tramite l'endpoint pubblico in quanto fanno parte di reti autorizzate, mentre l'accesso da attori non attendibili è bloccato. La comunicazione con e dal cluster GKE avviene tramite l'endpoint privato del control plane.
Consenti la connettività del control plane
Alcuni pod di sistema su ogni nodo di lavoro dovranno raggiungere servizi come il server API Kubernetes (kube-apiserver
), le API di Google o il server dei metadati.
Il kube-apiserver
deve comunicare anche con alcuni pod di sistema, ad esempio
event-exporter
. Questa comunicazione è consentita per impostazione predefinita. Se
implementi regole firewall VPC all'interno dei progetti (maggiori dettagli nella
sezione Limita il traffico del cluster), assicurati
che questi pod possano continuare a comunicare con kube-apiserver
e con le API di Google.
Esegui il deployment dei proxy per l'accesso al control plane dalle reti in peering
Se il cluster utilizza il peering di rete VPC, non puoi accedere al control plane 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-and-spoke, implementa i proxy per il traffico del control plane.
Limitare il traffico del cluster utilizzando i criteri di rete
Per i carichi di lavoro del cluster è possibile combinare più livelli di sicurezza di rete: 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 ai nodi di lavoro in cui risiedono i pod del cluster GKE. I criteri di rete di Kubernetes vengono applicati a livello di pod per applicare i percorsi del traffico da pod a pod.
Se implementi i firewall VPC, puoi interrompere la comunicazione predefinita e obbligatoria del control plane, ad esempio la comunicazione di kubelet con il control plane. GKE crea regole firewall obbligatorie per impostazione predefinita, ma possono essere sovrascritte. Alcuni deployment potrebbero richiedere al control plane di raggiungere il cluster sul servizio. Puoi utilizzare i firewall VPC per configurare una policy in entrata che renda accessibile il servizio.
I criteri di rete GKE vengono configurati tramite l'API Network Policy di Kubernetes per applicare la comunicazione dei pod di un cluster. 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
le policy di rete, puoi seguire la guida all'implementazione
del blueprint per la limitazione del traffico di Anthos.
Abilita i criteri di sicurezza di Google Cloud Armor per Ingress
Utilizzando i criteri di sicurezza di Google Cloud Armor, puoi proteggere le applicazioni che utilizzano i bilanciatori del carico delle applicazioni esterni da attacchi DDoS e altri attacchi basati sul web bloccando il traffico perimetrale della rete. In GKE, attiva 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 a cui possono accedere solo gli utenti all'interno dell'organizzazione, ma senza la necessità di trovarsi sulla 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 come parte di BackendConfig per il servizio Ingress. Identity-Aware Proxy può essere combinato con Google Cloud Armor.
Utilizza i vincoli dei criteri dell'organizzazione per migliorare ulteriormente la sicurezza
Utilizzando i vincoli dei criteri dell'organizzazione, puoi impostare criteri per migliorare ulteriormente la tua postura di sicurezza. Ad esempio, puoi utilizzare i vincoli per limitare la creazione del bilanciatore del carico a determinati tipi, ad esempio solo ai bilanciatori del carico interni.
Scalabilità della connettività del cluster
Questa sezione illustra le opzioni scalabili per DNS e connettività in uscita dai tuoi cluster verso internet e i servizi Google.
Best practice:
Utilizzare Cloud DNS per GKE.Abilita NodeLocal DNSCache.
Utilizzare Cloud NAT per l'accesso a internet dai cluster.
Utilizza l'accesso privato Google per accedere ai servizi Google.
Utilizzare Cloud DNS per GKE
Puoi utilizzare Cloud DNS per GKE per fornire la risoluzione DNS di pod e servizi con DNS gestito senza un provider DNS ospitato nel cluster. Cloud DNS elimina il sovraccarico della gestione di un server DNS ospitato nel cluster e non richiede scalabilità, monitoraggio o gestione delle istanze DNS perché è un servizio Google ospitato.
Abilita NodeLocal DNSCache
GKE utilizza kube-dns
per fornire il servizio DNS locale del cluster come componente aggiuntivo del cluster predefinito. 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 pod locale non creano connessioni aperte che devono essere monitorate sul nodo, il che consente una maggiore scalabilità. Le ricerche di nomi host esterni vengono inoltrate a Cloud DNS, mentre tutte le altre query DNS vengono inviate a kube-dns.
Abilita NodeLocal DNSCache per tempi di ricerca delle query DNS più coerenti e una migliore scalabilità del cluster. Per i cluster Autopilot, NodeLocal DNSCache è abilitato per impostazione predefinita e non può essere sostituito.
La seguente opzione della Google Cloud CLI abilita NodeLocal DNSCache quando
crei un cluster: --addons NodeLocalDNS.
Se hai il controllo sul nome che le applicazioni cercano di risolvere,
esistono modi per migliorare lo scaling 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 manifest Pod.dnsConfig
.
Utilizzare Cloud NAT per l'accesso a internet dai cluster
Per impostazione predefinita, i cluster con nodi privati abilitati non hanno accesso a internet. Per consentire ai pod di accedere a internet, attiva Cloud NAT per ogni regione. Come minimo, abilita Cloud NAT per gli intervalli principali e secondari nella subnet GKE. Assicurati di allocare un numero sufficiente di indirizzi IP per Cloud NAT e porte per VM.
Utilizza le seguenti best practice per la configurazione del gateway Cloud NAT quando utilizzi Cloud NAT per i cluster:
- 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 il numero di VM consumer NAT che hai nel progetto.
Utilizza l'allocazione dinamica delle porte per assegnare numeri diversi di porte per VM in base all'utilizzo della VM stessa. Inizia con un minimo di 64 porte e un massimo di 2048 porte.
Se devi gestire molte connessioni simultanee alla stessa tupla 3, riduci il timeout TCP
TIME_WAIT
dal valore predefinito di120s
a5s
. Per maggiori informazioni, consulta Specificare timeout diversi per NAT.Attiva il logging degli errori di Cloud NAT per controllare i log correlati.
Controlla i log del gateway Cloud NAT dopo averlo configurato. Per ridurre i problemi relativi allo stato di allocazione interrotto, potrebbe essere necessario aumentare il numero massimo di porte per VM.
Devi evitare la doppia SNAT per il traffico dei pod (SNAT prima sul nodo GKE e poi di nuovo con Cloud NAT). A meno che tu non richieda
SNAT per nascondere gli indirizzi IP dei pod verso le reti on-premise connesse da
Cloud VPN o Cloud Interconnect,
disable-default-snat
e scaricare il monitoraggio SNAT su Cloud NAT per la scalabilità. Questa soluzione
funziona per tutti gli intervalli IP di subnet primari e secondari. Utilizza le policy di rete per
limitare il traffico esterno dopo aver abilitato Cloud NAT. Cloud NAT non è
necessario per accedere ai servizi Google.
Utilizzare l'accesso privato Google per accedere ai servizi Google
Nei cluster con nodi privati, i pod non hanno indirizzi IP pubblici per raggiungere servizi pubblici, inclusi 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 con nodi privati, ad eccezione dei cluster VPC condiviso.
Best practice per la scalabilità delle applicazioni
Quando crei applicazioni raggiungibili esternamente o internamente alla tua organizzazione, assicurati di utilizzare il tipo e le opzioni di bilanciatore del carico corretti. Questa sezione fornisce alcuni suggerimenti sull'esposizione e il ridimensionamento delle applicazioni con Cloud Load Balancing.
Best practice:
Utilizza il bilanciamento del carico nativo del container.Scegli la risorsa GKE corretta per esporre la tua applicazione.
Crea controlli di integrità basati su BackendConfig.
Utilizza il criterio di gestione del traffico locale per conservare gli indirizzi IP originali.
Utilizza Private Service Connect.
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, latenza inferiore e una distribuzione del traffico più precisa. Aumenta inoltre la visibilità neltempo di round tripo e consente di utilizzare funzionalità di bilanciamento del carico come Google Cloud Armor.
Scegli la risorsa GKE corretta per esporre la tua applicazione
A seconda dell'ambito dei tuoi client (interni, esterni o anche interni al cluster), della regionalità della tua applicazione e dei protocolli che utilizzi, esistono diverse risorse GKE che puoi scegliere di utilizzare per esporre la tua applicazione. La panoramica di Service Networking 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 Google Cloud .
Crea controlli di integrità basati su BackendConfig
Se utilizzi un Ingress per esporre i servizi, utilizza una configurazione del controllo di integrità in un 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 una CRD BackendConfig, i controlli di integrità vengono dedotti dai parametri del probe di idoneità o utilizzano i parametri predefiniti.
Utilizza i criteri di gestione 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ò comportare 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.
Utilizzare Private Service Connect
Puoi utilizzare Private Service Connect per condividere i servizi di bilanciamento del carico di rete pass-through interno in altre reti VPC. Ciò è utile per i servizi ospitati su cluster GKE, ma che servono clienti in esecuzione in progetti e VPC diversi.
Puoi utilizzare Private Service Connect per ridurre il consumo di indirizzi IP fornendo connettività tra VPC con indirizzi IP sovrapposti.
Best practice operative
Best practice:
Utilizza IAM per le autorizzazioni GKE per controllare le policy nelle VPC condiviso condivise.Utilizza cluster regionali e distribuisci i carichi di lavoro per garantire l'alta disponibilità.
Utilizza Cloud Logging e Cloud Monitoring e attiva il logging dei criteri di rete.
Le sezioni seguenti contengono best practice operative che ti aiutano a garantire opzioni di autorizzazione granulari per i tuoi workload. Per evitare di creare regole firewall manuali, segui le best practice operative descritte in questa sezione. Include anche consigli per distribuire i carichi di lavoro e per il monitoraggio e il logging in GKE.
Utilizzare IAM per le autorizzazioni GKE per controllare i criteri nelle reti VPC condiviso
Quando utilizzi le reti VPC condivise, le regole firewall per i bilanciatori del carico vengono create automaticamente nel progetto host.
Per evitare di dover creare manualmente regole firewall, assegna un ruolo personalizzato con privilegi minimi al 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 di progetto del progetto host per il VPC condiviso.
Il ruolo personalizzato che crei deve disporre delle 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 con una priorità più alta.
Se vuoi limitare la creazione di determinati tipi di bilanciatore del carico, utilizza i criteri dell'organizzazione per limitare la creazione del bilanciatore del carico.
Utilizza cluster regionali e distribuisci i carichi di lavoro per garantire un'alta affidabilità
I cluster regionali possono aumentare la disponibilità delle applicazioni in un cluster perché il control plane e i nodi del cluster sono distribuiti su più zone.
Tuttavia, per avere la migliore esperienza utente possibile in caso di errore di zona, utilizza lo scalatore automatico del cluster per assicurarti che il cluster possa gestire il carico richiesto in qualsiasi momento.
Puoi anche utilizzare Pod anti-affinity 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à.
Utilizza Cloud Logging e Cloud Monitoring e attiva il logging dei criteri di rete
Sebbene ogni organizzazione abbia requisiti diversi per la visibilità e il controllo, ti consigliamo di attivare la registrazione delle norme di rete. Questa funzionalità è disponibile solo con GKE Dataplane V2. La registrazione dei criteri di rete fornisce visibilità sull'applicazione dei criteri e sui pattern di traffico dei pod. Tieni presente che sono previsti costi per la registrazione dei log delle norme di rete.
Per i cluster GKE che utilizzano la versione 1.14 o successive, Logging e Monitoring sono entrambi abilitati per impostazione predefinita. Monitoring fornisce una dashboard per i tuoi cluster GKE. La registrazione abilita anche le annotazioni GKE per i log di flusso VPC. Per impostazione predefinita, Logging raccoglie i log per tutti i workload di cui è stato eseguito il deployment nel cluster, ma esiste anche un'opzione per i log di sistema soltanto. Utilizza la dashboard GKE per osservare e impostare avvisi. Per i cluster creati in modalità Autopilot, il monitoraggio e la registrazione vengono abilitati automaticamente e non sono configurabili.
Tieni presente che sono previsti costi per Google Cloud Observability.