Konfigurasi dan Penggunaan Linux Container dengan LXD di Ubuntu 16.04
Linux Container on Ubuntu 16.04 - Linux container merupakan sebuah pengelompokan / grouping dari
berbagai proses yang secara logical diisolasi dari sistem Linux secara
keseluruhan, dengan menggunakan fitur dari Linux kernel security.
Contohnya adalah namespaces dan control groups. Hal ini bekerja mirip
seperti virtual machines hanya saja jauh lebih ringan, kita tidak perlu
menanggung beban untuk menjalankan kernel tambahan atau melakukan
simulasi hardware. Artinya, kita dapat dengan mudah membuat beberapa
container dalam satu server.
Sebagai contoh, bila kita ingin menjalankan lebih dari satu web server, pada konfigurasi tradisional, kita akan menggunakan Apache atau Nginx web server dengan memasang lebih dari satu virtual host, pada server yang sama. Namun dengan Linux container, maka setiap web server dapat berjalan pada masing – masing container. Dengan menggunakan Linux container, maka kita dapat melakukan pengelompokan dan isolasi terhadap aplikasi dan dependensinya, tanpa mengganggu sistem secara keseluruhan.
LXD mengijinkan kita untuk membuat dan mengatur container ini. LXD menyediakan sebuah hypervisor untuk mengatur keseluruhan life cycle dari container tersebut. Pada tutorial kali ini kita akan melakukan konfigurasi LXD dan memanfaatkan container di dalam nya untuk menjalankan sebuah web server sederhana menggunakan NGINX. Lalu kita akan mengarahkan trafik web ke container tersebut untuk memastikan website dalam container itu dapat diakses dari luar.
Ganti user pepda dengan user anda sendiri. Log out lalu re-log in kembali untuk mendapatkan perubahan dari perintah di atas. Setelah ini user kita akan dapat mengonfigurasi LXD.
Sekarang kita ubah storage backend. Yang direkomendasikan LXD adalah menggunakan sistem kakas ZFS. Untuk menggunakannnya kita harus memasang zfsutils terlebih dahulu.
Lalu sekarang anda dapat mengonfigurasi LXD
Kita akan di prompt untuk menentukan storage backend. Selepasnya, kita dapat mengonfigurasi hal lain seperti networking. Pertama – tama, kita harus memilih dir atau zfs. Pada opsi dir, LXD akan disimpan di dalam directory / folder pada server filesystem. Sedangkan pada opsi zfs akan menggunakan ZFS filesystem yang dikombinasi dengan LVM (logical volume manager).
Kita akan menggunakan zfs, dengan opsi ini, kita akan mendapatkan efisiensi dari storage dan sistem yang lebih responsif. Contohnya, ketika kita membuat 10 container dengan image yang sama, maka semuanya akan menggunakan disk space dari sebuah container image yang sama. Kemudian, hanya perubahan awal saja yang akan disimpan di storage backend.
Setelah memilih zfs, kita akan diminta untuk membuat ZFS pool yang baru dan namanya
Lalu kita akan diminta untuk memilih menggunakan block device yang ada atau tidak
Jika kita jawab yes maka kita harus memilih device yang mana. Sebaliknya, jika tidak adalah jawabannya, maka LXD akan menggunakan preallocated file. Dengan opsi ini maka kita akan menggunakan free space pada server itu sendiri.
Kemudian kita akan mengonfigurasi network bridge untuk LXD containers, dengan begitu maka :
Maka kita akan mendapatkan output seperti ini
karena ini pertama kalinya kita menggunakan lxc command untuk berkomunikasi dengan LXD, maka output akan memberitahukan kita secara otomatis untuk membuat container pertama kita. Membuat container pertama :
Kita juga dapat mengubah versi ubuntu 16.04 ke versi lain, atauh bahkan menggunakan distro lain untuk image container kita. Gunakan perintah "lxc image list images:" atau perintah "lxc image list ubuntu:" untuk mencari versi lain image ubuntu.
Sekarang coba ketikkan perintah "lxc list"
"--" yang pertama menandakan parameter perintah lxc harus stop di sini. Perintah sebenarnya hanyalah "sudo --login --user ubuntu". Jika ingin masuk sebagai root maka gunakan perintah ini:
Lalu pasang dan konfigurasi Nginx dengan langkah berikut ini :
Ubah default web page pada site ini, tambahkan beberapa text agar menandakan bahwa site ini di-host pada myserver container. Buka "/var/www/html/index.nginx-debian.html".
Ubahlah menjadi seperti ini:
Simpan dengan ":x" dan ketikkan " logout" untuk keluar dari sesi user. Gunakan curl untuk menguji apakah container bekerja seperti harapan atau tidak. Temukan IP pada lxc list :
Outputnya harusnya seperti pada teks html yang kita edit tadi di atas.
Untuk melihat hasilnya
Setelah ini seharusnya myserver container tadi di atas, dapat diakses menggunakan IP Address server atau komputer tempat host dari LXD ini.
Untuk menyimpan / memastikan rule iptables tidak hilang saat restart, pasang "iptables-persistent"
Untuk men-stop dan menghapus container gunakan perintah ini
Untuk menghapus rule iptables gunakan perintah ini
Misalkan outputnya seperti ini
Hapus rule di atas
Simpan konfigurasi dengan mengetikkan ini (agar rule di atas tidak kembali ada lagi ketika mesin di restart)
Itulah bagaimana langkah konfigurasi container, nginx container, dan iptables. Jika masih ada yang kurang jelas bisa langsung ditanyakan melalui komentar dibawah. Terima kasih sudah berkunjung :)
Sebagai contoh, bila kita ingin menjalankan lebih dari satu web server, pada konfigurasi tradisional, kita akan menggunakan Apache atau Nginx web server dengan memasang lebih dari satu virtual host, pada server yang sama. Namun dengan Linux container, maka setiap web server dapat berjalan pada masing – masing container. Dengan menggunakan Linux container, maka kita dapat melakukan pengelompokan dan isolasi terhadap aplikasi dan dependensinya, tanpa mengganggu sistem secara keseluruhan.
LXD mengijinkan kita untuk membuat dan mengatur container ini. LXD menyediakan sebuah hypervisor untuk mengatur keseluruhan life cycle dari container tersebut. Pada tutorial kali ini kita akan melakukan konfigurasi LXD dan memanfaatkan container di dalam nya untuk menjalankan sebuah web server sederhana menggunakan NGINX. Lalu kita akan mengarahkan trafik web ke container tersebut untuk memastikan website dalam container itu dapat diakses dari luar.
1. Konfigurasi LXD
LXD sudah terpasang pada Ubuntu, tapi butuh dikonfigurasi untuk bekerja secara optimal dan benar. Kita harus mengonfigurasi user untuk mengatur container. Lalu mengatur tipe storage backend untuk menyimpan container dan mengonfigurasi networking-nya. Tambahkan user untuk grup lxd :sudo usermod --append --groups lxd pepda
Ganti user pepda dengan user anda sendiri. Log out lalu re-log in kembali untuk mendapatkan perubahan dari perintah di atas. Setelah ini user kita akan dapat mengonfigurasi LXD.
Sekarang kita ubah storage backend. Yang direkomendasikan LXD adalah menggunakan sistem kakas ZFS. Untuk menggunakannnya kita harus memasang zfsutils terlebih dahulu.
sudo apt update
sudo apt install zfsutils-linux
Lalu sekarang anda dapat mengonfigurasi LXD
sudo lxd init
Kita akan di prompt untuk menentukan storage backend. Selepasnya, kita dapat mengonfigurasi hal lain seperti networking. Pertama – tama, kita harus memilih dir atau zfs. Pada opsi dir, LXD akan disimpan di dalam directory / folder pada server filesystem. Sedangkan pada opsi zfs akan menggunakan ZFS filesystem yang dikombinasi dengan LVM (logical volume manager).
Kita akan menggunakan zfs, dengan opsi ini, kita akan mendapatkan efisiensi dari storage dan sistem yang lebih responsif. Contohnya, ketika kita membuat 10 container dengan image yang sama, maka semuanya akan menggunakan disk space dari sebuah container image yang sama. Kemudian, hanya perubahan awal saja yang akan disimpan di storage backend.
Name of the storage backend to use (dir or zfs) [default=zfs]: zfs
Setelah memilih zfs, kita akan diminta untuk membuat ZFS pool yang baru dan namanya
Create a new ZFS pool (yes/no) [default=yes]? yes
Name of the new ZFS pool [default=lxd]: lxd
Lalu kita akan diminta untuk memilih menggunakan block device yang ada atau tidak
Would you like to use an existing block device (yes/no) [default=no]?
Jika kita jawab yes maka kita harus memilih device yang mana. Sebaliknya, jika tidak adalah jawabannya, maka LXD akan menggunakan preallocated file. Dengan opsi ini maka kita akan menggunakan free space pada server itu sendiri.
2. Konfigurasi Networking
Setelah mengonfigurasi storage backend, anda akan diminta mengonfigurasi networking pada LXD. Pertama, LXD akan menanyakan apakah container anda dapat diakses melalui network. Jika memilih yes maka akan mengijinkan kita untuk mengatur LXD dari komputer lain.Would you like LXD to be available over the network (yes/no) [default=no]? no
Kemudian kita akan mengonfigurasi network bridge untuk LXD containers, dengan begitu maka :
- Setiap container akan mendapatkan IP secara otomatis (DHCP)
- Container dapat berkomunikasi satu sama lain melalui private network
- Setiap container dapat terhubung ke internet (jika komputer anda terhubung internet juga)
- Container yang kita buat tetap tidak dapat diakses melalui komputer lain kecuali anda mengijinkannya.
- Saat ditanya ini, jawab yes
Do you want to configure the LXD bridge (yes/no) [default=yes]? yes
- Beri nama bridge tersebut dan pilih default value saja
- Pilih ipv4, biarkan menggunakan subnet secara random.
- Saat ditanyai valid IPv4 address, pilih default value.
- Saat ditanyai CIDR mask, pilih default value.
- Saat ditanya DHCP address yang pertama, pilih default value.
- Pilih Yes ketika ditanyai NAT untuk IPv4 traffic.
- Tak perlu setup IPv6 dulu, pilih no saja.
Warning: Stopping lxd.service, but it can still be activated by:
lxd.socket
LXD has successfully configured
3. Membuat Container
Selepas mengonfigurasi LXD, maka kita dapat membuat LXD container kita yang pertama. Untuk melihat daftar container gunakan perintah listlxc list
Maka kita akan mendapatkan output seperti ini
Generating a client certificate. This may take a minute...
If this is your first time using LXD, you should also run: sudo lxd init
To start your first container, try: lxc launch ubuntu:16.04
+------+-------+------+------+------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+------+-------+------+------+------+-----------+
karena ini pertama kalinya kita menggunakan lxc command untuk berkomunikasi dengan LXD, maka output akan memberitahukan kita secara otomatis untuk membuat container pertama kita. Membuat container pertama :
lxc launch ubuntu:16.04 myserver
Kita juga dapat mengubah versi ubuntu 16.04 ke versi lain, atauh bahkan menggunakan distro lain untuk image container kita. Gunakan perintah "lxc image list images:" atau perintah "lxc image list ubuntu:" untuk mencari versi lain image ubuntu.
Generating a client certificate. This may take a minute...
If this is your first time using LXD, you should also run: sudo lxd init
To start your first container, try: lxc launch ubuntu:16.04
Creating webserver
Retrieving image: 100%
Starting webserver
Sekarang coba ketikkan perintah "lxc list"
+-----------+---------+-----------------------+------+------------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+-----------+---------+-----------------------+------+------------+-----------+
| myserver | RUNNING | 10.10.10.100 (eth0) | | PERSISTENT | 0 |
+-----------+---------+-----------------------+------+------------+-----------+
4. Konfigurasi Nginx Container
Untuk masuk ke dalam container gunakan perintah ini:lxc exec myserver -- sudo --login --user ubuntu
"--" yang pertama menandakan parameter perintah lxc harus stop di sini. Perintah sebenarnya hanyalah "sudo --login --user ubuntu". Jika ingin masuk sebagai root maka gunakan perintah ini:
lxc exec myserver -- /bin/bash
Lalu pasang dan konfigurasi Nginx dengan langkah berikut ini :
sudo apt update
sudo apt install nginx
Ubah default web page pada site ini, tambahkan beberapa text agar menandakan bahwa site ini di-host pada myserver container. Buka "/var/www/html/index.nginx-debian.html".
sudo vim /var/www/html/index.nginx-debian.html
Ubahlah menjadi seperti ini:
<!DOCTYPE html>
<html>
<head>
<title>Selamat datang pada NGINX di myserver container!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Selamat datang pada NGINX di myserver container!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
...
Simpan dengan ":x" dan ketikkan " logout" untuk keluar dari sesi user. Gunakan curl untuk menguji apakah container bekerja seperti harapan atau tidak. Temukan IP pada lxc list :
curl http://10.10.10.100/
Outputnya harusnya seperti pada teks html yang kita edit tadi di atas.
5. Melakukan forwarding Incoming Connection ke Nginx (myserver) container
Cukup dengan menggunakan IPTABLES untuk memanipulasi request yang datang ke komputer kita.PORT=80 PUBLIC_IP=ip_komputer/server_kita CONTAINER_IP=10.10.10.100 sudo -E bash -c 'iptables -t nat -I PREROUTING -i eth0 -p TCP -d $PUBLIC_IP --dport $PORT -j DNAT --to-destination $CONTAINER_IP:$PORT -m comment --comment "forwarding ke Nginx"'
Untuk melihat hasilnya
sudo iptables -t nat -L PREROUTING
Setelah ini seharusnya myserver container tadi di atas, dapat diakses menggunakan IP Address server atau komputer tempat host dari LXD ini.
Untuk menyimpan / memastikan rule iptables tidak hilang saat restart, pasang "iptables-persistent"
sudo apt install iptables-persistent
Untuk men-stop dan menghapus container gunakan perintah ini
lxc stop myserver
lxc delete myserver
Untuk menghapus rule iptables gunakan perintah ini
sudo iptables -t nat -L PREROUTING --line-numbers
Misalkan outputnya seperti ini
Chain PREROUTING (policy ACCEPT)
num target prot opt source destination
1 DNAT tcp -- anywhere your_server_ip tcp dpt:http /* forwarding ke Nginx*/ to:your_container_ip
Hapus rule di atas
sudo iptables -t nat -D PREROUTING 1
Simpan konfigurasi dengan mengetikkan ini (agar rule di atas tidak kembali ada lagi ketika mesin di restart)
sudo netfilter-persistent save
Itulah bagaimana langkah konfigurasi container, nginx container, dan iptables. Jika masih ada yang kurang jelas bisa langsung ditanyakan melalui komentar dibawah. Terima kasih sudah berkunjung :)
0 Response to "Konfigurasi dan Penggunaan Linux Container dengan LXD di Ubuntu 16.04"
Post a Comment