9 poin oleh lemonmint 2025-04-10 | 1 komentar | Bagikan ke WhatsApp
  • 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:
    1. Perangkat internal mencoba terhubung ke server eksternal
    2. Perangkat NAT mengubah IP/port asal menjadi IP/port publik (SNAT)
    3. Respons dari server eksternal diterjemahkan kembali ke perangkat internal (DNAT)

Pemanfaatan NAT di Kubernetes

  • Ada dua kasus utama penting penggunaan NAT di Kubernetes:
    1. Komunikasi dari Pod ke luar cluster: mengubah IP internal Pod menjadi IP publik node
    2. 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 if memberikan 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:
    1. Komunikasi dari Pod ke luar cluster: mengubah IP privat Pod menjadi IP publik node (SNAT)
    2. 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

 
ethanhur 2025-04-14

Terima kasih telah membagikan pengalaman yang luar biasa ini!