Apa sih Containerization itu?
Containerization itu sendiri adalah pendekatan dimana kita menjalankan multiple instances (containers) pada satu Operating System (OS) yang sama, dimana containers tersebut akan memiliki shared kernel.
Serupa dengan VM, dimana pada satu Host OS kita dapat menjalankan berbagai aplikasi lain yang terisolasi dari Host kita. Perbedaan utama antara virtualization dan containerization adalah pada virtualization kita menyalakan OS di dalam OS, sehingga secara resource dan performance akan lebih berat dibandingkan dengan containerization yang melakukan isolasi dari masing-masing aplikasi ke dalam virtual environment dengan shared kernel milik host. Tetapi bukan berarti virtualization adalah teknologi yang buruk, sebenarnya kedua teknologi tersebut memiliki tujuan yang sedikit berbeda. Kalau kita ingin memiliki environment yang sangat terisolasi satu sama lain, maka sebaiknya kita menggunakan VM. Apabila kita tidak perlu isolasi 100% maka containerization bisa menjadi pertimbangan.
Well sekilas sudah kita berbicara tentang arsitektur dan containerization, mari kita mulai membahas Docker. Docker adalah sebuah platform containerization yang sangat populer dan semakin populer. Docker memberikan kemudahan untuk menggunakan ataupun membangun 'isolated' environment untuk aplikasi. Penggunaan containerization dapat membantu kita dalam memahami konsep microservices, dimana satu container hanya untuk satu fungsi saja.
Bagaimana penggunaan Docker itu sendiri?
Docker dapat kita jalankan melalui terminal dengan command yang cukup sederhana, seperti pada gambar berikut.
Menyalakan dan mematikan sebuah container dapat dilakukan dengan command 'start' dan 'stop' melalui command line, demikian juga untuk melihat informasi container apa saja yang sedang berjalan dengan command 'docker ps'.
Untuk memulai menggunakan Docker pun sesederhana melakukan download dan install docker, kemudian Docker dapat digunakan melalui command line. Serupa dengan virtualization yang membuat VM melalui image dari OS, containerization pada docker pun membutuhkan image untuk dapat menyalakan sebuah containers. Sebagai contoh, untuk dapat menjalankan 'docker start mysql' kita perlu memiliki image dari container tersebut terlebih dahulu, bisa melalui Docker Hub ataupun membuatnya sendiri dengan menggunakan Dockerfile. Setelah memiliki image terkait, kita bisa menjalankannya dengan menggunakan perintah 'docker run', dimana pada momen tersebut kita dapat melakukan berbagai konfigurasi seperti port forwarding, pemberian nama untuk container yang dibuat, bahkan melakukan pengaturan environment variable dari container tersebut.
Tantangan Keamanan Kontainer Mulai Dengan Kurangnya Visibilitas
Meskipun ada banyak keuntungan untuk pindah ke virtualisasi melalui container, arsitek harus mengatasi tantangan dan risiko terkait dalam enam bidang berikut:
- Sumber Daya yang Dibagikan . Aplikasi dalam container berbagi banyak sumber daya termasuk (1) sumber daya khusus container termasuk container, mesin container, dan kernel OS, (2) virtualisasi oleh sumber daya VM termasuk mesin virtual, hypervisor, dan sistem operasi host jika menggunakan tipe- 2 hypervisor, dan (3) sumber daya pemrosesan multicore termasuk (a) sumber daya prosesor-internal (cache L3, bus sistem, pengontrol memori, pengontrol I / O, dan interkoneksi) dan (b) sumber daya prosesor-eksternal (memori utama, I / O perangkat, dan jaringan). Sumber daya bersama tersebut menyiratkan (1) titik kegagalan tunggal, (2) dua aplikasi yang berjalan dalam container yang sama dapat saling mengganggu, dan (3) perangkat lunak yang berjalan dalam satu wadah dapat memengaruhi perangkat lunak yang berjalan di wadah lain (yaitu, gangguan dapat melanggar isolasi spasial dan temporal).
- Analisis Gangguan . Sumber daya bersama menyiratkan gangguan. Virtualisasi melalui container meningkatkan kesulitan analisis gangguan temporal (misalnya, memenuhi tenggat waktu waktu) dan cenderung membuat perkiraan waktu yang dihasilkan terlalu konservatif. Analisis interferensi menjadi lebih kompleks karena jumlah kontainer meningkat dan virtualisasi melalui container dikombinasikan dengan virtualisasi melalui VM dan pemrosesan multicore. Jumlah jalur interferensi meningkat dengan cepat seiring dengan meningkatnya jumlah kontainer. Sejumlah besar jalur gangguan yang dihasilkan biasanya membuat analisis lengkap dari semua jalur tersebut menjadi tidak mungkin. Ini, pada gilirannya, memaksa arsitek untuk memilih hanya jalur pemilihan representatif yang relatif kecil.
Gambar berikut menunjukkan tiga contoh jalur gangguan di mana komponen dengan label merah adalah sumber daya bersama: - Keselamatan . Meskipun container memberikan dukungan yang signifikan untuk isolasi, penggunaan container tidak menjamin isolasi. Gangguan temporal dapat menyebabkan keterlambatan yang menyebabkan tenggat waktu yang keras dan waktu nyata terlewatkan. Gangguan spasial dapat menyebabkan bentrokan memori. Apakah dengan VM atau container, akreditasi keselamatan tradisional dan proses sertifikasi dan kebijakan tidak memperhitungkan virtualisasi, membuat akreditasi keselamatan (kembali) dan (kembali) sertifikasi menjadi sulit.
- Keamanan . container tidak secara default aman dan membutuhkan kerja keras untuk membuatnya aman. Kita harus memastikan bahwa (1) tidak ada data yang disimpan di dalam container, (2) proses container dipaksa untuk menulis ke sistem file khusus container, (3) ruang nama jaringan container terhubung ke intranet pribadi, khusus, dan (4) ) hak istimewa layanan kontainer diminimalkan (misalnya, non-root jika memungkinkan). Seperti halnya keselamatan, proses dan kebijakan sertifikasi akreditasi keamanan tradisional dan tidak memperhitungkan virtualisasi, mempersulit keamanan (re) akreditasi dan (kembali) sertifikasi.
- Container Sprawl . Kontainer yang berlebihan relatif umum dan meningkatkan jumlah waktu dan upaya yang dihabiskan untuk manajemen wadah.
0 Komentar