Questa pagina spiega come funziona l'autenticazione IP in Google Kubernetes Engine (GKE) e fornisce opzioni di configurazione per diversi scenari.
Panoramica del mascheramento degli indirizzi IP
Il masquerading IP è una forma di Network Address Translation (SNAT) di origine che esegue traduzioni di indirizzi IP many-to-one. GKE può utilizzare la mascheratura degli indirizzi IP per modificare gli indirizzi IP di origine dei pacchetti inviati dai pod.
Per una panoramica più generale del mascheramento IP in qualsiasi implementazione di Kubernetes, consulta la guida dell'utente dell'agente di mascheramento IP.
Mascheramento degli indirizzi IP di GKE
Quando il mascheramento IP si applica 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. Mascherare l'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 il ip-masq-agent
DaemonSet
per configurare il piano dati appropriato.
Il mascheramento degli indirizzi IP non è supportato con i pool di nodi di Windows Server.
Mascheramento degli indirizzi IP per i cluster standard
Nei cluster Standard, il comportamento di mascheramento degli IP del cluster è regolato da tre fattori:
- Se hai eseguito il deployment o se GKE ne ha eseguito automaticamente il deployment del
ip-masq-agent
DaemonSet nel cluster. Per conoscere gli scenari in cui GKE esegue automaticamente il deployment del DaemonSetip-masq-agent
, consulta Quando viene eseguito il deployment automatico diip-masq-agent
. - Se hai creato un elenco
nonMasqueradeCIDRs
personalizzato inip-masq-agent
configMap. - Nei casi in cui non viene eseguito il deployment di alcun DaemonSet
ip-masq-agent
nel cluster, a prescindere dal fatto che tu abbia creato il cluster con il flag--disable-default-snat
. Per scoprire di più sul flag, consulta Effetto del flag--disable-default-snat
.
La seguente tabella riassume le configurazioni di mascheramento IP per i cluster GKE standard:
Configurazione del 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 set di destinazioni non mascherate 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 set di destinazioni non mascherate 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 la sezione Conservazione delle origini di indirizzi IPv4 dei pod alle destinazioni internet per importanti considerazioni sul routing quando si conservano gli indirizzi di origine IPv4 dei pod e occorre instradare i pacchetti a internet. |
Mascheramento degli indirizzi IP 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 dell'IP utilizzando un EgressNATPolicy
. Per utilizzare EgressNATPolicy
, il cluster Autopilot deve soddisfare entrambi i seguenti requisiti:
- Il cluster deve utilizzare GKE versione 1.23.4-gke.1600 o successiva oppure 1.22.7-gke.1500 o successiva.
- Il cluster deve essere stato creato con GKE Dataplane V2 abilitato.
La seguente tabella riassume le configurazioni di mascheramento IP per i cluster GKE Autopilot:
Configurazione del cluster Autopilot | Comportamento SNAT risultante |
---|---|
Il cluster include un elemento |
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 |
Si applicano entrambi il valore predefinito
|
Esempi di configurazione
Espandi le sezioni seguenti per vedere esempi di mascheramento e configurazione degli IP in base al tipo di cluster.
Riferimento per la configurazione avanzata
Quando il deployment di ip-masq-agent
viene eseguito 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
Come configurare un agente di mascheramento IP.
Quando un DaemonSet ip-masq-agent
è presente in un cluster, GKE aggiorna e riconcilia un pod di pubblicazione su ciascun nodo del cluster.
Destinazioni non mascherate predefinite
Le destinazioni predefinite non mascherate 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 cluster ha un
ip-masq-agent
DaemonSet, ma nessun elencononMasqueradeCIDRs
specificato nel suo ConfigMapip-masq-agent
. Questo include il caso in cui il cluster ha un DaemonSetip-masq-agent
, ma non un ConfigMapip-masq-agent
.Il cluster non ha un
ip-masq-agent
DaemonSet, e il--disable-default-snat
flag non è impostato.
Le destinazioni non mascherate predefinite non sono applicabili ai cluster con le seguenti configurazioni:
Il cluster ha un DaemonSet
ip-masq-agent
e hai un elencononMasqueradeCIDRs
personalizzato specificato nell'oggetto ConfigMapip-masq-agent
. Un elencononMasqueradeCIDRs
personalizzato sostituisce sempre le destinazioni non mascherate 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 segnalazione --disable-default-snat
Il flag --disable-default-snat
modifica il comportamento SNAT predefinito di GKE 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 se 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 DaemonSet
ip-masq-agent
o se GKE esegue automaticamente il deployment di un DaemonSetip-masq-agent
, il flag--disable-default-snat
non ha alcun significato per il cluster, anche se è impostato--disable-default-snat
. Quando un DaemonSetip-masq-agent
è presente nel cluster, le destinazioni non mascherate vengono specificate esplicitamente in un elencononMasqueradeCIDRs
del ConfigMapip-masq-agent
o dalle destinazioni non mascherate predefinite quando non è definito alcun elencononMasqueradeCIDRs
.
Puoi impostare il flag --disable-default-snat
aggiornando un cluster dopo averlo creato. Se nel cluster non è stato eseguito il deployment del DaemonSet ip-masq-agent
, la disattivazione della SNAT predefinita ha effetto dopo che il cluster ha sostituito tutti i suoi nodi, a volte ore dopo. Il motivo è che GKE rispetta le finestre di manutenzione configurate quando sostituisce i nodi nel cluster. Se non hai configurato alcuna finestra di manutenzione, devi far scorrere manualmente i nodi nel cluster prima che il flag --disable-default-snat
abbia effetto.
Mascheramento locale rispetto al collegamento
L'intervallo 169.254.0.0/16
viene utilizzato per gli indirizzi IP locali rispetto al collegamento. La mascheratura locale tramite link si riferisce alla modifica di un indirizzo IP di un pod di origine in un indirizzo IP del 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 degli indirizzi IP locali rispetto al collegamento in un cluster Standard effettuando entrambe le seguenti operazioni:
- Assicurati che il parametro
masqLinkLocal
esista e sia impostato suTrue
inip-masq-agent
configMap. Se il parametromasqLinkLocal
non è presente nel file configMap diip-masq-agent
, il valore predefinito èFalse
. Per le istruzioni, consulta gli articoli Controllo diip-masq-agent
ConfigMap, Creazione di un ConfigMap diip-masq-agent
e Modifica di un ConfigMap esistente diip-masq-agent
ConfigMap. - Assicurati che nel cluster sia stato eseguito il deployment del DaemonSet
ip-masq-agent
. Per le linee guida, consulta Controllare il DaemonSet diip-masq-agent
e Eseguire il deployment di DaemonSet diip-masq-agent
.
Container e pod diagnostici 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 diagnostici inviano i 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 gli strumenti.
I cluster Autopilot non supportano i pod in esecuzione con spec.hostNetwork: true
. Poiché i nodi di un cluster Autopilot non sono accessibili mediante SSH, non puoi eseguire container di diagnostica su questi nodi.
Conservazione delle origini degli indirizzi IPv4 dei pod nelle destinazioni internet
Se la configurazione di mascheramento IP del cluster è una delle seguenti, GKE conserva le origini degli indirizzi IP dei pod per i pacchetti inviati a tutte le destinazioni, comprese le destinazioni internet:
- Nei cluster Standard con un DaemonSet
ip-masq-agent
, se hai impostatononMasqueradeCIDRs
su0.0.0.0
nel ConfigMapip-masq-agent
. - Nei cluster standard senza un DaemonSet
ip-masq-agent
, se hai impostato il flag--disable-default-snat
.
- Nei cluster Autopilot, se modifichi il valore predefinito in uscitaNATPolicy, in modo che
spec.action
siaNoSNAT
espec.destinations
contengaCidr: 0.0.0.0/0
.
Nei cluster pubblici e privati, 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 tua rete VPC abbia una route predefinita con l'hop successivo del gateway internet predefinito e configura un gateway Cloud NAT per fornire servizi NAT pubblici almeno agli intervalli di indirizzi IPv4 secondari della subnet utilizzati dai pod nel cluster. Per ulteriori dettagli, consulta Interazione di GKE nella panoramica di Cloud NAT.
- Configura la tua rete VPC in modo da utilizzare 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 su internet per conto dei pod.
Effetto del criterio NAT in uscita nei cluster Autopilot
Il criterio NAT in uscita di GKE consente di configurare il mascheramento degli indirizzi IP sui cluster Autopilot. Puoi utilizzare la definizione di risorse personalizzate (CRD) del criterio NAT in uscita di GKE per modificare gli indirizzi IP di origine dei pacchetti inviati dai pod.
Per motivi di sicurezza o di 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 perdite di traffico, puoi configurare un criterio NAT in uscita per non pubblicizzare gli intervalli non RFC-1918 dei pod alle reti on-premise. Il criterio NAT in uscita maschera l'intervallo non RFC-1918 dei pod per utilizzare invece l'intervallo RFC-1918 del nodo. Assicurati che un intervallo di nodi non si sovrapponga a nessun intervallo on-premise o possa causare un loop di traffico.
GKE applica il comportamento di mascheramento degli indirizzi IP per i cluster Autopilot tramite il seguente processo:
- GKE esegue il deployment del controller NAT in uscita e di
ip-masq-agent
. - Sei tu a creare il criterio NAT in uscita.
- Il controller GKE traduce il criterio nel ConfigMap
ip-masq-agent
. - Il DaemonSet
ip-masq-agent
legge il ConfigMap, quindi GKE applica il comportamento di mascheramento degli IP.
Criteri generati automaticamente
GKE supporta i seguenti due criteri NAT in uscita generati automaticamente:
- Predefinito: questi criteri sono modificabili.
- Gestiti da GKE: questi criteri sono fissi e non sono modificabili.
Criterio predefinito
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 ed eseguire il deployment del criterio NAT in uscita.
Il seguente manifest descrive un criterio NAT in uscita predefinito:
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 uguali agli intervalli di destinazione predefiniti non mascherati.
Gestito dal criterio di GKE
Il criterio NAT in uscita di 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, servizio e nodo del cluster e potrebbe sovrapporsi al criterio predefinito.
Puoi identificare questo criterio tramite un hash dinamico a 8 byte (gke-{CLUSTER_SHORT_HASH}
) assegnato da GKE. Non puoi modificare questo criterio.
Il seguente manifest descrive un criterio gestito da GKE denominato 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.
- Leggi la panoramica della rete GKE.
- Scopri di più sulla configurazione delle reti autorizzate.