Agente di mascheramento IP


Questa pagina spiega come funziona il mascheramento IP in Google Kubernetes Engine (GKE) e fornisce opzioni di configurazione per diversi scenari.

Panoramica del mascheramento degli indirizzi IP

L'IP masquerading è una forma di Network Address Translation dell'origine (SNAT) che esegue traduzioni molti-a-uno degli indirizzi IP. GKE può utilizzare indirizzi IP il mascheramento 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 utente dell'agente di mascheramento IP.

Mascheramento degli IP GKE

Quando il mascheramento degli IP si applica a un pacchetto emesso da un pod, GKE cambia l'indirizzo IP di origine del pacchetto dall'indirizzo IP del pod a quello sottostante all'indirizzo IP del nodo. La mascheratura dell'indirizzo IP di origine di un pacchetto è utile quando il destinatario è configurato per ricevere pacchetti solo dall'IP del nodo del cluster indirizzi IP esterni.

Sui nodi Linux, GKE configura le regole iptables. GKE utilizza il ip-masq-agent DaemonSet per configurare il dataplane appropriato.

Il mascheramento IP non è supportato con i pool di nodi Windows Server.

Mascheramento degli IP per i cluster standard

Nei cluster Standard, il comportamento di mascheramento degli IP del cluster è regolato in base a tre fattori:

La tabella seguente riassume le configurazioni di mascheramento IP per Cluster GKE standard:

Configurazione cluster Comportamento SNAT risultante

Il DaemonSet ip-masq-agent è presente nel cluster e esiste un elenco nonMasqueradeCIDRs personalizzato nel ConfigMap ip-masq-agent.

GKE conserva gli indirizzi IP dei pod di origine per i pacchetti inviati alle destinazioni specificate nell'elenco nonMasqueradeCIDRs.

GKE cambia gli indirizzi IP dei pod di origine in IP del nodo di origine indirizzi per i pacchetti inviati a destinazioni non specificate nel Elenco nonMasqueradeCIDRs.

Il DaemonSet ip-masq-agent è presente nel cluster, ma un elenco nonMasqueradeCIDRs personalizzato non esiste nel ConfigMap ip-masq-agent o il ConfigMap ip-masq-agent non è presente.

GKE conserva gli indirizzi IP dei pod di origine di pacchetti inviati a una serie di destinazioni non mascherate.

GKE modifica gli indirizzi IP dei pod di origine in indirizzi IP di origine degli indirizzi IP dei nodi per i pacchetti inviati a destinazioni all'esterno di le destinazioni predefinite, senza accesso mascherato.

Il DaemonSet ip-masq-agent non è presente nel cluster e lo hai creato senza il cluster Flag --disable-default-snat.

GKE conserva gli indirizzi IP dei pod di origine di pacchetti inviati a una serie di destinazioni non mascherate.

GKE modifica gli indirizzi IP dei pod di origine in indirizzi IP dei nodi di origine per i pacchetti inviati a destinazioni esterne alle destinazioni predefinite senza mascheramento.

Il DaemonSet ip-masq-agent non è presente nel cluster e hai creato il cluster con il flag --disable-default-snat.

GKE conserva gli indirizzi IP dei pod di origine per i pacchetti inviati a tutte le destinazioni.

Rivedi Conservare l'indirizzo IPv4 del pod da fonti verso destinazioni internet per importanti considerazioni sul routing quando conservi gli indirizzi di origine IPv4 dei pod e devi instradare i pacchetti su internet.

Mascheramento degli IP per i cluster Autopilot

Nei cluster Autopilot, GKE esegue sempre il deployment ip-masq-agent DaemonSet. 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 tuo 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 versioni successive.
  • Il cluster deve essere stato creato con GKE Dataplane V2 attivata.

La tabella seguente riassume le configurazioni di mascheramento IP per Cluster GKE Autopilot:

Configurazione del cluster Autopilot Comportamento SNAT risultante

Il cluster include un oggetto EgressNATPolicy personalizzato spec.action contiene NoSNAT le destinazioni non mascherate specificate in spec.destinations[].

GKE conserva gli indirizzi IP dei pod di origine per i pacchetti inviati alle destinazioni specificate in spec.destinations[] del EgressNATPolicy. GKE esegue questa operazione traducendo spec.destinations[] in un nonMasqueradeCIDRs elenco in un ip-masq-agent configMap.

GKE cambia gli indirizzi IP dei pod di origine in IP del nodo di origine indirizzi per i pacchetti inviati a destinazioni non specificate spec.destinations[] di EgressNATPolicy.

Il cluster non include un EgressNATPolicy personalizzato.

Il valore predefinito EgressNATPolicy e gestiti da GKE criterio si applicano entrambi, con il seguente comportamento:

  • GKE conserva gli indirizzi IP dei pod di origine di pacchetti inviati a una serie di destinazioni non mascherate.
  • GKE modifica gli indirizzi IP dei pod di origine in indirizzi IP dei nodi di origine per i pacchetti inviati a destinazioni esterne alle destinazioni predefinite senza mascheramento.

Esempi di configurazione

Espandi le sezioni seguenti per visualizzare il mascheramento e la configurazione degli IP di cluster in base al tipo di cluster.

Guida di riferimento alla configurazione avanzata

Quando viene eseguito automaticamente il deployment di ip-masq-agent

Nei cluster in modalità Autopilot, GKE esegue sempre il deployment di un ip-masq-agent DaemonSet.

Nei cluster Standard, GKE esegue il deployment di una classe ip-masq-agent DaemonSet 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 ulteriori informazioni, vedi come configurare un agente di mascheramento IP.

Quando in un cluster è presente un ip-masq-agent DaemonSet, GKE aggiorna e riconcilia un pod di servizio su ogni 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 predefinite non mascherate sono applicabili ai cluster con le seguenti configurazioni:

Le destinazioni predefinite non mascherate non sono applicabili ai cluster con le seguenti configurazioni:

Effetto del flag --disable-default-snat

La --disable-default-snat modifica il comportamento SNAT di GKE predefinito in modo che l'origine Gli indirizzi IP dei pod vengono conservati per i pacchetti inviati a tutte le destinazioni. GKE implementa il comportamento SNAT predefinito non eseguendo il deployment di alcun DaemonSetip-masq-agent nel cluster.

Il flag --disable-default-snat non ha effetto quando un cluster include un'espressione ip-masq-agent DaemonSet:

  • Poiché i cluster Autopilot includono sempre un'entità ip-masq-agent DaemonSet, il flag --disable-default-snat non ha alcun effetto su Autopilot.

Puoi impostare il flag --disable-default-snat aggiornando un cluster dopo che è stato un'istanza di blocco note. A condizione che nel cluster non sia stato disegnato un ip-masq-agent DaemonSet, la disattivazione della SNAT predefinita viene applicata dopo che il cluster ha sostituito tutti i suoi nodi, a volte anche dopo diverse ore. Questo accade perché GKE rispetta le finestre di manutenzione configurate quando sostituisce i nodi nel cluster. Se non hai configurato alcuna finestra di manutenzione, devi eseguire manualmente il ciclo dei nodi nel cluster prima che il flag --disable-default-snat abbia effetto.

Accesso mascherato locale tramite link

L'intervallo 169.254.0.0/16 viene utilizzato per gli indirizzi IP locali rispetto al collegamento. Con masquerading link-local si intende la modifica di un indirizzo IP del 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 IP locali rispetto al collegamento in un cluster Standard effettuando entrambe le operazioni seguenti:

Diagnostica container e pod con hostNetwork: true

A meno che 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 corrispondente 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 relativi ai nodi utilizzando strumenti.

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 su di essi.

Preservare le origini degli indirizzi IPv4 dei pod per le 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 destinazioni, incluse quelle su internet:

  • Nei cluster standard con un DaemonSet ip-masq-agent, se hai impostato nonMasqueradeCIDRs su 0.0.0.0 nel ConfigMap ip-masq-agent.
  • Nei cluster Standard senza un DaemonSet ip-masq-agent, se hai imposta il flag --disable-default-snat.

Sia nei cluster pubblici che in quelli privati, le origini IPv4 dei pod sono indirizzi IPv4 interni di rete, vale a dire che non sono instradabili su internet. Di conseguenza, quando mantieni gli indirizzi IPv4 del pod di origine per i pacchetti inviati a internet, devi utilizzare una tecnica come una delle seguenti per instradare i pacchetti dopo che escono dai nodi del cluster:

  • Assicurati che la rete VPC abbia una route predefinita con il successivo hop del gateway internet predefinito 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 con GKE nella panoramica di Cloud NAT.
  • Configura la rete VPC in modo da utilizzare una route predefinita personalizzata il cui hop successivo è 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.

Ripristino del comportamento SNAT predefinito

Per ripristinare il comportamento SNAT predefinito quando un DaemonSet ip-masq-agent è presente in un cluster, elimina il ConfigMap ip-masq-agent associato. Il DaemonSet ip-masq-agent ripristina il comportamento predefinito dell'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 pool di nodi (assicurati che --disable-default-snat non sia impostato sul cluster).

Effetto del criterio NAT in uscita nei cluster Autopilot

Il criterio NAT in uscita di GKE ti consente di configurare il mascheramento IP sui cluster Autopilot. Puoi utilizzare la definizione della risorsa personalizzata (CRD) del criterio di traduzione NAT in uscita GKE per modificare gli indirizzi IP di origine dei pacchetti inviati dai pod.

Per motivi di sicurezza o per esaurimento degli indirizzi IP, puoi mascherare gli indirizzi IP dall'intervallo IP del pod a quello del nodo per il traffico in uscita verso le reti on-premise. Ad esempio, puoi utilizzare un intervallo diverso da 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 non RFC-1918, gli indirizzi IP possono sovrapporsi. Per evitare perdite di traffico, puoi configurare un criterio NAT in uscita per non pubblicizzare i pod che non richiedono la connessione RFC-1918 alle reti on-premise. La Il criterio NAT in uscita maschera i pod non RFC-1918 per utilizzare è invece l'intervallo RFC-1918 del nodo. Assicurati che l'intervallo di nodi non si sovrapponga con qualsiasi intervallo on-premise, oppure può causare un loop di traffico.

GKE applica il comportamento di masquerading IP per i cluster Autopilot tramite la seguente procedura:

  1. GKE esegue il deployment del controller Egress NAT e del ip-masq-agent.
  2. Crea il criterio NAT in uscita.
  3. Il controller GKE traduce il criterio nel ConfigMap ip-masq-agent.
  4. Il DaemonSet ip-masq-agent legge il ConfigMap e GKE applica il comportamento di masquerading dell'IP.

Criteri generati automaticamente

GKE supporta i seguenti due criteri NAT in uscita generati automaticamente:

  • Predefinita: 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 esegue il mascheramento dell'indirizzo IP e conserva gli indirizzi IP dei pod di origine. Per modificare questi indirizzi IP predefiniti, per gli intervalli di indirizzi, consulta Modifica ed esegui 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 gli stessi degli intervalli di destinazione non con mascheramento predefiniti.

Criterio Gestito da GKE

Il criterio NAT in uscita di GKE riserva un intervallo statico di indirizzi IP necessari di 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 questo criterio.

Il manifest seguente 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