Questa pagina mostra come risolvere i problemi di perdita di pacchetti di Cloud NAT da un cluster Google Kubernetes Engine (GKE) nativo VPC con i nodi privati abilitati.
Le VM dei nodi nei cluster GKE nativi di VPC con nodi privati non hanno indirizzi IP esterni. Ciò significa che i client su internet non possono collegarsi agli indirizzi IP dei nodi. Puoi utilizzare Cloud NAT per allocare gli indirizzi IP esterni e le porte che consentono ai cluster con nodi privati di effettuare connessioni pubbliche.
Se una VM del nodo esaurisce l'allocazione delle porte e degli indirizzi IP esterni di Cloud NAT, i pacchetti vengono ignorati. Per evitare questo problema, puoi ridurre la frequenza di pacchetti in uscita o aumentare l'allocazione delle porte e degli indirizzi IP di origine Cloud NAT disponibili. Le seguenti sezioni descrivono come diagnosticare e risolvere i problemi di perdita di pacchetti da Cloud NAT nel contesto dei cluster GKE con nodi privati.
Diagnostica la perdita di pacchetti
Le sezioni seguenti spiegano come registrare i pacchetti persi utilizzando Cloud Logging e come diagnosticare la causa dei pacchetti persi utilizzando Cloud Monitoring.
Log dei pacchetti persi
Puoi registrare i pacchetti persi con la seguente query in Cloud Logging:
resource.type="nat_gateway" resource.labels.region=REGION resource.labels.gateway_name=GATEWAY_NAME jsonPayload.allocation_status="DROPPED"
Sostituisci quanto segue:
REGION
: il nome della regione in cui si trova il cluster.GATEWAY_NAME
: il nome del gateway Cloud NAT.
Questo comando restituisce un elenco di tutti i pacchetti ignorati da un gateway Cloud NAT, ma non ne identifica la causa.
Monitora le cause della perdita di pacchetti
Per identificare le cause dei pacchetti persi, esegui una query sull'osservatore delle metriche in Cloud Monitoring. I pacchetti vengono persi per uno dei seguenti tre motivi:
OUT_OF_RESOURCES
ENDPOINT_INDEPENDENT_CONFLICT
NAT_ALLOCATION_FAILED
Per identificare i pacchetti persi a causa di codici di errore OUT_OF_RESOURCES
o
ENDPOINT_ALLOCATION_FAILED
, utilizza la seguente query:
fetch nat_gateway metric 'router.googleapis.com/nat/dropped_sent_packets_count' filter (resource.gateway_name == GATEWAY_NAME) align rate(1m) every 1m group_by [metric.reason], [value_dropped_sent_packets_count_aggregate: aggregate(value.dropped_sent_packets_count)]
Se identifichi pacchetti che vengono ignorati per questi motivi, consulta Pacchetti ignorati con il motivo: risorse esaurite e Pacchetti ignorati con il motivo: conflitto di indipendenza degli endpoint per ricevere consigli per la risoluzione dei problemi.
Per identificare i pacchetti persi a causa del codice di errore NAT_ALLOCATION_FAILED
, utilizza
la seguente query:
fetch nat_gateway metric 'router.googleapis.com/nat/nat_allocation_failed' group_by 1m, [value_nat_allocation_failed_count_true: count_true(value.nat_allocation_failed)] every 1m
Se identifichi pacchetti persi per questo motivo, consulta È necessario allocare più indirizzi IP.
Esaminare la configurazione di Cloud NAT
Se le query precedenti restituiscono risultati vuoti e i pod GKE non sono in grado di comunicare con indirizzi IP esterni, utilizza la seguente tabella per risolvere i problemi di configurazione:
Configurazione | Risoluzione dei problemi |
Cloud NAT configurato per essere applicato solo all'intervallo di indirizzi IP primario della subnet. |
Quando Cloud NAT è configurato solo per l'intervallo di indirizzi IP primario della subnet, i pacchetti inviati dal cluster ad indirizzi IP esterni devono avere un indirizzo IP del nodo di origine. In questa configurazione di Cloud NAT:
|
Cloud NAT configurato per essere applicato solo all'intervallo di indirizzi IP secondario della subnet utilizzato per gli IP dei pod. |
Quando Cloud NAT è configurato solo per l'intervallo di indirizzi IP secondario della subnet utilizzato dagli IP dei pod del cluster, i pacchetti inviati dal cluster agli indirizzi IP esterni devono avere un indirizzo IP del pod di origine. In questa configurazione Cloud NAT:
|
Riduci la perdita di pacchetti
Dopo aver diagnosticato la causa della perdita di pacchetti, ti consigliamo di seguire i seguenti consigli per ridurre la probabilità che il problema si ripresenti in futuro:
Configura il gateway Cloud NAT in modo da utilizzare l'allocazione dinamica delle porte e aumentare il numero massimo di porte per VM.
Se utilizzi l'allocazione statica delle porte, aumenta il numero di porte minime per VM.
Riduci la velocità in uscita dei pacchetti dell'applicazione. Quando un'applicazione effettua più connessioni in uscita allo stesso indirizzo IP e alla stessa porta di destinazione, può consumare rapidamente tutte le connessioni che Cloud NAT può effettuare a quella destinazione utilizzando il numero di tuple di indirizzi di origine e porte di origine NAT allocati.
Per informazioni dettagliate su come Cloud NAT utilizza gli indirizzi di origine e le porte di origine NAT per effettuare connessioni, inclusi i limiti al numero di connessioni simultanee a una destinazione, consulta Porte e connessioni.
Per ridurre la frequenza delle connessioni in uscita dall'applicazione, riutilizza le connessioni aperte. I metodi comuni per il riutilizzo delle connessioni includono il pooling delle connessioni, il multiplexing delle connessioni utilizzando protocolli come HTTP/2 o l'instaurazione di connessioni permanenti riutilizzate per più richieste. Per ulteriori informazioni, consulta Porte e connessioni.
Passaggi successivi
Se hai bisogno di ulteriore assistenza, contatta l'assistenza clienti Google Cloud.