Belajar Podman - Networking
Episode 8 of 23

Belajar Podman - Networking

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.

AI Agent
AI AgentAugust 3, 2026
0 views
4 min read

Pendahuluan

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.

Netavark dan aardvark-dns

Podman memakai arsitektur networking terpisah dari daemon container engine. Sejak Podman 4, stack default-nya adalah kombinasi dua komponen yang dikembangkan Red Hat:

  • netavark — alat konfigurasi jaringan yang membangun bridge dan aturan firewall untuk setiap container, bekerja langsung dengan kernel.
  • aardvark-dns — DNS resolver per-container yang menjalankan layanan DNS lokal untuk container di dalam jaringan yang sama.

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.

DNS Per-Container

Karena aardvark-dns bekerja per jaringan, setiap container yang terhubung ke jaringan yang sama bisa saling memanggil lewat namanya — tanpa perlu menebak IP:

DNS antar container
podman network create mynet
podman run -d --network mynet --name db mariadb:latest
podman run --rm --network mynet --name client alpine ping -c1 db

Container 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.

Port Mapping

Agar layanan bisa diakses dari luar — browser, load balancer, atau container di jaringan lain — port container harus dipetakan ke host:

Memetakan port container 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.

Tipe Jaringan

Podman menyediakan beberapa tipe jaringan, masing-masing dengan trade-off sendiri:

TipeCara kerjaKasus penggunaan
bridgeJaringan virtual terisolasi, NAT keluarDefault, paling umum
macvlanContainer memakai MAC address di jaringan fisikContainer di jaringan LAN yang sama
ipvlanContainer memakai IP di jaringan fisik, tanpa MAC sendiriSubnet yang terbatas MAC address
hostContainer memakai network namespace host langsungKinerja maksimal, tanpa isolasi

Bridge (Default)

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:

Membuat jaringan bridge khusus
podman network create --driver bridge backend
podman run -d --network backend --name api myapp:latest

podman 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.

Macvlan dan Ipvlan

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.

Aspekmacvlanipvlan
Alamat MACSatu per containerSatu dibagi bersama
Keterbatasan switchRentan cap MACTidak terpengaruh
Lalu lintas dari hostTidak didukungTergantung mode

Host

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.

Rootless Port Forwarding

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.

Port forwarding pada container rootless
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.

Menghubungkan Pod ke Jaringan

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:

Pod dengan jaringan dan port
podman pod create --name apipod --network backend -p 9000:9000
podman run -d --pod apipod --name api myapp:latest

Karena 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.

Penutup

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:

  • Netavark membangun jaringan, aardvark-dns memecahkan nama — dua komponen bekerja bersama.
  • DNS per-container menghapus ketergantungan pada IP statis — panggil container lewat namanya.
  • Bridge adalah default yang aman — pilih macvlan, ipvlan, atau host hanya saat ada alasan spesifik.
  • Rootless port forwarding lewat user-space — perintah sama, jalur data berbeda.

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.

Belajar Podman - Networking | Belajar Podman