Episode ini mengoptimalkan performa Flannel: menghitung MTU yang benar dengan overhead VXLAN 50 bytes, menghindari fragmentasi, serta mengaktifkan direct routing untuk mempercepat traffic intra-subnet dan mengukur hasilnya dengan benchmark sederhana.

Flannel bekerja dengan baik secara default, tetapi jaringan tidak selalu ideal: MTU host berbeda-beda, ada hop dengan batas paket lebih kecil, dan aplikasi heavy network butuh throughput maksimal. Di sinilah optimasi dimulai.
Episode 16 membahas penghitungan MTU yang benar, cara menghindari fragmentasi, dan pengaktifan direct routing untuk traffic intra-subnet. Semua dibungkus dengan cara mengukur hasilnya.
Setiap paket yang melewati tunnel VXLAN menambah overhead 50 bytes. MTU efektif di dalam Pod adalah MTU host dikurangi overhead tersebut. Jika host memakai 1500, MTU Pod harus 1450.
ip link show eth0
ip link show flannel.1Perintah ip link show eth0 menampilkan MTU host, dan ip link show flannel.1 menampilkan MTU yang dihitung flanneld. Selisihnya harus 50 untuk backend VXLAN.
Kesalahan paling umum adalah MTU Pod lebih besar dari yang bisa ditampung jalur tunnel. Akibatnya paket dipecah di tengah jalan, performa anjlok, atau koneksi TCP gagal. Gejala khasnya: ping kecil berhasil, tetapi transfer besar berhenti di tengah jalan.
Aturan praktisnya: turunkan MTU sampai jalur terendah di seluruh cluster. Jika ragu, gunakan MTU yang lebih kecil dan stabil daripada yang besar tetapi rapuh.
Secara default flanneld menghitung MTU otomatis. Kalian bisa memaksakan nilai tertentu lewat field MTU di net-conf.json:
net-conf.json: |
{
"Network": "10.244.0.0/16",
"MTU": 1450,
"Backend": {
"Type": "vxlan"
}
}Nilai 1450 aman untuk host dengan MTU 1500. Untuk host jumbo frame 9000, kalian bisa memakai 8950, selama seluruh hop di jaringan mengizinkan.
Setelah mengubah MTU dan me-restart DaemonSet, uji dengan paket sebesar MTU:
kubectl exec -it <pod> -- ping -c 2 -s 1450 -M do <ip-pod-node-lain>Opsi -M do pada ping meminta don't fragment. Jika paket 1450 bytes berhasil, MTU terpasang benar. Jika gagal, MTU terlalu besar untuk jalur.
Traffic antara node yang berada pada subnet host yang sama tidak perlu encapsulation: node bisa saling menjangkau langsung. Opsi DirectRouting di backend VXLAN memanfaatkan ini dengan memakai route langsung untuk traffic intra-subnet, dan kembali ke VXLAN untuk lintas subnet.
net-conf.json: |
{
"Network": "10.244.0.0/16",
"Backend": {
"Type": "vxlan",
"DirectRouting": true
}
}Setelah aktif, route menuju node di subnet yang sama berubah menjadi route langsung tanpa interface flannel.1:
ip route | grep flannelOutput dari ip route | grep flannel menampilkan route via dev flannel.1 untuk node di subnet berbeda, dan via dev eth0 untuk node di subnet yang sama. Ini bukti direct routing bekerja.
Untuk membuktikan dampak optimasi, ukur throughput sebelum dan sesudah perubahan. Tool sederhana yang bisa dipakai: iperf di dalam Pod.
kubectl run iperf-srv --image=networkstatic/iperf --restart=Never --command -- iperf -s
kubectl run iperf-cli --image=networkstatic/iperf --restart=Never --rm -it --command -- iperf -c <ip-pod-srv>Output iperf menampilkan bandwidth antara dua Pod. Bandingkan hasil dengan backend vxlan biasa, dengan DirectRouting, dan dengan host-gw. Pola hasilnya akan konsisten: semakin sedikit overhead, semakin tinggi throughput.
Jangan hanya mengejar angka tertinggi. Pertimbangkan keseimbangan: host-gw memang tercepat tetapi menuntut node saling reachable. VXLAN dengan DirectRouting memberi kompromi yang baik untuk jaringan campuran. Gunakan data benchmark untuk mendukung keputusan di episode 21.
Episode 16 mengoptimalkan performa Flannel: menghitung MTU dengan overhead 50 bytes, menghindari fragmentasi, mengaktifkan direct routing, dan mengukur hasilnya dengan benchmark.
Inti yang harus dibawa pulang:
Di episode 17 selanjutnya kita akan keluar dari satu cluster: multi-cluster dan advanced topology — membangun overlay lintas cluster, memahami keterbatasan Flannel, menggabungkan node dengan backend berbeda, serta topologi lanjutan seperti IPv6 dan pembatasan alokasi subnet.