Di cluster Google Kubernetes Engine (GKE) native VPC, node tanpa alamat IP eksternal meningkatkan keamanan. Node ini menggunakan Cloud NAT untuk koneksi internet keluar. Paket hilang dapat terjadi jika VM Node menghabiskan port dan alamat IP Cloud NAT yang dialokasikan, sering kali di bawah beban keluar yang tinggi, sehingga mengganggu traffic keluar.
Gunakan dokumen ini untuk mempelajari cara mencatat dan memantau paket yang tidak terkirim, menyelidiki konfigurasi Cloud NAT, dan menerapkan langkah-langkah untuk mengurangi paket hilang 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 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_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 mengetahui 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 tidak terkirim 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 paket hilang
Setelah mendiagnosis penyebab paket hilang, pertimbangkan untuk menggunakan rekomendasi berikut guna mengurangi kemungkinan masalah ini terjadi lagi 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, silakan membaca artikel Port dan koneksi.
Untuk mengurangi frekuensi koneksi keluar dari aplikasi, gunakan kembali koneksi yang terbuka. Metode umum untuk menggunakan kembali koneksi mencakup koneksi penggabungan, koneksi multiplexing menggunakan protokol seperti HTTP/2, atau membuat koneksi persisten yang digunakan kembali untuk beberapa permintaan. Untuk mengetahui informasi selengkapnya, silakan melihat 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 Cloud Customer Care.
- Mendapatkan dukungan dari komunitas dengan
mengajukan pertanyaan di StackOverflow
dan menggunakan tag
google-kubernetes-engineuntuk menelusuri masalah serupa. Anda juga dapat bergabung ke saluran Slack untuk mendapatkan dukungan komunitas lainnya.#kubernetes-engine - Membuka masalah atau permintaan fitur dengan menggunakan issue tracker publik.