Using IPvlan network in Docker
Driver IPvlan memberikan kontrol penuh kepada operator atas pengalamatan IPv4 dan IPv6. IPvlan memiliki dua mode operasi yang dapat digunakan, yaitu:
ipvlan_mode=l2ipvlan_mode=l3
Jika Anda menggunakan dua atau lebih Docker host, IPvlan dapat digunakan untuk menghubungkan container antar host tanpa harus menggabungkan host tersebut ke dalam Docker Swarm.
IPvlan Mode L2
Pada mode L2, container akan berada pada broadcast domain yang sama dengan interface parent di host. Setiap container mendapatkan IP langsung dari subnet fisik yang sama dengan host.
Topologi
Membuat Network IPvlan
Jika opsi -o ipvlan_mode tidak ditentukan, Docker akan menggunakan mode L2 secara default.
Membuat Container
Test Konektivitas Antar Container
Masuk ke container alfa1, lalu lakukan ping ke alfa2.
Container juga dapat diakses menggunakan nama container karena Docker menyediakan DNS internal.
Test Konektivitas ke Router
Jika konfigurasi benar, container dapat langsung berkomunikasi dengan router/gateway tanpa NAT.
IPvlan L2 Antar Docker Host
Pendekatan yang sama dapat digunakan untuk menghubungkan container yang berada pada Docker host berbeda, selama:
- Host-host tersebut berada pada layer-2 network yang sama
- Menggunakan subnet dan gateway yang sama
- Interface
parentmengarah ke NIC fisik yang terhubung ke jaringan tersebut
Contoh Topologi Multi-Host
Catatan Penting:
-
Network IPvlan tidak menggunakan
docker0 -
Opsi
-o parent=harus diisi dengan interface fisik yang:- Mengarah ke router atau gateway
- Berada pada subnet yang sama dengan IP container
-
Pastikan switch jaringan mengizinkan multiple MAC/IP pada satu port (tidak ada port security ketat)
IPvlan 802.1Q Trunk – Mode L2
Pada skenario ini, IPvlan L2 digunakan di atas interface VLAN (802.1Q). Setiap VLAN direpresentasikan sebagai interface Linux terpisah, lalu digunakan sebagai parent untuk network IPvlan.
Pendekatan ini memungkinkan:
- Pemisahan trafik berbasis VLAN
- Container berada langsung pada subnet VLAN masing-masing
- Koneksi antar container lintas Docker host tanpa Swarm
Topologi
Membuat Interface VLAN
Jalankan perintah berikut di kedua Docker host.
ens224 merupakan interface fisik yang:
- Terhubung ke jaringan trunk
- Digunakan untuk melewatkan VLAN 10 dan VLAN 20
Mengaktifkan Interface VLAN
Pastikan interface VLAN sudah UP sebelum digunakan sebagai parent IPvlan.
Membuat Docker Network IPvlan
Setiap network IPvlan:
- Terikat ke satu VLAN
- Berada pada broadcast domain VLAN tersebut
- Memberikan IP langsung ke container tanpa NAT
Anda dapat menambahkan lebih dari satu subnet dan gateway pada VLAN yang sama, selama:
- Subnet tidak saling overlap
- Routing di jaringan fisik mendukung
Create Container
Buat container pada masing-masing Docker host menggunakan network net-vlan10 dan net-vlan20.
Docker Host #1
Verifikasi container yang berjalan:
Docker Host #2
Verifikasi container:
Test Konektivitas (Ping)
Masuk ke container alfa10, lalu lakukan ping ke container pada Docker host #2.
Ping ke beta10 (VLAN 10)
✅ Berhasil, karena:
alfa10danbeta10berada pada VLAN 10- Keduanya berada pada broadcast domain yang sama
- IPvlan L2 meneruskan frame Layer-2 secara langsung
Ping ke beta20 (VLAN 20)
❌ Gagal, karena:
alfa10berada di VLAN 10beta20berada di VLAN 20- Tidak ada routing antar VLAN
IPvlan Mode L3
Pada IPvlan mode L3, setiap Docker host bertindak sebagai router (gateway) untuk network container yang berada di host tersebut.
Karakteristik utama IPvlan L3:
- Setiap network IPvlan berada pada subnet yang berbeda
- Tidak ada broadcast antar container
- Container tidak terhubung langsung ke jaringan fisik
- Routing dilakukan oleh Docker host
Topologi
Konfigurasi Docker Host #1
Membuat Network IPvlan L3
Membuat Container
Container alfa akan mendapatkan IP dari subnet 10.10.11.0/24, dengan Docker host #1 sebagai gateway.
Konfigurasi Docker Host #2
Membuat Network IPvlan L3
Membuat Container
Container beta berada pada subnet 10.10.12.0/24, dengan Docker host #2 sebagai gateway.
Static Routing Antar Host
Agar container pada host yang berbeda dapat saling berkomunikasi, masing-masing Docker host harus mengetahui rute ke subnet container di host lain.
Docker Host #1
Docker Host #2
Tanpa static route ini:
- Paket akan berhenti di Docker host
- Tidak ada mekanisme auto-discovery seperti pada L2
Test Konektivitas
Masuk ke container alfa dan lakukan ping ke container beta.
✅ Berhasil, karena:
- Docker host bertindak sebagai router
- Static route sudah dikonfigurasi
- IPvlan L3 meneruskan paket antar subnet