Menghubungkan container dan pod lewat stack networking netavark dan aardvark-dns: DNS per-container, port mapping dengan -p, perbandingan tipe jaringan bridge, macvlan, ipvlan, dan host, serta cara kerja rootless port forwarding dengan pasta dan slirp4netns.

Di episode 7 kalian menyimpan data dengan volume dan mount. Sekarang giliran menghubungkan semuanya: networking. Episode 8 ini membahas stack jaringan modern Podman — netavark dan aardvark-dns — beserta DNS per-container, port mapping, tipe-tipe jaringan yang tersedia, dan bagaimana penerusan port bekerja dalam mode rootless.
Podman memakai arsitektur networking terpisah dari daemon container engine. Sejak Podman 4, stack default-nya adalah kombinasi dua komponen yang dikembangkan Red Hat:
Arsitektur dua-komponen ini menggantikan model Docker daemon handles everything: netavark mengatur datapath, aardvark-dns mengatur resolusi nama. Dengan pemisahan ini, keduanya bisa dikembangkan dan diuji secara mandiri. Pada Podman 6, stack ini naik ke generasi kedua (v2) dengan penanganan yang lebih modern — dan tetap menjadi pilihan default.
podman network inspect menampilkan detail jaringan termasuk nama container yang terdaftar, dan podman info menunjukkan komponen mana yang sedang dipakai untuk networking.
Karena aardvark-dns bekerja per jaringan, setiap container yang terhubung ke jaringan yang sama bisa saling memanggil lewat namanya — tanpa perlu menebak IP:
podman network create mynet
podman run -d --network mynet --name db mariadb:latest
podman run --rm --network mynet --name client alpine ping -c1 dbContainer client memanggil db lewat nama — bukan IP — dan aardvark-dns menerjemahkannya ke alamat container db di jaringan mynet. Saat IP container berubah karena restart, nama tetap sama; inilah alasan mengapa DNS per-container menjadi fondasi komunikasi antar layanan.
Agar layanan bisa diakses dari luar — browser, load balancer, atau container di jaringan lain — port container harus dipetakan ke host:
podman run -d --name web -p 8080:80 nginx:latest
podman port web-p 8080:80 memetakan port 80 di dalam container ke port 8080 di host. podman port web menampilkan pemetaan yang aktif. Untuk pemetaan satu arah (hanya mengizinkan akses dari port tertentu), flag bisa ditulis lebih eksplisit, misalnya -p 127.0.0.1:8080:80 agar hanya bisa diakses dari localhost.
Podman menyediakan beberapa tipe jaringan, masing-masing dengan trade-off sendiri:
| Tipe | Cara kerja | Kasus penggunaan |
|---|---|---|
| bridge | Jaringan virtual terisolasi, NAT keluar | Default, paling umum |
| macvlan | Container memakai MAC address di jaringan fisik | Container di jaringan LAN yang sama |
| ipvlan | Container memakai IP di jaringan fisik, tanpa MAC sendiri | Subnet yang terbatas MAC address |
| host | Container memakai network namespace host langsung | Kinerja maksimal, tanpa isolasi |
Saat podman run tanpa opsi --network, container masuk ke bridge default. Setiap container mendapat IP virtual, dan lalu lintas ke luar lewat NAT. Ini isolasi paling aman dan menjadi pilihan untuk hampir semua workload:
podman network create --driver bridge backend
podman run -d --network backend --name api myapp:latestpodman network create --driver bridge backend membuat bridge baru, dan container api menempel padanya. podman network ls menampilkan semua jaringan, sementara podman network rm menghapusnya — pastikan tidak ada container yang masih memakainya.
Untuk container yang harus tampil seperti perangkat biasa di jaringan fisik, macvlan memberi setiap container MAC address sendiri di jaringan LAN yang sama. Kekurangannya: tidak bisa berkomunikasi dengan host yang sama lewat alamat fisik, dan banyak switch/AP membatasi jumlah MAC address. ipvlan mengelompokkan beberapa container di bawah satu MAC, membagi lalu lintas berdasarkan IP — cocok bila jumlah MAC jadi kendala.
| Aspek | macvlan | ipvlan |
|---|---|---|
| Alamat MAC | Satu per container | Satu dibagi bersama |
| Keterbatasan switch | Rentan cap MAC | Tidak terpengaruh |
| Lalu lintas dari host | Tidak didukung | Tergantung mode |
Jaringan host menaruh container langsung di network namespace host. Tidak ada isolasi IP dan tidak ada NAT — performa maksimal, tetapi port container langsung menempati port host. Cocok untuk workload yang sangat sensitif terhadap latensi, dengan konsekuensi keamanan yang harus disadari.
Dalam mode rootless, container tidak bisa membangun bridge kernel. Seperti yang kalian pelajari di episode 5, lalu lintas diteruskan oleh proses user-space — pasta atau slirp4netns. Pada Podman modern, pasta menjadi pilihan bawaan untuk rootless karena penerusan portnya lebih efisien.
podman run -d --name app -p 8080:8080 myapp:latest
podman ps --format "table {{.Names}}\t{{.Ports}}"Perintahnya identik dengan mode root; hanya jalur datanya berbeda — lewat user-space, bukan kernel host. Perlu diingat batasan dari episode 5: port rendah di bawah 1024 tidak bisa dibuka langsung tanpa konfigurasi tambahan, dan penerusan port rootless menambahkan sedikit overhead.
Warning
Port mapping yang sama tidak bisa dipakai oleh dua container sekaligus. Jika podman run gagal dengan pesan port already in use, cek dengan podman ps -a atau ss -tlnp — mungkin ada container lain atau proses host yang sudah menempati port tersebut.
Pods juga menempel ke jaringan dengan cara yang sama. Sebuah pod yang dibuat dengan --network tertentu membuat seluruh container di dalamnya berbagi satu alamat di jaringan itu:
podman pod create --name apipod --network backend -p 9000:9000
podman run -d --pod apipod --name api myapp:latestKarena seluruh anggota pod berbagi network namespace, pemetaan port di atas cukup dideklarasikan sekali saat pod dibuat — persis pola yang kalian pelajari di episode 6. DNS per-container tetap berlaku: container lain di backend bisa memanggil pod lewat namanya.
Episode 8 membahas networking Podman secara utuh: stack netavark dan aardvark-dns sebagai fondasi, DNS per-container yang membuat komunikasi antar layanan mudah, port mapping dengan -p, perbandingan tipe jaringan bridge, macvlan, ipvlan, dan host, cara kerja rootless port forwarding dengan pasta dan slirp4netns, serta penempatan pod dalam jaringan.
Inti yang harus dibawa pulang:
Di episode 9 berikutnya, kalian beralih dari menjalankan image menjadi membuat image sendiri: Containerfile dan Buildah — dari FROM, RUN, COPY, CMD, ENTRYPOINT, HEALTHCHECK, sampai build multi-stage dengan cache.