Episode ini membahas networking Kata Containers: bagaimana CNI berintegrasi dengan microVM, peran virtio-net di dalam guest, plugin bridge/macvlan/host-device, dan isolasi network per-pod. Kalian juga mengenal opsi eksperimental seperti disableNewNetns untuk workload khusus.

Pod Kata kalian sudah berjalan, tapi pernahkah kalian bertanya: bagaimana jaringan pod Kata bekerja? Pada container biasa, CNI memasang veth ke network namespace pod di host. Pada microVM, tidak ada network namespace pod di host — ada VM. Jaringan harus masuk ke dalam VM dan dihubungkan ke aplikasi di dalamnya.
Episode 7 membedah jalur ini: dari plugin CNI di host, lewat perangkat tap dan virtio-net, hingga interface di dalam guest. Networking adalah area yang paling sering membingungkan saat pertama kali pindah dari runc ke Kata — tapi begitu arsitekturnya dipahami, semuanya menjadi logis.
Perjalanan sebuah paket dari pod Kata keluar:
Kunci pemahaman: CNI berjalan normal di host, dan guest melihat interface virtio sebagai interface biasa. Perbedaan dari container biasa: yang berbagi jaringan dengan host adalah VM, bukan container, sehingga isolasi network mengikuti isolasi microVM.
Kata tidak menggantikan CNI. Ia memakai CNI yang sudah ada di cluster — Cilium, Calico, Flannel, atau lainnya. Dari perspektif CNI, pod Kata hanyalah pod lain yang perlu interface jaringan. Yang berbeda adalah implementasi internalnya: CNI menghubungkan perangkat tap, bukan veth pod.
Karena itu, kebanyakan CNI bekerja tanpa perubahan. Verifikasi bahwa CNI sudah menyiapkan jaringan pod Kata dengan benar:
kubectl get pod kata-demo -o wide
crictl inspect <sandbox-id> | grep -A5 interfacescrictl inspect <sandbox-id> menampilkan detail sandbox, termasuk interface jaringan yang sudah di-assign. Interface tersebut akan menampilkan IP pod yang sama dengan yang terlihat dari kubectl get pod -o wide.
Di dalam microVM, network disediakan oleh virtio-net: perangkat paravirtual yang dipakai VMM untuk menyediakan jaringan kepada guest. Guest tidak berkomunikasi langsung dengan tap host — ia melihat device virtio-net sebagai NIC.
Untuk melihat interface di dalam guest, masuki guest dengan kata-runtime exec (dari episode 4):
kata-runtime list
sudo kata-runtime exec <sandbox-id> ip addrkata-runtime exec <sandbox-id> ip addr menampilkan interface di dalam guest — kalian akan melihat eth0 dengan IP pod, dan interface loopback lo. Dari perspektif aplikasi, tidak ada yang berbeda dari container biasa.
Kata mendukung multi-interface: pod bisa punya lebih dari satu interface, masing-masing disediakan oleh plugin CNI yang berbeda. Contoh umum: satu interface default untuk traffic aplikasi dan satu interface host-device untuk akses langsung ke NIC fisik.
Multi-interface disediakan dengan memakai beberapa plugin CNI dalam konfigurasi multus, atau annotation khusus Kata. Pada tingkat konsep, setiap interface adalah satu pasang tap host + virtio-net guest yang terpisah.
Pilihan plugin CNI memengaruhi cara interface host dibuat:
Kebanyakan deployment memakai bridge — termasuk melalui CNI seperti Cilium dan Calico yang mengelola bridge/internal datapath sendiri. macvlan dan host-device dipakai untuk kasus khusus, terutama yang menyangkut performa dan perangkat fisik.
Isolasi network di Kata bekerja dua lapis. Pertama, di lapisan CNI: setiap pod mendapat network namespace sendiri di host. Kedua, di lapisan guest: setiap microVM adalah entitas jaringan terpisah dengan interface sendiri. Kombinasi keduanya berarti pod Kata tidak bisa melihat interface atau network namespace pod lain di node yang sama.
Bagi security, ini keuntungan besar: bahkan jika seorang attacker mengambil alih aplikasi di dalam guest, ia terjebak di jaringan guest-nya sendiri. Perluasan ke NetworkPolicy dan security network akan dibahas di episode 14.
Untuk sebagian besar workload, perilaku network standar sudah cukup. Tapi ada opsi yang perlu kalian kenali karena muncul di dokumentasi dan isu-isu GitHub: disableNewNetns.
Secara default, Kata membangun network namespace terpisah untuk pod di dalam guest. Opsi disable_new_netns mematikan perilaku ini — pod di dalam guest langsung memakai network namespace guest. Kasus pemakaiannya: workload yang butuh mengakses interface guest secara langsung, atau aplikasi yang menjalankan setup jaringan sendiri. Ini opsi eksperimental:
[runtime]
# Disable the creation of a new network namespace for
# the sandbox inside the guest (experimental)
disable_new_netns = falsedisable_new_netns = true akan membuat container dalam pod berbagi network namespace guest langsung. Jangan aktifkan tanpa memahami konsekuensi keamanan dan tanpa mengujinya di lab — ini mengubah model isolasi network pod.
Warning
Opsi eksperimental seperti disableNewNetns sebaiknya tidak dipakai di production tanpa alasan kuat dan pengujian menyeluruh. Model default — network namespace per pod di dalam guest — adalah perilaku yang aman dan paling banyak diuji.
Inti yang harus dibawa pulang:
eth0).disableNewNetns adalah opsi eksperimental — pahami sebelum memakai.Di episode 8 selanjutnya kita akan membahas storage — bagaimana image rootfs menjadi virtio-blk, peran virtio-fs untuk shared volume, passthrough device dengan VFIO, dan bagaimana emptyDir, PVC, serta hostPath bekerja di dalam microVM. Data adalah bagian terpenting dari workload kalian, dan memahami jalurnya ke dalam guest adalah kunci.