Questa pagina fornisce una guida agli aspetti principali del networking di Google Kubernetes Engine (GKE). Queste informazioni sono utili per chi ha appena iniziato a utilizzare Kubernetes, nonché per operatori di cluster o sviluppatori di applicazioni esperti che hanno bisogno di maggiori conoscenze sulla rete Kubernetes per progettare meglio le applicazioni o configurare i carichi di lavoro Kubernetes.
Questa pagina è rivolta agli architetti cloud e agli esperti di networking che progettano e progettano la rete per la propria organizzazione. Per scoprire di più sui ruoli comuni e sugli esempi di attività a cui facciamo riferimento nei contenuti di Google Cloud, consulta Ruoli e attività comuni degli utenti di GKE Enterprise.
Kubernetes ti consente di definire in modo dichiarativo il modo in cui le applicazioni vengono dipiattate, come comunicano tra loro e con il pannello di controllo Kubernetes e come i clienti possono raggiungerle. Questa pagina fornisce inoltre informazioni su come GKE configura i servizi Google Cloud, se pertinenti alla rete.
Quando utilizzi Kubernetes per orchestrare le tue applicazioni, è importante cambiare il modo in cui pensi alla progettazione di rete delle applicazioni e dei relativi host. Con Kubernetes, devi pensare a come comunicano i pod, i servizi e i client esterni, anziché a come sono connessi i tuoi host o le tue macchine virtuali (VM).
Networking software-defined (SDN) avanzata di Kubernetes consente il routing e l'inoltro dei pacchetti per pod, servizi e nodi in zone diverse dello stesso cluster regionale. Kubernetes e Google Cloud configurano anche dinamicamente le regole di filtro IP, le tabelle di routing e le regole di firewall su ogni nodo, a seconda del modello dichiarativo dei deployment di Kubernetes e della configurazione del cluster su Google Cloud.
Prerequisiti
Prima di leggere questa pagina, ti consigliamo di avere familiarità con i concetti di gestione della rete Linux e con utilità come le regole e il routing di iptables
.
Inoltre, assicurati di conoscere la terminologia di base per i seguenti argomenti:
Terminologia relativa agli indirizzi IP in Kubernetes
Il modello di networking di Kubernetes fa grande affidamento sugli indirizzi IP. Servizi, pod, container e nodi comunicano tramite indirizzi IP e porte. Kubernetes fornisce diversi tipi di bilanciamento del carico per indirizzare il traffico ai pod corretti. Tutti questi meccanismi sono descritti in maggiore dettaglio di seguito. Tieni presente i seguenti termini mentre leggi:
- ClusterIP: l'indirizzo IP assegnato a un servizio. In altri documenti, potrebbe essere chiamato "IP cluster". Questo indirizzo è stabile per tutta la durata del servizio, come descritto nella sezione Servizi.
- Indirizzo IP del pod:l'indirizzo IP assegnato a un determinato pod. Si tratta di un elemento temporaneo, come discusso in Pod.
- Indirizzo IP del nodo: l'indirizzo IP assegnato a un determinato nodo.
Requisiti di networking del cluster
Tutti i cluster richiedono la connettività a *.googleapis.com
,
*.gcr.io
e all'indirizzo IP del control plane. Questo requisito è soddisfatto dalle regole di uscita consentite implicite e dalle regole firewall create automaticamente create da GKE.
Networking all'interno del cluster
Questa sezione illustra la rete all'interno di un cluster Kubernetes in relazione all'allocazione IP, ai pod, ai servizi, al DNS e al piano di controllo.
Allocazione IP
Kubernetes utilizza vari intervalli IP per assegnare indirizzi IP a nodi, pod e servizi.
- A ogni nodo viene assegnato un indirizzo IP dalla rete Virtual Private Cloud (VPC) del cluster. Questo indirizzo IP del nodo fornisce connettività dai componenti di controllo come
kube-proxy
ekubelet
al server API Kubernetes. Questo indirizzo IP è la connessione del nodo al resto del cluster. - Ogni nodo ha un pool di indirizzi IP che GKE assegna ai pod in esecuzione su quel nodo (un blocco CIDR/24 per impostazione predefinita). Se vuoi, puoi specificare l'intervallo di IP quando crei il cluster. La funzionalità di intervallo CIDR del pod flessibile ti consente di ridurre le dimensioni dell'intervallo per gli indirizzi IP dei pod per i nodi in un node pool.
- A ogni pod viene assegnato un singolo indirizzo IP dall'intervallo CIDR del pod del relativo nodo. Questo indirizzo IP è condiviso da tutti i container in esecuzione nel pod e li collega ad altri pod in esecuzione nel cluster.
- A ogni servizio viene assegnato un indirizzo IP, chiamato ClusterIP, dalla rete VPC del cluster. Se vuoi, puoi personalizzare la rete VPC quando crei il cluster.
- Ogni piano di controllo ha un indirizzo IP pubblico o interno in base al tipo di cluster, alla versione e alla data di creazione. Per maggiori informazioni, consulta la descrizione del control plane.
Il modello di networking di GKE non consente di riutilizzare gli indirizzi IP nella rete. Quando esegui la migrazione a GKE, devi pianificare l'allocazione degli indirizzi IP per ridurre l'utilizzo degli indirizzi IP interni in GKE.
MTU
L'MTU selezionato per un'interfaccia del pod dipende dall'interfaccia di rete del contenitore (CNI) utilizzata dai nodi del cluster e dall'impostazione MTU della VPC sottostante. Per ulteriori informazioni, consulta Pod.
Il valore MTU dell'interfaccia del pod è 1460
o ereditato dall'interfaccia principale del nodo.
CNI | MTU | GKE Standard |
---|---|---|
kubenet | 1460 | Predefinito |
kubenet (GKE versione 1.26.1 e successive) |
Ereditato | Predefinito |
Calico | 1460 |
Abilitato utilizzando Per maggiori dettagli, vedi Controllare la comunicazione tra pod e servizi utilizzando i criteri di rete. |
netd | Ereditato | Attivata utilizzando una delle seguenti opzioni: |
GKE Dataplane V2 | Ereditato |
Abilitato utilizzando Per maggiori dettagli, consulta Utilizzare GKE Dataplane V2. |
Per ulteriori informazioni, consulta Cluster nativi di VPC.
Componenti aggiuntivi di rete supportati
- Per utilizzare un plug-in di rete, devi installarlo autonomamente. GKE offre i seguenti plug-in di rete supportati in modo nativo:
- Calico (in Dataplane V1)
- Cilium (in Dataplane V2)
- Istio-CNI (nel controller del dataplane gestito per GKE Enterprise)
Pod
In Kubernetes, un pod è l'unità di deployment più di base all'interno di un cluster Kubernetes. Un pod esegue uno o più container. Zero o più pod vengono eseguiti su un nodo. Ogni nodo del cluster fa parte di un pool di nodi.
In GKE, questi nodi sono macchine virtuali, ciascuna in esecuzione come istanza in Compute Engine.
I pod possono anche essere collegati a volumi di archiviazione esterni e ad altre risorse personalizzate. Questo diagramma mostra un singolo nodo su cui sono in esecuzione due pod, ciascuno collegato a due volumi.
Quando Kubernetes pianifica l'esecuzione di un pod su un nodo, crea un
spazio dei nomi di rete
per il pod nel kernel Linux del nodo. Questo spazio dei nomi di rete collega l'interfaccia di rete fisica del nodo, ad esempio eth0
, al pod utilizzando un'interfaccia di rete virtuale, in modo che i pacchetti possano fluire verso e dal pod. L'interfaccia di rete virtuale associata nello spazio dei nomi di rete principale del nodo si connette a un bridge Linux che consente la comunicazione tra i pod sullo stesso nodo. Un pod può anche inviare pacchetti all'esterno del nodo utilizzando la stessa interfaccia virtuale.
Kubernetes assegna un indirizzo IP (l'indirizzo IP del pod) all'interfaccia di rete virtuale nel nome dello spazio di rete del pod da un intervallo di indirizzi riservati ai pod sul nodo. Questo intervallo di indirizzi è un sottoinsieme dell'intervallo di indirizzi IP assegnato al cluster per i pod, che puoi configurare quando crei un cluster.
Un container in esecuzione in un pod utilizza lo spazio dei nomi di rete del pod. Dal punto di vista del container, il pod sembra essere una macchina fisica con un'interfaccia di rete. Tutti i container nel pod vedono la stessa interfaccia di rete.
localhost
di ogni contenitore è connesso, tramite il pod, all'interfaccia di rete fisica del nodo, ad esempio eth0
.
Tieni presente che questa connettività è molto diversa a seconda che tu utilizzi CNI (Container Network Interface) di GKE o scelga di utilizzare l'implementazione di Calico attivando il criterio di rete quando crei il cluster.
Se utilizzi il CNI di GKE, un'estremità della coppia di dispositivi Ethernet virtuali (veth) è collegata al pod nel relativo spazio dei nomi e l'altra è collegata al dispositivo bridge Linux
cbr0
.1 In questo caso, il seguente comando mostra gli indirizzi MAC dei vari pod collegati acbr0
:arp -n
L'esecuzione del seguente comando nel contenitore della cassetta degli attrezzi mostra la parte dello spazio dei nomi principale di ogni coppia veth collegata a
cbr0
:brctl show cbr0
Se il criterio di rete è attivato, un'estremità della coppia veth è collegata al pod e l'altra a
eth0
. In questo caso, il seguente comando mostra gli indirizzi MAC dei vari pod collegati a diversi dispositivi veth:arp -n
L'esecuzione del seguente comando nel contenitore della cassetta degli attrezzi mostra che non esiste un dispositivo bridge Linux denominato
cbr0
:brctl show
Le regole iptables che facilitano il forwarding all'interno del cluster differiscono da uno scenario all'altro. È importante tenere presente questa distinzione durante la risoluzione dettagliata dei problemi di connettività.
Per impostazione predefinita, ogni pod ha accesso non filtrato a tutti gli altri pod in esecuzione su tutti i nodi del cluster, ma puoi limitare l'accesso tra i pod. Kubernetes elimina regolarmente e ricrea i pod. Questo accade quando viene eseguito l'upgrade di un pool di nodi, quando viene modificata la configurazione dichiarativa del pod o l'immagine di un container o quando un nodo diventa non disponibile. Pertanto, l'indirizzo IP di un pod è un dettaglio di implementazione e non devi basarti su di esso. Kubernetes fornisce indirizzi IP stabili utilizzando Services.
-
Il bridge di rete virtuale
cbr0
viene creato solo se esistono pod che impostanohostNetwork: false
.↩
Servizi
In Kubernetes, puoi assegnare coppie chiave-valore arbitrarie chiamate etichette a qualsiasi risorsa Kubernetes. Kubernetes utilizza le etichette per raggruppare più pod correlati in un'unità logica chiamata servizio. Un servizio ha un indirizzo IP e porte stabili e fornisce il bilanciamento del carico tra l'insieme di pod le cui etichette corrispondono a tutte le etichette che definisci nel selettore di etichette quando crei il servizio.
Il seguente diagramma mostra due servizi distinti, ciascuno composto da più pod. Ognuno dei pod nel diagramma ha l'etichetta app=demo
, ma le altre etichette sono diverse. "Frontend" del servizio corrisponde a tutti i pod con app=demo
e component=frontend
, mentre "Utenti" del servizio corrisponde a tutti i pod con app=demo
e component=users
. Il pod client non corrisponde esattamente a nessuno dei valori di Service
selector, pertanto non fa parte di nessuno dei servizi. Tuttavia, il pod client può comunicare con uno dei servizi perché viene eseguito nello stesso cluster.
Kubernetes assegna un indirizzo IP stabile e affidabile a ogni servizio appena creato (ClusterIP) dal pool di indirizzi IP dei servizi disponibili del cluster. Kubernetes assegna anche un nome host a ClusterIP, aggiungendo una voce DNS. ClusterIP e il nome host sono univoci all'interno del cluster e non cambiano durante il ciclo di vita del servizio. Kubernetes rilascia ClusterIP e il nome host solo se il servizio viene eliminato dalla configurazione del cluster. Puoi accedere a un pod funzionante che esegue la tua applicazione utilizzando l'indirizzo ClusterIP o l'hostname del servizio.
A prima vista, un servizio potrebbe sembrare un single point of failure per le tue applicazioni. Tuttavia, Kubernetes distribuisce il traffico nel modo più uniforme possibile tra l'intero insieme di pod in esecuzione su molti nodi, in modo che un cluster possa resistere a un'interruzione che interessa uno o più (ma non tutti) nodi.
Kube-Proxy
Kubernetes gestisce la connettività tra pod e servizi utilizzando il componente kube-proxy
, che tradizionalmente viene eseguito come pod statico su ogni nodo.
kube-proxy
, che non è un proxy in linea, ma un controller di bilanciamento del carico in base all'uscita, monitora il server API Kubernetes e mappa continuamente ClusterIP ai pod sani aggiungendo e rimuovendo le regole DNAT (NAT di destinazione) al sottosistema iptables
del nodo. Quando un contenitore in esecuzione in un pod invia traffico all'indirizzo ClusterIP di un servizio, il nodo seleziona un pod in modo casuale e instrada il traffico a quel pod.
Quando configuri un servizio, puoi eventualmente rimappare la relativa porta di ascolto definendo i valori per port
e targetPort
.
port
è il punto in cui i client raggiungono l'applicazione.targetPort
è la porta su cui l'applicazione è effettivamente in ascolto per il traffico all'interno del pod.
kube-proxy
gestisce questo rimappamento delle porte aggiungendo e rimuovendo regole iptables
sul nodo.
Questo diagramma illustra il flusso di traffico da un pod client a un pod server su un nodo diverso. Il client si connette al Servizio all'indirizzo 172.16.12.100:80
.
Il server API Kubernetes gestisce un elenco di pod che eseguono l'applicazione. Il processo kube-proxy
su ogni nodo utilizza questo elenco per creare una regola iptables
per indirizzare il traffico a un pod appropriato (ad esempio 10.255.255.202:8080
). Il pod client non deve essere a conoscenza della topologia del cluster o di dettagli sui singoli pod o contenitori al suo interno.
Il modo in cui kube-proxy
viene disegnato dipende dalla versione GKE del
cluster:
- Per le versioni GKE 1.16.0 e 1.16.8-gke.13,
kube-proxy
viene eseguito il deployment come DaemonSet. - Per le versioni di GKE successive alla 1.16.8-gke.13,
kube-proxy
viene eseguito il deployment come pod statico per i nodi.
DNS
GKE fornisce le seguenti opzioni DNS del cluster gestito per risolvere i nomi di servizio e i nomi esterni:
kube-dns: un componente aggiuntivo del cluster di cui viene eseguito il deployment per impostazione predefinita in tutti i cluster GKE. Per ulteriori informazioni, consulta Utilizzo di kube-dns.
Cloud DNS: un'infrastruttura DNS del cluster gestita dal cloud che sostituisce kube-dns nel cluster. Per maggiori informazioni, consulta Utilizzare Cloud DNS per GKE.
GKE fornisce inoltre NodeLocal DNSCache come componente aggiuntivo facoltativo con kube-dns o Cloud DNS per migliorare le prestazioni del DNS del cluster.
Per scoprire di più su come GKE fornisce il DNS, consulta Service Discovery e DNS.
Piano di controllo
In Kubernetes, il piano di controllo gestisce i processi del piano di controllo, incluso il server API Kubernetes. La modalità di accesso al piano di controllo dipende da come hai configurato l'isolamento della rete del piano di controllo.
Networking al di fuori del cluster
Questa sezione spiega come il traffico proveniente dall'esterno del cluster raggiunge le applicazioni in esecuzione all'interno di un cluster Kubernetes. Queste informazioni sono importanti per la progettazione delle applicazioni e dei carichi di lavoro del cluster.
Hai già letto di come Kubernetes utilizza i servizi per fornire indirizzi IP stabili per le applicazioni in esecuzione all'interno dei pod. Per impostazione predefinita,
i pod non espongono un indirizzo IP esterno, perché kube-proxy
gestisce tutto
il traffico su ogni nodo. I pod e i relativi container possono comunicare liberamente, ma le connessioni esterne al cluster non possono accedere al servizio. Ad esempio, nell'illustrazione precedente, i client esterni al cluster
non possono accedere al servizio frontend utilizzando il relativo ClusterIP.
GKE fornisce tre diversi tipi di bilanciatori del carico per controllare l'accesso e distribuire il traffico in entrata nel cluster nel modo più uniforme possibile. Puoi configurare un servizio in modo da utilizzare più tipi di bilanciatori del carico contemporaneamente.
- I bilanciatori del carico esterni gestiscono il traffico proveniente dall'esterno del cluster e dalla rete VPC (Virtual Private Cloud) di Google Cloud. Utilizzano regole di inoltro associate alla rete Google Cloud per instradare il traffico a un nodo Kubernetes.
- I bilanciatori del carico interni gestiscono il traffico proveniente dalla stessa rete VPC. Come i bilanciatori del carico esterni, utilizzano le regole di inoltro associate alla rete Google Cloud per indirizzare il traffico a un nodo Kubernetes.
- I bilanciatori del carico delle applicazioni sono bilanciatori del carico esterni specializzati utilizzati per il traffico HTTP(S). Utilizzano una risorsa Ingress anziché una regola di forwarding per instradare il traffico a un nodo Kubernetes.
Quando il traffico raggiunge un nodo Kubernetes, viene gestito allo stesso modo, indipendentemente dal tipo di bilanciatore del carico. Il bilanciatore del carico non è a conoscenza di quali nodi
nel cluster eseguono pod per il servizio. ma bilancia il traffico su tutti i nodi del cluster, anche su quelli su cui non è in esecuzione un pod pertinente. In un
cluster regionale, il carico viene distribuito su tutti i nodi di tutte le zone della regione del
cluster. Quando il traffico viene indirizzato a un nodo, il nodo lo inoltra a un pod, che può essere in esecuzione sullo stesso nodo o su un altro. Il nodo inoltra il traffico a un pod scelto in modo casuale utilizzando le regole iptables
gestite da kube-proxy
sul nodo.
Nel diagramma seguente, il bilanciatore del carico di rete passthrough esterno indirizza il traffico al nodo intermedio, che a sua volta lo reindirizza a un pod sul primo nodo.
Quando un bilanciatore del carico invia traffico a un nodo, il traffico potrebbe essere inoltrato a un pod su un altro nodo. Ciò richiede hop di rete aggiuntivi. Se vuoi evitare gli hop aggiuntivi, puoi specificare che il traffico deve essere indirizzato a un pod sullo stesso nodo che lo riceve inizialmente.
Per specificare che il traffico deve essere indirizzato a un pod sullo stesso nodo, imposta
externalTrafficPolicy
su Local
nel manifest del servizio:
apiVersion: v1
kind: Service
metadata:
name: my-lb-service
spec:
type: LoadBalancer
externalTrafficPolicy: Local
selector:
app: demo
component: users
ports:
- protocol: TCP
port: 80
targetPort: 8080
Quando imposti externalTrafficPolicy
su Local
, il bilanciatore del carico invia il traffico solo ai nodi con un pod integro che appartiene al servizio.
Il bilanciatore del carico utilizza un controllo di integrità per determinare quali nodi hanno i pod appropriati.
Bilanciatore del carico esterno
Se il servizio deve essere raggiungibile dall'esterno del cluster e della rete VPC, puoi configurarlo come LoadBalancer impostando il campo type
del servizio su Loadbalancer
quando lo definisci. GKE esegue quindi il provisioning di un
bilanciatore del carico di rete passthrough esterno davanti al servizio.
Il bilanciatore del carico di rete passthrough esterno è a conoscenza di tutti i nodi del cluster e configura le regole del firewall della rete VPC per consentire le connessioni al servizio dall'esterno della rete VPC utilizzando l'indirizzo IP esterno del servizio. Puoi assegnare un indirizzo IP esterno statico al servizio.
Per scoprire di più sulle regole firewall, consulta Regole firewall create automaticamente.
Dettagli tecnici
Quando utilizzi il bilanciatore del carico esterno, il traffico in arrivo viene inizialmente indirizzato a un nodo utilizzando una regola di forwarding associata alla rete Google Cloud.
Una volta che il traffico raggiunge il nodo, quest'ultimo utilizza la propria tabella NAT iptables
per scegliere un pod. kube-proxy
gestisce le regole iptables
sul nodo.
Bilanciatore del carico interno
Per il traffico che deve raggiungere il cluster dalla stessa rete VPC, puoi configurare il servizio per eseguire il provisioning di un bilanciatore del carico di rete passthrough interno. Il bilanciatore del carico di rete passthrough interno sceglie un indirizzo IP dalla subnet VPC del cluster anziché un indirizzo IP esterno. Le applicazioni o i servizi all'interno della rete VPC possono utilizzare questo indirizzo IP per comunicare con i servizi all'interno del cluster.
Dettagli tecnici
Il bilanciamento del carico interno è fornito da Google Cloud. Quando il traffico raggiunge un determinato nodo, questo utilizza la propria tabella NAT iptables
per scegliere un pod, anche se si trova su un altro nodo.
kube-proxy
gestisce le regole iptables
sul nodo.
Per ulteriori informazioni sui bilanciatori del carico interni, consulta Utilizzo di un bilanciatore del carico di rete passthrough interno.
Bilanciatore del carico delle applicazioni
Molte applicazioni, come le API di servizi web RESTful, comunicano utilizzando HTTP(S). Puoi consentire ai client esterni alla tua rete VPC di accedere a questo tipo di applicazione utilizzando un Ingress Kubernetes.
Un Ingress consente di mappare gli host name e i percorsi URL ai servizi all'interno del cluster. Quando utilizzi un bilanciatore del carico delle applicazioni, devi configurare il servizio in modo che utilizzi un NodePort e un ClusterIP. Quando il traffico accede al servizio sull'IP di un nodo in NodePort, GKE instrada il traffico a un pod integro per il servizio. Puoi specificare una porta NodePort o consentire a GKE di assegnarne una non utilizzata in modo casuale.
Quando crei la risorsa Ingress, GKE esegue il provisioning di un
Application Load Balancer esterno
nel progetto Google Cloud. Il bilanciatore del carico invia una richiesta all'indirizzo IP di un nodo in NodePort. Una volta che la richiesta raggiunge il nodo, quest'ultimo utilizza la tabella NAT
iptables
per scegliere un pod. kube-proxy
gestisce le regole iptables
sul nodo.
Questa definizione di Ingress instrada il traffico per demo.example.com
a un servizio denominato
frontend
sulla porta 80 e demo-backend.example.com
a un servizio denominato
users
sulla porta 8080.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: demo
spec:
rules:
- host: demo.example.com
http:
paths:
- backend:
service:
name: frontend
port:
number: 80
- host: demo-backend.example.com
http:
paths:
- backend:
service:
name: users
port:
number: 8080
Per ulteriori informazioni, consulta GKE Ingress per il bilanciatore del carico delle applicazioni.
Dettagli tecnici
Quando crei un oggetto Ingress, il controller Ingress di GKE configura un bilanciatore del carico delle applicazioni in base alle regole nel manifest Ingress e nei manifest del servizio associati. Il client invia una richiesta all'Application Load Balancer. Il bilanciatore del carico è un proxy effettivo; sceglie un nodo e inoltra la richiesta alla combinazione NodeIP
:NodePort
del nodo. Il nodo utilizza la propria tabella NAT iptables
per scegliere un pod.
kube-proxy
gestisce le regole iptables
sul nodo.
Limitare la connettività tra i nodi
La creazione di regole firewall in entrata o in uscita che hanno come target i nodi del cluster potrebbe avere effetti negativi. Ad esempio, l'applicazione di regole di rifiuto in uscita ai nodi del tuo cluster potrebbe causare il malfunzionamento di funzionalità come NodePort
e kubectl exec
.
Limitare la connettività a pod e servizi
Per impostazione predefinita, tutti i pod in esecuzione nello stesso cluster possono comunicare liberamente. Tuttavia, puoi limitare la connettività all'interno di un cluster in diversi modi, a seconda delle tue esigenze.
Limitazione dell'accesso tra i pod
Puoi limitare l'accesso tra i pod utilizzando un criterio di rete. Le definizioni dei criteri di rete consentono di limitare il traffico in entrata e in uscita dei pod in base a una combinazione arbitraria di etichette, intervalli IP e numeri di porta.
Per impostazione predefinita, non esiste alcun criterio di rete, pertanto tutto il traffico tra i pod nel cluster è consentito. Non appena crei il primo criterio di rete in uno spazio dei nomi, tutto l'altro traffico viene negato.
Dopo aver creato un criterio di rete, devi attivarlo esplicitamente per il cluster. Per ulteriori informazioni, consulta la pagina sulla configurazione dei criteri di rete per le applicazioni.
Limitare l'accesso a un bilanciatore del carico esterno
Se il servizio utilizza un bilanciatore del carico esterno, per impostazione predefinita il traffico da qualsiasi indirizzo IP esterno può accedere al servizio. Puoi limitare gli intervalli di indirizzi IP che possono accedere agli endpoint all'interno del cluster configurando l'opzione loadBalancerSourceRanges
durante la configurazione del servizio. Puoi specificare più intervalli e aggiornare la configurazione di un servizio in esecuzione in qualsiasi momento. L'istanza kube-proxy
in esecuzione su ogni nodo configura le regole iptables
del nodo in modo da negare tutto il traffico che non corrisponde al loadBalancerSourceRanges
specificato. Inoltre, quando crei un servizio LoadBalancer, GKE crea una regola firewall VPC corrispondente per applicare queste limitazioni a livello di rete.
Limitare l'accesso a un bilanciatore del carico delle applicazioni
Se il tuo servizio utilizza un Application Load Balancer, puoi utilizzare un criterio di sicurezza di Google Cloud Armor per limitare gli indirizzi IP esterni che possono accedere al servizio e le risposte da restituire quando l'accesso viene negato a causa del criterio di sicurezza. Puoi configurare Cloud Logging per registrare informazioni su queste interazioni.
Se un criterio di sicurezza di Google Cloud Armor non è sufficientemente granulare, puoi attivare Identity-Aware Proxy sui tuoi endpoint per implementare l'autenticazione e l'autorizzazione basate sugli utenti per la tua applicazione. Per ulteriori informazioni, consulta il tutorial dettagliato sulla configurazione degli acquisti in-app.
Problemi noti
Questa sezione illustra i problemi noti.
Nodo con contenitore abilitato non in grado di connettersi all'intervallo 172.17/16
Una VM node con containerd abilitato non può connettersi a un host con un indirizzo IP
all'interno di 172.17/16
. Per ulteriori informazioni, consulta
Conflitto con l'intervallo di indirizzi IP 172.17/16.
Risorse rimanenti dei cluster GKE eliminati con Private Service Connect
Se hai creato ed eliminato cluster GKE con Private Service Connect prima del 7 maggio 2024 ed hai eliminato il progetto contenente il cluster prima del cluster stesso, potresti aver divulgato le risorse Private Service Connect associate. Queste risorse rimangono nascoste e non ti consentono di eliminare le subnet associate. Se riscontri questo problema, contatta l'assistenza Google Cloud.