Konfigurasi dan Penggunaan Linux Container dengan LXD di Ubuntu 16.04 - Open Source Lab -->

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.

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.
Setelah setup networking selesai, maka kita akan mendapatkan layar ini : 

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 list

lxc 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