Questa pagina spiega come funziona il mascheramento IP in Google Kubernetes Engine (GKE) e fornisce opzioni di configurazione per diversi scenari.
Questa pagina presuppone che tu conosca l'IP masquerading in Kubernetes.
IP masquerading GKE
GKE può utilizzare l'accesso mascherato degli IP per modificare gli indirizzi IP di origine dei pacchetti inviati dai pod. Quando il mascheramento IP viene applicato a un pacchetto emesso da un pod, GKE modifica l'indirizzo IP di origine del pacchetto dall'indirizzo IP del pod all'indirizzo IP del nodo sottostante. Il mascheramento dell'indirizzo IP di origine di un pacchetto è utile quando un destinatario è configurato per ricevere pacchetti solo dagli indirizzi IP dei nodi del cluster.
Sui nodi Linux, GKE configura le regole iptables
.
GKE utilizza ip-masq-agent
DaemonSet
per configurare il dataplane appropriato.
Il mascheramento IP non è supportato con i node pool Windows Server.
IP masquerading per i cluster Standard
Nei cluster Standard, il comportamento di mascheramento IP del cluster è regolato da tre fattori:
- Se hai eseguito il deployment o GKE ha eseguito automaticamente il deployment del
ip-masq-agent
DaemonSet nel cluster. Per scoprire gli scenari in cui GKE esegue automaticamente il deployment del DaemonSetip-masq-agent
, consulta la sezione Quando viene eseguito automaticamente il deployment diip-masq-agent
. - Se hai creato un elenco personalizzato
nonMasqueradeCIDRs
nelip-masq-agent
configMap. - Nei casi in cui non è stato eseguito il deployment di alcun DaemonSet
ip-masq-agent
nel cluster, indipendentemente dal fatto che tu abbia creato il cluster con il flag--disable-default-snat
. Per scoprire di più su questo flag, consulta Effetto del flag--disable-default-snat
.
La seguente tabella riepiloga le configurazioni di mascheramento IP per i cluster GKE Standard:
Configurazione cluster | Comportamento SNAT risultante |
---|---|
Il DaemonSet |
GKE conserva gli indirizzi IP dei pod di origine per
i pacchetti inviati alle destinazioni specificate nell'elenco
GKE modifica gli indirizzi IP dei pod di origine in indirizzi IP dei nodi di origine per i pacchetti inviati a destinazioni non specificate nell'elenco |
Il DaemonSet |
GKE conserva gli indirizzi IP dei pod di origine per i pacchetti inviati a un insieme di destinazioni non masquerade predefinite. GKE modifica gli indirizzi IP dei pod di origine in indirizzi IP dei nodi di origine per i pacchetti inviati a destinazioni al di fuori delle destinazioni non mascherate predefinite. |
Il DaemonSet |
GKE conserva gli indirizzi IP dei pod di origine per i pacchetti inviati a un insieme di destinazioni non masquerade predefinite. GKE modifica gli indirizzi IP dei pod di origine in indirizzi IP dei nodi di origine per i pacchetti inviati a destinazioni al di fuori delle destinazioni non mascherate predefinite. |
Il DaemonSet |
GKE conserva gli indirizzi IP dei pod di origine per i pacchetti inviati a tutte le destinazioni. Consulta Conservare le origini degli indirizzi IPv4 dei pod per le destinazioni internet per importanti considerazioni sul routing quando conservi gli indirizzi di origine IPv4 dei pod e devi instradare i pacchetti a internet. |
IP masquerading per i cluster Autopilot
Nei cluster Autopilot, GKE esegue sempre il deployment di un
DaemonSet ip-masq-agent
. Ad eccezione dei pacchetti inviati dai pod agli intervalli di nodi, pod o servizi del cluster, puoi controllare il comportamento di mascheramento IP utilizzando un EgressNATPolicy
. Per utilizzare un EgressNATPolicy
, il cluster Autopilot
deve soddisfare entrambi i seguenti requisiti:
- Il cluster deve utilizzare GKE 1.23.4-gke.1600 o versioni successive oppure 1.22.7-gke.1500 o versioni successive.
- Il cluster deve essere stato creato con GKE Dataplane V2 abilitato.
La seguente tabella riepiloga le configurazioni di mascheramento IP per i cluster GKE Autopilot:
Configurazione del cluster Autopilot | Comportamento SNAT risultante |
---|---|
Il cluster include un |
GKE conserva gli indirizzi IP dei pod di origine per i pacchetti inviati alle destinazioni specificate in GKE modifica gli indirizzi IP dei pod di origine in indirizzi IP dei nodi di origine per i pacchetti inviati a destinazioni non specificate in |
Il cluster non include un |
Vengono applicati sia i criteri predefiniti
|
Esempi di configurazione
Espandi le sezioni seguenti per visualizzare esempi di mascheramento e configurazione dell'IP in base al tipo di cluster.
Guida di riferimento alla configurazione avanzata
Quando ip-masq-agent
viene implementato automaticamente
Nei cluster in modalità Autopilot, GKE esegue sempre il deployment di un
DaemonSet ip-masq-agent
.
Nei cluster Standard, GKE esegue il deployment di un DaemonSet ip-masq-agent
quando il flag --disable-default-snat
non è impostato e il cluster
utilizza una delle seguenti combinazioni di configurazione:
Il cluster non utilizza GKE Dataplane V2 e l'applicazione dei criteri di rete è abilitata.
Il cluster utilizza un intervallo di indirizzi IP del pod che non rientra in
10.0.0.0/8
.
Affinché il DaemonSet ip-masq-agent
sia efficace, devi anche
specificare l'elenco nonMasqueradeCIDRs
nel ConfigMap ip-masq-agent
. Per maggiori informazioni, consulta la sezione
Come configurare un agente di mascheramento IP.
Quando in un cluster è presente un DaemonSet ip-masq-agent
, GKE
aggiorna e riconcilia un pod di servizio su ogni nodo del cluster.
Destinazioni non di rappresentazione predefinite
Le destinazioni non mascherate predefinite sono:
10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
100.64.0.0/10
192.0.0.0/24
192.0.2.0/24
192.88.99.0/24
198.18.0.0/15
198.51.100.0/24
203.0.113.0/24
240.0.0.0/4
Le destinazioni non mascherate predefinite sono applicabili ai cluster con le seguenti configurazioni:
Il tuo cluster ha un
ip-masq-agent
DaemonSet, ma nessun elencononMasqueradeCIDRs
specificato nel relativo ConfigMapip-masq-agent
. Ciò include il caso in cui il tuo cluster ha un DaemonSetip-masq-agent
, ma non ha alcun ConfigMapip-masq-agent
.Il cluster non ha un
ip-masq-agent
DaemonSet, e il--disable-default-snat
flag non è impostato.
Le destinazioni non di rappresentazione predefinite non sono applicabili ai cluster con le seguenti configurazioni:
Il cluster ha un
ip-masq-agent
DaemonSet e hai unnonMasqueradeCIDRs
elenco personalizzato specificato in ConfigMapip-masq-agent
. Un elencononMasqueradeCIDRs
personalizzato sostituisce sempre le destinazioni non di rappresentazione predefinite quando il cluster ha un DaemonSetip-masq-agent
.Il cluster non ha un
ip-masq-agent
DaemonSet, e il--disable-default-snat
flag è impostato. Per ulteriori dettagli su questa configurazione, consulta Effetto del flag--disable-default-snat
.
Effetto della bandiera --disable-default-snat
Il flag --disable-default-snat
modifica il comportamento predefinito di GKE SNAT in modo che gli indirizzi IP dei pod di origine vengano conservati per i pacchetti inviati a tutte le destinazioni.
GKE implementa il comportamento SNAT predefinito non eseguendo il deployment di alcun
DaemonSet ip-masq-agent
nel cluster.
Il flag --disable-default-snat
non ha effetto quando un cluster include un DaemonSet ip-masq-agent
:
Poiché i cluster Autopilot includono sempre un DaemonSet
ip-masq-agent
, il flag--disable-default-snat
non ha alcun effetto sui cluster Autopilot.Per i cluster Standard: se esegui il deployment di un
ip-masq-agent
DaemonSet o se GKE esegue automaticamente il deployment di unip-masq-agent
DaemonSet, il flag--disable-default-snat
non ha significato per il cluster, anche se--disable-default-snat
è impostato. Quando nel cluster è presente unip-masq-agent
DaemonSet, le destinazioni non masquerade sono specificate in modo esplicito in un elencononMasqueradeCIDRs
delip-masq-agent
ConfigMap o dalle destinazioni non masquerade predefinite quando non è definito alcun elencononMasqueradeCIDRs
.
Puoi impostare il flag --disable-default-snat
aggiornando un cluster dopo la sua creazione. A condizione che nel cluster non sia stato eseguito il deployment di un DaemonSet ip-masq-agent
, la disabilitazione della SNAT predefinita ha effetto dopo che il cluster ha sostituito tutti i suoi nodi, a volte ore dopo. Questo perché GKE
rispetta le finestre di
manutenzione
configurate quando sostituisce i nodi nel cluster. Se non hai configurato alcuna finestra di manutenzione, devi riavviare manualmente i nodi nel cluster prima che il flag --disable-default-snat
abbia effetto.
Mascheramento link-local
L'intervallo 169.254.0.0/16
viene utilizzato per gli indirizzi IP locali rispetto al collegamento. Il mascheramento
link-local si riferisce alla modifica di un indirizzo IP pod di origine in un indirizzo IP nodo di origine
per i pacchetti inviati alle destinazioni 169.254.0.0/16
.
I cluster Autopilot conservano sempre gli indirizzi IP dei pod di origine per i pacchetti
inviati alle destinazioni 169.254.0.0/16
.
Per impostazione predefinita, i cluster Standard
conservano anche gli indirizzi IP dei pod di origine per i pacchetti inviati alle destinazioni 169.254.0.0/16
.
Puoi abilitare il mascheramento IP link-local in un cluster Standard eseguendo entrambe le seguenti operazioni:
- Assicurati che il parametro
masqLinkLocal
esista e sia impostato suTrue
nel configMapip-masq-agent
. Quando il parametromasqLinkLocal
non è presente nel configMapip-masq-agent
, il valore predefinito èFalse
. Per indicazioni, vedi Controllo di ConfigMapip-masq-agent
, Creazione di ConfigMapip-masq-agent
e Modifica di un ConfigMapip-masq-agent
esistente. - Assicurati che nel cluster sia stato eseguito il deployment del DaemonSet
ip-masq-agent
. Per indicazioni, vedi Controllo diip-masq-agent
DaemonSet e Deployment diip-masq-agent
DaemonSet.
Contenitori diagnostici e pod con hostNetwork: true
A meno che tu non specifichi un indirizzo IP di origine personalizzato per i pacchetti, i pod in esecuzione
con hostNetwork: true
e i container di diagnostica inviano pacchetti con origini
corrispondenti all'indirizzo IP del nodo. Per i pod in esecuzione con hostNetwork: true
,
GKE assegna al pod l'indirizzo IP del nodo. GKE
non gestisce gli indirizzi IP per i container di diagnostica, inclusi i container
per il debug dei problemi dei nodi utilizzando
toolbox.
I cluster Autopilot non supportano l'esecuzione di pod con
spec.hostNetwork: true
. Poiché i nodi di un cluster Autopilot non sono accessibili tramite SSH, non puoi eseguire container di diagnostica.
Conservare le origini degli indirizzi IPv4 dei pod per le destinazioni internet
Se la configurazione di IP Masquerade del cluster è una delle seguenti, GKE conserva le origini degli indirizzi IP dei pod per i pacchetti inviati a tutte le destinazioni, incluse quelle internet:
- Nei cluster Standard con un DaemonSet
ip-masq-agent
, se hai impostatononMasqueradeCIDRs
su0.0.0.0
in ConfigMapip-masq-agent
. - Nei cluster standard senza un DaemonSet
ip-masq-agent
, se hai impostato il flag--disable-default-snat
. - Nei cluster Autopilot, se modifica l'oggetto
EgressNATPolicy
in modo che
spec.action
siaNoSNAT
espec.destinations
contengaCidr: 0.0.0.0/0
.
Le origini IPv4 dei pod sono indirizzi IPv4 interni, il che significa che non sono instradabili su internet. Di conseguenza, quando conservi gli indirizzi IPv4 dei pod di origine per i pacchetti inviati a internet, devi utilizzare una tecnica come una delle seguenti per instradare i pacchetti dopo che lasciano i nodi del cluster:
- Assicurati che la rete VPC abbia una route predefinita con il gateway internet predefinito come hop successivo e configura un gateway Cloud NAT per fornire servizi NAT pubblici ad almeno gli intervalli di indirizzi IPv4 secondari della subnet utilizzati dai pod nel cluster. Per maggiori dettagli, consulta la sezione Interazione di GKE nella panoramica di Cloud NAT.
- Configura la rete VPC in modo che utilizzi una route predefinita personalizzata il cui hop successivo sia un'istanza VM o un bilanciatore del carico di rete passthrough interno, in cui la VM o i backend del bilanciatore del carico sono stati configurati per instradare i pacchetti a internet per conto dei pod.
Ripristino del comportamento SNAT predefinito
Per ripristinare il comportamento SNAT predefinito quando un ip-masq-agent
DaemonSet è presente in un cluster, elimina il ip-masq-agent
ConfigMap associato. Il DaemonSet
ip-masq-agent
ripristina il comportamento predefinito di IP masquerading sui
nodi che gestisce.
Per ripristinare il comportamento SNAT predefinito quando un DaemonSet ip-masq-agent
non è presente in un cluster, devi eseguire l'upgrade del node pool (assicurati che --disable-default-snat
non sia impostato sul cluster).
Effetto del criterio NAT in uscita nei cluster Autopilot
La policy NAT in uscita di GKE consente di configurare il mascheramento IP sui cluster Autopilot. Puoi utilizzare la definizione di risorsa personalizzata (CRD) della policy NAT in uscita di GKE per modificare gli indirizzi IP di origine dei pacchetti inviati dai pod.
Per motivi di sicurezza o esaurimento degli indirizzi IP, puoi mascherare gli indirizzi IP dal pod all'intervallo di indirizzi IP del nodo per il traffico in uscita verso le reti on-premise. Ad esempio, puoi utilizzare un intervallo non RFC-1918 per i cluster Autopilot e un intervallo RFC-1918 per i nodi. Tuttavia, se i pod devono comunicare con reti on-premise che utilizzano anche un intervallo non RFC 1918, gli indirizzi IP possono sovrapporsi. Per evitare la perdita di traffico, puoi configurare una policy NAT in uscita in modo da non pubblicizzare gli intervalli non RFC-1918 dei pod nelle reti on-premise. Il criterio NAT in uscita maschera l'intervallo non RFC-1918 dei pod per utilizzare in alternativa l'intervallo RFC-1918 del nodo. Assicurati che un intervallo di nodi non si sovrapponga a nessun intervallo on-premise, altrimenti potrebbe causare un loop di traffico.
GKE applica il comportamento di mascheramento IP per i cluster Autopilot tramite il seguente processo:
- GKE esegue il deployment del controller NAT in uscita e di
ip-masq-agent
. - Crea il criterio NAT in uscita.
- Il controller GKE traduce il criterio nel ConfigMap
ip-masq-agent
. - Il DaemonSet
ip-masq-agent
legge ConfigMap e poi GKE applica il comportamento di mascheramento IP.
Policy generate automaticamente
GKE supporta i seguenti due criteri NAT in uscita generati automaticamente:
- Predefinito: queste norme sono modificabili.
- Gestite da GKE: queste policy sono fisse e non sono modificabili.
Policy predefinita
GKE predefinisce un insieme di intervalli di indirizzi IP predefiniti. Quando i pacchetti vengono inviati a queste destinazioni, il cluster non maschera le origini degli indirizzi IP e conserva gli indirizzi IP dei pod di origine. Per modificare questi intervalli di indirizzi IP predefiniti, consulta Modificare e implementare il criterio NAT in uscita.
Il seguente manifest descrive una policy NAT in uscita predefinita:
Name: default
Namespace:
Labels: <none>
Annotations: <none>
API Version: networking.gke.io/v1
Kind: EgressNATPolicy
Metadata:
Creation Timestamp: 2022-03-16T21:05:45Z
Generation: 2
Managed Fields:
API Version: networking.gke.io/v1
Fields Type: FieldsV1
fieldsV1:
f:spec:
.:
f:action:
f:status:
Manager: egress-nat-controller
Operation: Update
Time: 2022-03-16T21:05:45Z
API Version: networking.gke.io/v1
Fields Type: FieldsV1
fieldsV1:
f:spec:
f:destinations:
Manager: kubectl
Operation: Update
Time: 2022-03-17T01:58:13Z
Resource Version: 189346
UID: 06acbb5a-23ba-4c2a-bb34-9b6ed8c4a87f
Spec:
Action: NoSNAT
Destinations:
Cidr: 10.0.0.0/8
Cidr: 172.16.0.0/12
Cidr: 192.168.0.0/16
Cidr: 240.0.0.0/4
Cidr: 192.0.2.0/24
Cidr: 198.51.100.0/24
Cidr: 203.0.113.0/24
Cidr: 100.64.0.0/10
Cidr: 198.18.0.0/15
Cidr: 192.0.0.0/24
Cidr: 192.88.99.0/24
Status:
Events: <none>
Gli intervalli CIDR sono gli stessi degli intervalli di destinazione non masquerade predefiniti.
Gestito dai criteri GKE
Il criterio NAT in uscita GKE riserva un intervallo statico di indirizzi IP necessari per preservare il funzionamento del cluster. Questo intervallo statico contiene gli intervalli di indirizzi IP di pod, servizi e nodi del cluster e potrebbe sovrapporsi al criterio predefinito.
Puoi identificare questo criterio tramite un hash dinamico di 8 byte (gke-{CLUSTER_SHORT_HASH}
) assegnato da GKE. Non puoi modificare
queste norme.
Il seguente manifest descrive una policy gestita da GKE denominata gke-bbfa6c0e-1
:
Name: gke-bbfa6c0e-1
Namespace:
Labels: <none>
Annotations: <none>
API Version: networking.gke.io/v1
Kind: EgressNATPolicy
Metadata:
Creation Timestamp: 2022-03-16T21:05:46Z
Generation: 1
Managed Fields:
API Version: networking.gke.io/v1
Fields Type: FieldsV1
fieldsV1:
f:spec:
.:
f:action:
f:destinations:
f:status:
Manager: egress-nat-controller
Operation: Update
Time: 2022-03-16T21:05:46Z
Resource Version: 11699
UID: 0201b5de-a6f6-4926-822b-31ed7cdee2c6
Spec:
Action: NoSNAT
Destinations:
Cidr: 10.119.128.0/17
Cidr: 10.120.0.0/22
Cidr: 10.128.0.0/20
Status:
Events: <none>
Passaggi successivi
- Scopri come utilizzare il criterio NAT in uscita per configurare il mascheramento IP nei cluster Autopilot.
- Scopri come configurare un agente di mascheramento IP nei cluster standard.
- Leggi la panoramica della rete GKE.
- Scopri di più sulla configurazione delle reti autorizzate.