Nei cluster Google Kubernetes Engine (GKE) nativi di VPC, i nodi senza indirizzi IP esterni migliorano la sicurezza. Questi nodi utilizzano Cloud NAT per le connessioni a internet in uscita. La perdita di pacchetti può verificarsi se una VM nodo esaurisce le porte e gli indirizzi IP Cloud NAT allocati, spesso in condizioni di carico in uscita elevato, interrompendo il traffico in uscita.
Utilizza questo documento per scoprire come registrare e monitorare i pacchetti eliminati, esaminare la configurazione di Cloud NAT e implementare misure per ridurre la perdita di pacchetti futura.
Queste informazioni sono importanti per gli amministratori e gli operatori della piattaforma e per gli amministratori di rete che gestiscono cluster GKE con nodi senza accesso a internet e si affidano a Cloud NAT per la connettività esterna. Per maggiori informazioni sui ruoli comuni e sulle attività di esempio a cui facciamo riferimento nei contenuti diGoogle Cloud , consulta Ruoli e attività comuni degli utenti GKE.
Diagnosticare la perdita di pacchetti
Le sezioni seguenti spiegano come registrare i pacchetti eliminati utilizzando Cloud Logging e come diagnosticare la causa dell'eliminazione dei pacchetti utilizzando Cloud Monitoring.
Registra i pacchetti eliminati
Puoi registrare i pacchetti eliminati 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 eliminati da un gateway Cloud NAT, ma non identifica la causa.
Monitorare le cause della perdita di pacchetti
Per identificare le cause dei pacchetti eliminati, esegui una query nell'osservatore delle metriche in Cloud Monitoring. I pacchetti vengono eliminati per uno dei tre motivi seguenti:
OUT_OF_RESOURCESENDPOINT_INDEPENDENT_CONFLICTNAT_ALLOCATION_FAILED
Per identificare i pacchetti eliminati a causa dei 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 eliminati per questi motivi, consulta Pacchetti eliminati con il motivo: esaurimento delle risorse e Pacchetti eliminati con il motivo: conflitto di indipendenza degli endpoint per suggerimenti per la risoluzione dei problemi.
Per identificare i pacchetti eliminati 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 eliminati per questo motivo, consulta la sezione È necessario allocare più indirizzi IP.
Esamina la configurazione di Cloud NAT
Se le query precedenti restituiscono risultati vuoti e i pod GKE non riescono a 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 principali della subnet. |
Quando Cloud NAT è configurato solo per l'intervallo di indirizzi IP primario della subnet, i pacchetti inviati dal cluster agli 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 secondari 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 di Cloud NAT:
|
Ridurre la perdita di pacchetti
Dopo aver diagnosticato la causa della perdita di pacchetti, valuta la possibilità di utilizzare i seguenti consigli per ridurre la probabilità che il problema si ripresenti in futuro:
Configura il gateway Cloud NAT in modo che utilizzi l'allocazione dinamica delle porte e aumenta il numero massimo di porte per VM.
Se utilizzi l'allocazione statica delle porte, aumenta il numero minimo di porte per VM.
Riduci la velocità dei pacchetti in uscita della tua 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ò stabilire con quella destinazione utilizzando il numero di indirizzi di origine NAT e di tuple di porte di origine allocati.
Per informazioni dettagliate su come Cloud NAT utilizza gli indirizzi di origine NAT e le porte di origine per stabilire 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 di riutilizzo delle connessioni includono il pooling delle connessioni, il multiplexing delle connessioni utilizzando protocolli come HTTP/2 o la creazione di connessioni persistenti riutilizzate per più richieste. Per saperne di più, vedi Porte e connessioni.
Passaggi successivi
Se non riesci a trovare una soluzione al tuo problema nella documentazione, consulta la sezione Richiedere assistenza per ulteriore aiuto, inclusi consigli sui seguenti argomenti:
- Aprire una richiesta di assistenza contattando l'assistenza clienti cloud.
- Ricevere assistenza dalla community
ponendo domande su Stack Overflow e utilizzando il tag
google-kubernetes-engineper cercare problemi simili. Puoi anche unirti al canale Slack per ulteriore assistenza della community.#kubernetes-engine - Apertura di bug o richieste di funzionalità utilizzando lo strumento di monitoraggio dei problemi pubblico.