Di cluster Google Kubernetes Engine (GKE) berbasis VPC, node tanpa alamat IP eksternal meningkatkan keamanan. Node ini menggunakan Cloud NAT untuk koneksi internet keluar. Kehilangan paket dapat terjadi jika VM Node kehabisan alokasi port dan alamat IP Cloud NAT, sering kali saat beban keluar tinggi, sehingga mengganggu traffic keluar.
Gunakan dokumen ini untuk mempelajari cara mencatat dan memantau paket yang tidak terkirim ke dalam log, menyelidiki konfigurasi Cloud NAT, dan menerapkan langkah-langkah untuk mengurangi kehilangan paket di masa mendatang.
Informasi ini penting bagi admin dan operator Platform serta administrator Jaringan yang mengelola cluster GKE dengan node tanpa akses internet dan mengandalkan Cloud NAT untuk konektivitas eksternal. Untuk mengetahui informasi selengkapnya tentang peran umum dan contoh tugas yang kami referensikan dalam Google Cloud konten, lihat Peran dan tugas pengguna GKE umum.
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 hilangnya paket
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_RESOURCESENDPOINT_INDEPENDENT_CONFLICTNAT_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 tidak terkirim dengan alasan: kehabisan resource dan Paket 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 di-drop 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 Anda mendiagnosis penyebab kehilangan paket, pertimbangkan untuk menggunakan rekomendasi berikut guna mengurangi kemungkinan masalah tersebut berulang di masa mendatang:
Konfigurasi 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 berikutnya
Jika Anda tidak dapat menemukan solusi untuk masalah Anda dalam dokumentasi, lihat Mendapatkan dukungan untuk mendapatkan bantuan lebih lanjut, termasuk saran tentang topik berikut:
- Membuka kasus dukungan dengan menghubungi Layanan Pelanggan Cloud.
- Mendapatkan dukungan dari komunitas dengan mengajukan pertanyaan di StackOverflow dan menggunakan tag
google-kubernetes-engineuntuk menelusuri masalah serupa. Anda juga dapat bergabung ke#kubernetes-enginechannel Slack untuk mendapatkan dukungan komunitas lainnya. - Membuka bug atau permintaan fitur menggunakan issue tracker publik.