Panoramica
In questo caso d'uso creeremo un gateway Cloud NAT con più IP in uscita assegnati. Questi gateway invieranno il traffico in uscita dai pod e dalle VM che corrispondono alle etichette di corrispondenza configurate nel gateway. Il gateway assegnerà automaticamente un IP in uscita a ogni endpoint in grado di inviare il traffico in uscita tramite il gateway.

Prerequisiti
Prima di configurare un gateway, devi ottenere le autorizzazioni IAM (Identity and Access Management) appropriate, assicurarti che il tuo progetto disponga di una policy di rete appropriata e abilitare il traffico in uscita.
Per maggiori dettagli, consulta Prima di iniziare a utilizzare Cloud NAT.
Il gateway Cloud NAT utilizza le subnet leaf esterne come input. Per ulteriori
informazioni sulla configurazione delle subnet esterne per Cloud NAT, consulta
Creare subnet esterne per Cloud NAT.
Assicurarsi di una configurazione di pod o VM compatibile
Come indicato nella panoramica di NAT, Cloud NAT non è compatibile
con la configurazione del traffico in uscita predefinita del progetto. Assicurati che nessun pod o VM che vuoi utilizzare con Cloud NAT NON abbia l'etichetta egress.networking.gke.io/enabled:true.
Per impostazione predefinita, una configurazione di accesso esterno alla macchina virtuale (VMEA) configura una VM per il traffico in uscita utilizzando la configurazione del traffico in uscita predefinita del progetto. In altre parole, aggiunge automaticamente l'etichetta egress.networking.gke.io/enabled:"true" alla VM. Se la VM è configurata anche per il traffico in uscita utilizzando un gateway Cloud NAT, si verifica una collisione tra le configurazioni NAT. Per evitare questa
collisione, per ogni VMEA associata a una VM configurata per il traffico in uscita
tramite un gateway Cloud NAT, assicurati che la VMEA associata
a quella VM abbia l'annotazione egress.networking.gke.io/use-cloud-nat:"true".
La VM associata invierà il traffico in uscita esclusivamente tramite il gateway Cloud NAT.
Creare i gateway Cloud NAT
L'esempio seguente definisce un gateway Cloud NAT con due subnet leaf esterne (subnet-1 e subnet-2). Il gateway utilizzerà tutti gli IP in queste subnet, uno da subnet-1 e quattro da subnet-2, e li assegnerà automaticamente agli endpoint di ogni VM o pod con le etichette specificate. A più pod o VM può essere assegnato lo stesso IP in uscita.
apiVersion: networking.gdc.goog/v1
kind: CloudNATGateway
metadata:
namespace: project-1
name: gateway-1
spec:
workloadSelector: # Immutable
labelSelector:
workloads:
matchLabels:
app: aa
subnetRefs: # Mutable
- subnet-1
- subnet-2
Controllare lo stato dei gateway
Controlla lo stato dei gateway eseguendo il seguente comando kubectl.
export MGMT_KUBECONFIG=<path_to_management_kubeconfig>
kubectl get cloudnatgateways gateway-1 -n project-1 --kubeconfig "${MGMT_KUBECONFIG:?}"
Se configurato correttamente, il campo della condizione di stato del gateway Cloud NAT deve mostrare la condizione del tipo Ready impostata su true e le subnet contrassegnate come OK, come mostrato nell'output di esempio seguente.
apiVersion: networking.gdc.goog/v1
kind: CloudNATGateway
metadata:
namespace: project-1
name: gateway-1
spec:
workloadSelector:
labelSelector:
workloads:
matchLabels:
app: aa
subnetRefs:
- subnet-1
- subnet-2
status:
conditions:
- lastTransitionTime: "2025-08-20T21:31:36Z"
message: ""
observedGeneration: 1
reason: Ready
status: "True"
type: Ready
- lastTransitionTime: "2025-08-20T21:31:36Z"
message: ""
observedGeneration: 1
reason: Ready
status: "True"
type: SubnetsReady
- lastTransitionTime: "2025-08-20T21:31:36Z"
message: ""
observedGeneration: 1
reason: Ready
status: "True"
type: PerimeterConfigurationReady
- lastTransitionTime: "2025-08-20T21:31:36Z"
message: ""
observedGeneration: 1
reason: Ready
status: "True"
type: EgressRoutesReady
subnets:
- name: subnet-1
status: OK
- name: subnet-2
status: OK
Lo stato del gateway Cloud NAT contiene 4 condizioni dei seguenti tipi:
Ready: questa condizione riassume lo stato del gateway Cloud NAT. Questa condizione è impostata su true se il gateway è completamente configurato.SubnetsReady: questa condizione indica se le subnet assegnate al gateway sono valide.PerimeterConfigurationReady: questa condizione indica se la configurazione del perimetro è già stata configurata (ad es.IP esterni assegnati ai nodi esterni, ecc.).EgressRoutesReady: questa condizione indica se le route per il traffico in uscita dagli endpoint di origine sono già state configurate.
Testare il traffico
Possiamo testare il traffico eseguendo un comando curl da uno dei pod o delle VM assegnati al gateway verso un endpoint esterno. L'endpoint di ricezione dovrebbe visualizzare uno degli IP in uscita associati al gateway.