Halaman ini menunjukkan cara menyelesaikan masalah terkait hilangnya paket Cloud NAT dari cluster Google Kubernetes Engine (GKE) native VPC dengan node pribadi yang diaktifkan.
VM node di cluster GKE native VPC dengan node pribadi tidak memiliki alamat IP eksternal. Artinya, klien di internet tidak dapat terhubung ke alamat IP node. Anda dapat menggunakan Cloud NAT untuk mengalokasikan alamat IP dan port eksternal yang memungkinkan cluster dengan node pribadi membuat koneksi publik.
Jika VM node kehabisan alokasi port eksternal dan alamat IP dari Cloud NAT, paket tidak akan terkirim. Untuk menghindari hal ini, Anda dapat mengurangi frekuensi paket keluar atau meningkatkan alokasi port dan alamat IP sumber Cloud NAT yang tersedia. Bagian berikut menjelaskan cara mendiagnosis dan memecahkan masalah kehilangan paket dari Cloud NAT dalam konteks cluster GKE dengan node pribadi.
Mendiagnosis paket hilang
Bagian berikut menjelaskan cara mencatat paket yang tidak terkirim ke dalam log menggunakan Cloud Logging, dan mendiagnosis penyebab paket hilang menggunakan Cloud Monitoring.
Mencatat paket yang tidak terkirim
Anda dapat mencatat paket yang tidak terkirim dengan kueri berikut di Cloud Logging:
resource.type="nat_gateway" resource.labels.region=REGION resource.labels.gateway_name=GATEWAY_NAME jsonPayload.allocation_status="DROPPED"
Ganti kode berikut:
REGION
: nama region tempat cluster berada.GATEWAY_NAME
: nama gateway Cloud NAT.
Perintah ini menampilkan daftar semua paket yang tidak dikirimkan oleh gateway Cloud NAT, tetapi tidak mengidentifikasi penyebabnya.
Memantau penyebab paket hilang
Untuk mengidentifikasi penyebab paket yang tidak terkirim, buat kueri Observer metrik di Cloud Monitoring. Paket tidak terkirim karena salah satu dari tiga alasan berikut:
OUT_OF_RESOURCES
ENDPOINT_INDEPENDENT_CONFLICT
NAT_ALLOCATION_FAILED
Untuk mengidentifikasi paket yang tidak terkirim karena kode error OUT_OF_RESOURCES
atau
ENDPOINT_ALLOCATION_FAILED
, gunakan kueri berikut:
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)]
Jika Anda mengidentifikasi paket yang tidak terkirim karena alasan ini, lihat Paket yang tidak terkirim dengan alasan: kehabisan resource dan Paket yang tidak terkirim dengan alasan: konflik independen endpoint untuk mendapatkan saran pemecahan masalah.
Untuk mengidentifikasi paket yang tidak terkirim karena kode error NAT_ALLOCATION_FAILED
, gunakan kueri berikut:
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
Jika Anda mengidentifikasi paket yang dihapus karena alasan ini, lihat Perlu mengalokasikan lebih banyak alamat IP.
Menyelidiki konfigurasi Cloud NAT
Jika kueri sebelumnya menampilkan hasil yang kosong, dan Pod GKE tidak dapat berkomunikasi dengan alamat IP eksternal, gunakan tabel berikut untuk membantu Anda memecahkan masalah konfigurasi:
Konfigurasi | Pemecahan masalah |
Cloud NAT dikonfigurasi untuk hanya diterapkan ke rentang alamat IP utama subnet. |
Jika Cloud NAT dikonfigurasi hanya untuk rentang alamat IP utama subnet, paket yang dikirim dari cluster ke alamat IP eksternal harus memiliki alamat IP node sumber. Dalam konfigurasi Cloud NAT ini:
|
Cloud NAT dikonfigurasi untuk hanya diterapkan ke rentang alamat IP sekunder subnet yang digunakan untuk IP Pod. |
Jika Cloud NAT dikonfigurasi hanya untuk rentang alamat IP sekunder subnet yang digunakan oleh IP Pod cluster, paket yang dikirim dari cluster ke alamat IP eksternal harus memiliki alamat IP Pod sumber. Dalam konfigurasi Cloud NAT ini:
|
Mengurangi kehilangan paket
Setelah mendiagnosis penyebab kehilangan paket, pertimbangkan untuk menggunakan rekomendasi berikut untuk mengurangi kemungkinan masalah tersebut terjadi lagi di masa mendatang:
Konfigurasikan gateway Cloud NAT untuk menggunakan alokasi port dinamis dan meningkatkan jumlah maksimum port per VM.
Jika Anda menggunakan alokasi port statis, tingkatkan jumlah port minimum per VM.
Kurangi frekuensi paket keluar aplikasi Anda. Saat membuat beberapa koneksi keluar ke port dan alamat IP dengan tujuan yang sama, aplikasi dapat dengan cepat memakai semua koneksi yang dapat dibuat Cloud NAT ke tujuan tersebut menggunakan jumlah alamat sumber NAT dan tupel port sumber yang dialokasikan.
Untuk mengetahui detail tentang cara Cloud NAT menggunakan alamat sumber NAT dan port sumber untuk membuat koneksi, termasuk batasan jumlah koneksi simultan ke tujuan, lihat Port dan koneksi.
Untuk mengurangi frekuensi koneksi keluar dari aplikasi, gunakan kembali koneksi terbuka. Metode umum untuk menggunakan kembali koneksi mencakup penggabungan koneksi, multiplexing koneksi menggunakan protokol seperti HTTP/2, atau membuat koneksi persisten yang digunakan kembali untuk beberapa permintaan. Untuk mengetahui informasi selengkapnya, lihat Port dan Koneksi.
Langkah selanjutnya
Jika Anda memerlukan bantuan tambahan, hubungi Cloud Customer Care.