Halo guys, Ridwan here..
Come again with new notes update!
Pada tulisan ini kita mau deep dive lebih dalam mengenai MicroCloud
khususnya pada network configuration.
Alhamdulillah, ada beberapa pembaca dari blog ini yang mencoba install micrcoloud, dan ada yang sampai message ke diriku terkait networking pada Microloud. Sudah berhasil install tapi, ada beberapa kendala seperti :
- Tidak ada internet pada VM nya
- Tidak bisa saling ping antar VM
- Tidak bisa akses VM dari luar cluster/external
Untuk dapat menjawab issue yang terjadi kita harus paham documentasi berikut :
- https://documentation.ubuntu.com/microcloud/stable/lxd/howto/network_create/#network-types
- https://documentation.ubuntu.com/microcloud/latest/lxd/explanation/networks/#managed-networks
Jaringan yang tersedia secara default adalah
- OVN Network
ini jaringan virtual (Open Virtual Networking) yang berjalan pada sebuah services SDN (software-defined networking)
dalam konteks Microcloud jaringan ini seperti VPC,
atau lebih simple nya kalian bisa bayangkan sebuah alat jaringan berbentuk router yang terdapat port WAN & port LAN.
Details nya kita bahas selanjutnya di bawah.
https://documentation.ubuntu.com/microcloud/stable/lxd/reference/network_ovn/#network-ovn - Bridge
Simple nya dengan bridge ini kita dapat menghubungkan jaringan dari physical interface dengan virtual interface
https://documentation.ubuntu.com/microcloud/stable/lxd/reference/network_bridge/#network-bridge https://wiki.mikrotik.com/Manual:Interface/Bridge#Summary
Kemudian ada "External Network", seperti :
- Macvlan
https://documentation.ubuntu.com/microcloud/stable/lxd/reference/network_macvlan/#network-macvlan - SR-IOV
https://documentation.ubuntu.com/microcloud/stable/lxd/reference/network_sriov/#network-sriov - Physical
https://documentation.ubuntu.com/microcloud/stable/lxd/reference/network_physical/#network-physical
Ok.. Cukup teori nya,
Kita langsung saja praktek cara membuat network sesuai dokumentasi di atas !
Prerequisite
Sebelum mulai, kita samakan config & kondisi network interface pada level Host/Hypervisor nya.
disini aku memiliki 2 network interface
- enp1s0 dengan segment 192.168.124.0/24 = WAN / Internet / Provider network.
- enp5s0 dengan segment 192.168.100.0/24 = LAN / Internal Traffic / isoalted network.
- **Pada interface enps1s0 dijadikan slave untuk interface br0 , Tujuannya untuk menjadi UPLINK dari OVN.
Sesuai dengan Required Network Interfaces, pada dokumentasi :
"For networking, use at least two dedicated network interfaces for each machine in a MicroCloud cluster: one for intra-cluster communication and one for external connectivity."
https://documentation.ubuntu.com/microcloud/v2-edge/microcloud/reference/requirements/#required-network-interfaces
Kondisi Interface pada Host, sebelum instalasi MicroCloud
root@MicroCloud-01:~# ip -br a
lo UNKNOWN 127.0.0.1/8 ::1/128
enp1s0 UP
enp5s0 UP 192.168.100.101/24 fe80::5054:ff:fe6d:832/64
br0 UP 192.168.124.101/24 fe80::c002:eaff:fec8:f54c/64
Kemudian setelah berhasil instalasi akan terbentuk network pada cluster MicroCloud seperti berikut :
root@MicroCloud-01:~# lxc network list
+-----------+----------+---------+----------------+---------------------------+-------------+---------+---------+
| NAME | TYPE | MANAGED | IPV4 | IPV6 | DESCRIPTION | USED BY | STATE |
+-----------+----------+---------+----------------+---------------------------+-------------+---------+---------+
| UPLINK | physical | YES | | | | 1 | CREATED |
+-----------+----------+---------+----------------+---------------------------+-------------+---------+---------+
| br0 | bridge | NO | | | | 2 | |
+-----------+----------+---------+----------------+---------------------------+-------------+---------+---------+
| br-int | bridge | NO | | | | 0 | |
+-----------+----------+---------+----------------+---------------------------+-------------+---------+---------+
| default | ovn | YES | 10.211.40.1/24 | fd42:7219:d91c:764e::1/64 | | 4 | CREATED |
+-----------+----------+---------+----------------+---------------------------+-------------+---------+---------+
| enp1s0 | physical | NO | | | | 0 | |
+-----------+----------+---------+----------------+---------------------------+-------------+---------+---------+
| enp5s0 | physical | NO | | | | 0 | |
+-----------+----------+---------+----------------+---------------------------+-------------+---------+---------+
Secara otomatis akan menghasilkan OVN Network dengan nama "Default" menggunakan Network UPLINK sebagai port WAN, agar instances/VM kalian dapat terkoneksi ke internet.
MicroCloud Network Type
Pada step ini kita akan coba membuat beberapa type network yang bisa di apply pada microcloud, agar VM kita dapat di akses oleh external network.
-
OVN Network Forward
Sebelumnya kita sudah jelaskan ini adalah jaringan VPC dengan access NAT dari UPLINK.
Karena ini bentuknya NAT. Artinya IP Addr yang di dapat oleh instances tidak akan dapat di akses / ping oleh jaringan di luar dari NAT tersebut.
Pada gambar ini kedua VM menggunakan network default, terlihat
- Kedua Instance / VM dapat access internet ✅
- Kedua Instance / VM dapat saling berkomunikasi ✅
- Kedua Instance / VM tidak dapat di akses dari jaringan external ❌
Pada Point 3, merupakan hal yang expected.. karena ini NAT.
Tetapi, ada cara agar instance / VM tersebut dapat di akses oleh jaringan external,
Dengan menggunakan konsep "Pord Forwarding" atau "DST-NAT".
https://documentation.ubuntu.com/lxd/latest/howto/network_forwards/#how-to-configure-network-forwards
Ok, begini cara config OVN Network Forward nya !
Pertama kita siapkan IP Addr yang belum terpakai pada segment br0, untuk didaftarkan pada UPLINK.
sudo lxc network set UPLINK ipv4.routes 192.168.124.205/32
Kemdudian, apply
sudo lxc network forward create default --allocate=ipv4
Kemudian, masuk ke menu Network dan Create Forwards Rules nya :
Dari External IP Add (192.168.124.205) yang sudah di daftarkan, akan di arahkan ke Local Addr (10.211.40.2)
Kemudian kita test port connection dari jaringan yang terhubung ke segment 192.168.124.0/24 tersebut, menggunakan tool NC.
Ok.
Selaamt kita sudah berhasil create OVN Network Forward, secara konsep ini mirip dengan "Floating IP" ada Openstack tetapi port nya harus di definisikan secara specific.
-
MACVlan
Dengan MACVlan, pada instance kalian dapat menggunakan jaringan yang sama dengan node microcloud, tetapi Node tidak bisa berkomunikasi ke VM melalui jaringan MACVlan.
Pada test ini kita akan menggunakan segment network br0 yang berada pada host, nantinya di level instances memiliki jaringan yang sama dengan br0
Details lebih lengkap pada dokumentasi :
https://documentation.ubuntu.com/microcloud/latest/lxd/reference/network_macvlan/#macvlan-network
Untuk cara membuat MACVlan, masukan command berikut :
Buat pending network / local-config
$ lxc network create macvlan0 --type=macvlan --target MicroCloud-01
$ lxc network create macvlan0 --type=macvlan --target MicroCloud-02
$ lxc network create macvlan0 --type=macvlan --target MicroCloud-03
Kemudian, Set Config "parent" interface
$ lxc network set macvlan0 parent br0 --target MicroCloud-01
$ lxc network set macvlan0 parent br0 --target MicroCloud-02
$ lxc network set macvlan0 parent br0 --target MicroCloud-03
Terakhir, Apply Config tersebut
$ lxc network create macvlan0 --type=macvlan
Lihat pada menu Networks, apakah network tersebut statusnya sudah "Created"
Kita coba tambahkan network tersebut pada Interface di Instances / VM,
Jika berhasill, akan ada satu tambahan interface terdeteksi oleh Instances / VM
Ok.
Selaamt kita sudah berhasil create MACVlan Network !
-
Bridge (bridge.external_interfaces)
Untuk bisa menggunakan network type ini kita perlu menyiapkan satu network interface lagi pada level Host/Hypervisor nya, kemudian buatk network bridge melalui microcloud, bukan dari level host. Simple nya interface ini akan disambungkan ke dalam instances.
Pada test ini kita akan buat 1 network lagi,
Sekenario / Ceritanya jaringan ini berisi trunk dengan IP Public
Kemudian attach network tersebut ke semua Hypervisor / Node dari MicroCloud !
Setelah terpasang, Tidak perlu Configure IP Addr pada interface tersebut (enp6s0).
Karena Config IP Addr nya, akan dilakukan pada level Instances / VM.
Ok.. jika pada semua hypervisor / Node Microcloud sudah siap !
Sekarang kita Create Bridge network melaui Microcloud/LXC dengan command berikut :
Buat pending network / local-config
$ lxc network create public-br --type=bridge --target MicroCloud-01
$ lxc network create public-br --type=bridge --target MicroCloud-02
$ lxc network create public-br --type=bridge --target MicroCloud-03
Kemudian, Set Config "bridge.external_interfaces" jadikan "enp6s0" sebagai slave interface
$ lxc network set public-br bridge.external_interfaces=enp6s0 --target MicroCloud-01
$ lxc network set public-br bridge.external_interfaces=enp6s0 --target MicroCloud-02
$ lxc network set public-br bridge.external_interfaces=enp6s0 --target MicroCloud-03
Terakhir, apply config tersebut
$ lxc network create public-br \
--type=bridge \
ipv4.address=none \
ipv6.address=none
Jika statusnya sudah berhasil Created, langsung saja kita coba apply Network "public-br" tersebut ke dalam instances
Seperti yang ta bilang, Config IP Addr nya dilakukan pada level Instance / VM.
Nah.. karena network "public-br" ini type bridge dengan OSI Layer 2 (Data Link Layer), Artinya support VLAN, Dan pada level instances lah kita melakukan untagged.
Ok.
Selaamt kita sudah berhasil create Bridge External Network !
---
Terima kasih teman-teman yang sudah membaca & memberikan feedback pada tulisan saya.
Senang rasanya jika tulisan ini dapat bermanfaat !
Best Regards
Rdw