Pengenalan kasus peningkatan stabilitas jaringan Cilium: hasil luar biasa dari perbaikan kode kecil
(gosuda.org)- Pengenalan kasus PR yang memberikan kontribusi besar terhadap stabilitas sistem lewat perbaikan kode kecil (hanya menambahkan satu pernyataan
if) - Dampak dan pentingnya PR "bpf:nat: Restore ORG NAT entry if it's not found"
Prinsip dasar NAT (Network Address Translation)
- NAT adalah teknologi yang memungkinkan banyak perangkat berbagi satu IP publik
- Memungkinkan komunikasi antara perangkat internal (Private IP:Port) dan internet eksternal
- Tabel NAT menyimpan informasi pemetaan antara alamat asli dan alamat yang diterjemahkan
- Proses:
- Perangkat internal mencoba terhubung ke server eksternal
- Perangkat NAT mengubah IP/port asal menjadi IP/port publik (SNAT)
- Respons dari server eksternal diterjemahkan kembali ke perangkat internal (DNAT)
Pemanfaatan NAT di Kubernetes
- Ada dua kasus utama penting penggunaan NAT di Kubernetes:
- Komunikasi dari Pod ke luar cluster: mengubah IP internal Pod menjadi IP publik node
- Komunikasi dari luar ke Pod melalui NodePort: merutekan permintaan eksternal ke Pod tertentu
Cara implementasi NAT di Cilium
- Umumnya di Linux, NAT ditangani dengan conntrack dan iptables
- Cilium menggunakan teknologi eBPF untuk melewati stack jaringan Linux tradisional
- Cilium mengelola langsung tabel NAT menggunakan LRU hash map (
BPF_MAP_TYPE_LRU_HASH)
Penyebab terjadinya masalah
- Masalah lookup: untuk memproses paket dua arah (keluar/masuk), data yang sama disimpan dua kali (RevSNAT)
- Keterbatasan LRU: karena sumber daya terbatas, entri yang jarang digunakan dapat dihapus
- **Putusnya koneksi # Kasus peningkatan besar stabilitas jaringan lewat perbaikan kode kecil di Cilium
Pengantar: dampak besar dari perubahan kode kecil
- Kasus ketika penambahan hanya satu blok
ifmemberikan kontribusi luar biasa terhadap stabilitas sistem - PR terkait: "bpf:nat: Restore ORG NAT entry if it's not found"
- Dijelaskan agar dapat dipahami bahkan oleh orang yang bukan spesialis di bidang jaringan
Prinsip dasar NAT (Network Address Translation)
- NAT adalah teknologi yang memungkinkan banyak perangkat berbagi satu IP publik
- Bekerja dengan memetakan kombinasi Private IP:Port internal ke Public IP:Port eksternal
- Alur kerja:
- Perangkat internal mencoba mengakses server eksternal
- Perangkat NAT mengubah komunikasi internal menjadi komunikasi eksternal (SNAT)
- Ketika respons kembali, komunikasi diterjemahkan lagi ke komunikasi internal semula (DNAT)
- Informasi translasi dicatat di tabel NAT
Pemanfaatan NAT di Kubernetes
- Kubernetes memiliki struktur jaringan yang kompleks dan NAT digunakan di berbagai tempat
- Kasus utama penggunaan NAT:
- Komunikasi dari Pod ke luar cluster: mengubah IP privat Pod menjadi IP publik node (SNAT)
- Komunikasi dari luar ke Pod melalui NodePort: menjalankan DNAT dan SNAT secara bersamaan untuk meneruskan traffic eksternal ke Pod yang sesuai
Pendekatan khas Cilium
- Pada sistem Linux umum, NAT dikelola dengan subsistem conntrack dan iptables
- Cilium menggunakan teknologi eBPF untuk melewati stack jaringan Linux tradisional
- Untuk pemrosesan SNAT, Cilium mengelola langsung tabel SNAT dalam bentuk LRU hash map (
BPF_MAP_TYPE_LRU_HASH)
Penyebab dan gejala masalah
-
Masalah pencarian (Lookup):
- Diperlukan pencarian tabel hash untuk memverifikasi pemrosesan NAT
- Demi pencarian cepat, data yang sama dimasukkan dua kali ke tabel sebagai RevSNAT dengan membalik nilai src dan dst
-
Masalah LRU (Least Recently Used):
- Karena keterbatasan sumber daya, data dapat dihapus oleh logika LRU
-
Masalah gabungan:
- Untuk satu koneksi TCP, data yang sama dicatat dua kali
- Jika salah satu dari dua data itu dihapus oleh LRU, seluruh koneksi bisa terputus
Solusi yang sederhana tetapi efektif
- Ide inti: jika paket dari satu arah teramati, entri untuk arah sebaliknya juga diperbarui bersama
- Dengan pendekatan sederhana ini:
- Kedua entri dua arah sama-sama diperbarui sehingga makin kecil kemungkinan terkena prioritas penghapusan LRU
- Kemungkinan hanya satu entri yang terhapus lalu memutus seluruh komunikasi menjadi lebih rendah
- Stabilitas jaringan meningkat tajam dalam pengujian benchmark
Kesimpulan dan pelajaran
- Kasus ini menunjukkan bahwa bahkan di sistem yang kompleks, ide sederhana dapat membawa perubahan besar
- Pemecahan masalah dilakukan dengan berlandaskan pengetahuan dasar CS (cara kerja NAT)
- Cara lain untuk menghindari masalah: memperbesar ukuran tabel NAT
- Penghormatan kepada semangat pengembang yang menganalisis masalah secara menyeluruh dan berkontribusi dengan data bukti yang objektif
Nilai dari pendekatan teknis
- Pentingnya memahami akar penyebab masalah dan menyelesaikannya
- Pelajaran bahwa perbaikan kode sederhana dapat sangat meningkatkan stabilitas keseluruhan sistem
- Pentingnya memahami prinsip dasar bahkan dalam sistem yang kompleks
1 komentar
Terima kasih telah membagikan pengalaman yang luar biasa ini!