Risolvi i problemi per la perdita di pacchetti Cloud NAT da un cluster


Questa pagina mostra come risolvere i problemi di Cloud NAT perdita di pacchetti da un ambiente VPC-native Cluster privato Google Kubernetes Engine (GKE).

VM dei nodi nei cluster privati GKE nativi di VPC 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 privati di effettuare connessioni pubbliche.

Se una VM nodo esaurisce l'allocazione di porte e indirizzi IP esterni da Cloud NAT, i pacchetti verranno eliminati. Per evitare che ciò accada, puoi ridurre di pacchetti in uscita o aumentare l'allocazione Indirizzi IP e porte di origine Cloud NAT. Le seguenti sezioni descrivono come diagnosticare e risolvere i problemi di perdita di pacchetti da Cloud NAT nel contesto dei cluster privati GKE.

Diagnosi della 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.

Registrare i pacchetti persi

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 ne identifica la causa.

Monitorare 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 indipendente dall'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 l'applicazione solo all'IP principale della subnet di indirizzi IP esterni. 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 Cloud NAT:
  • I pod possono inviare pacchetti agli indirizzi IP esterni se questi IP le destinazioni degli indirizzi sono soggette alle Accesso mascherato degli IP. Quando esegui il deployment di ip-masq-agent, verifica che l'elenco nonMasqueradeCIDRs non contenga l'indirizzo IP e la porta di destinazione. I pacchetti inviati a queste destinazioni vengono prima convertiti in indirizzi IP dei nodi di origine prima di essere elaborati da Cloud NAT.
  • consentire ai pod di connettersi a tutti gli indirizzi IP esterni configurazione di Cloud NAT, assicurati che È stato eseguito il deployment di ip-masq-agent e che L'elenco nonMasqueradeCIDRs contiene solo l'IP del nodo e del pod di indirizzi IP esterni del cluster. Pacchetti inviati a destinazioni diverse da i cluster vengono convertiti in indirizzi IP dei nodi di origine prima di essere elaborati da Cloud NAT.
  • Per impedire ai pod di inviare pacchetti ad alcuni indirizzi IP esterni, devi bloccare esplicitamente questi indirizzi in modo che non vengano mascherati. Dopo il deployment di ip-masq-agent, aggiungi l'IP esterno indirizzi che vuoi bloccare nell'elenco nonMasqueradeCIDRs. I pacchetti inviati a queste destinazioni lasciano il nodo con l'originale Origini degli indirizzi IP del pod. Gli indirizzi IP dei pod provengono da un intervallo di indirizzi IP secondario della subnet del cluster. In questa configurazione, Cloud NAT non funzionerà su quell'intervallo secondario.
Cloud NAT configurato per l'applicazione solo all'IP secondario della subnet di indirizzi 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. Nella configurazione Cloud NAT:

  • L'utilizzo di un Agente di mascheramento IP fa sì che i pacchetti perdano l'indirizzo IP del pod di origine quando vengono elaborati Cloud NAT. Per mantenere l'indirizzo IP del pod di origine, specifica di indirizzi IP di destinazione in un nonMasqueradeCIDRs dall'elenco di lettura. Una volta eseguito il deployment di ip-masq-agent, tutti i pacchetti inviati le destinazioni nell'elenco nonMasqueradeCIDRs mantengono la loro origine Indirizzi IP dei pod prima di essere elaborati da Cloud NAT.
  • Per consentire ai pod di connettersi a tutti gli indirizzi IP esterni con questa configurazione Cloud NAT, assicurati che ip-masq-agent sia disegnato e che l'elenco nonMasqueradeCIDRs sia il più grande possibile (0.0.0.0/0 specifica tutte le destinazioni degli indirizzi IP). I pacchetti inviati a tutte le destinazioni mantengono gli indirizzi IP dei pod di origine prima di essere elaborati da 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 allocazione statica delle porte, Aumentare il numero minimo di porte per VM.

  • Riduci la frequenza di 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ò 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 di connessioni in uscita dall'applicazione, riutilizza le connessioni aperte e connessioni a Internet. I metodi comuni di riutilizzo delle connessioni includono la connessione il pooling e la multiplexing delle connessioni utilizzando protocolli come HTTP/2 o che stabilisce e 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.