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

Prerequisiti
Prima di configurare un gateway, devi ottenere le autorizzazioni Identity and Access Management (IAM) appropriate, assicurarti che il tuo progetto disponga di un criterio di rete appropriato e abilitare l'uscita.
Per informazioni dettagliate, consulta Prima di iniziare a utilizzare Cloud NAT.
Il gateway Cloud NAT utilizza le subnet esterne leaf come input. Per ulteriori informazioni sulla configurazione delle subnet esterne per Cloud NAT, vedi Crea subnet esterne per Cloud NAT.
Assicurati una configurazione di pod o VM compatibile
Come indicato nella panoramica di NAT, Cloud NAT non è compatibile
con la configurazione di uscita predefinita del progetto. Assicurati che nessun pod o VM
che vuoi utilizzare con Cloud NAT 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 l'uscita
del traffico utilizzando la configurazione di uscita predefinita del progetto. In altre parole, aggiunge
automaticamente l'etichetta egress.networking.gke.io/enabled:"true" alla
VM. Se la VM è configurata per il traffico in uscita utilizzando anche un gateway Cloud NAT, si verifica una collisione tra le configurazioni NAT. Per evitare questo
conflitto: per ogni VMEA associato a una VM configurata per il traffico in uscita
tramite un gateway Cloud NAT, assicurati che il VMEA associato
a quella VM abbia l'annotazione egress.networking.gke.io/use-cloud-nat:"true".
La VM associata invierà quindi il traffico in uscita esclusivamente tramite il gateway Cloud NAT.
Crea i gateway Cloud NAT
L'esempio seguente definisce un gateway Cloud NAT con due subnet foglia 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 di 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 di 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 quattro 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 a nodi esterni, ecc.).EgressRoutesReady: questa condizione indica se le route per il traffico di uscita dagli endpoint di origine sono già state configurate.
Traffico di test
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 di uscita associati al gateway.