Kategori: DevOps
Seiring dengan metode pengembangan agile, system administration juga dituntut untuk berevolusi secara cepat. Hal ini yang menyebabkan lahirnya apa yang disebut sebagai DevOps. Kategori ini digunakan untuk semua artikel yang berhubungan dengan DevOps seperti Docker, Jenkins, Travis dan Continous Integration / Continous Delivery lainnya. Selain itu, artikel yang sebelumnya masuk dalam bidang system administration seperti konfigurasi aplikasi dan tuning database juga ikut dikelompokkan dalam kategori ini.
Menggunakan IP Yang Sama Untuk Beberapa Service TCP Berbeda
11 September 2022Di Kubernetes, terdapat Ingress yang dapat dipakai untuk mempublikasikan beberapa Service berbeda melalui satu IP yang sama. Akan tetapi, sintaks Ingress hanya bekerja pada lapisan HTTP(S) dimana ia melakukan pemetaan ke Service berdasarkan path di URL. Namun, ada kalanya layanan non-HTTP juga perlu dipublikasikan. Layanan TCP/UDP non-HTTP tidak mengenal konsep URL yang hanya ada di aplikasi web. Lalu, bagaimana bila ingin melakukan hal yang sama seperti di Ingress tetapi pemetaan dilakukan berdasarkan nomor port?
Kategori: DevOps Tags: Kubernetes
Belajar Melakukan Application Security Testing
01 March 2022Saat mendengar istilah “keamanan komputer”, biasanya yang berada dalam bayangan adalah hacking. Namun kini keamanan komputer sudah berubah menjadi industri dimana banyak vendor berlomba-lomba menawarkan produk keamanan mereka. Sepertinya security engineer akan lebih banyak menghabiskan waktu memilih produk keamanan untuk dipakai (atau berbicara dengan sales produk keamanan) ketimbang berada di situasi hacking yang menegangkan seperti di film aksi Hollywood :) Sama seperti di industri lainnya, cyber security juga punya terminologi sendiri. Sebagai contoh, tool untuk menguji keamanan aplikasi biasanya dikategorikan menjadi:
Menerapkan Isolasi Aplikasi Untuk Tenant Dengan Namespace Di Kubernetes
14 February 2022Pada suatu hari, anggap saja ada dua perusahaan fiktif dengan nama perusahaan1
dan perusahaan2
yang ingin memakai aplikasi latihan-k8s. Mereka selanjutnya akan disebut sebagai tenant. Setiap tenant akan mendaftarkan beberapa user dengan hak akses berbeda. Tentu saja mereka juga tidak ingin data mereka diakses oleh tenant lain. Salah satu solusi yang umum ditempuh untuk hal ini adalah dengan menerapkan multitenancy pada aplikasi. Ini bisa jadi membutuhkan perubahan cukup besar pada kode program bila tidak didukung dari awal pada saat dirancang. Selain itu, bila masing-masing tenant menginginkan fitur yang bertolak belakang di kemudian hari, akan cukup sulit mengelolanya di satu program yang sama. Sebagai alternatif multitenancy, saya akan mencoba menggunakan fitur namespace di Kubernetes untuk men-deploy aplikasi yang sama dengan URL berbeda yang sama sekali tidak berhubungan satu sama lainnya. Penerapan GitOps akan membantu mempermudah proses inisialisasi namespace untuk tenant.
Kategori: DevOps Tags: Kubernetes
Melakukan Validasi JWT Melalui Kong Ingress Controller
22 January 2022Pada latihan-k8s, saya menangani authentication di aplikasi Spring Boot dengan menggunakan Spring Security. Saya kemudian membuat service baru, sebuah aplikasi Python, di artikel sebelumnya. Salah satu masalah keamanan pada service baru tersebut adalah endpoint-nya tidak melakukan validasi JWT sehingga bisa diakses oleh siapa saja. Saya bisa saja menggunakan library seperty PyJWT untuk menambahkan validasi JWT. Namun, daripada setiap kali membuat service baru harus menangani JWT, akan lebih elegan bila validasi JWT dapat langsung dilakukan dari Ingress Controller. Kelebihannya adalah saya dapat melakukan konfigurasi di satu tempat yang sama tanpa harus mengubah kode program aplikasi (misalnya untuk mematikan authentication, cukup mengubah Ingress controller).
Kategori: DevOps Tags: Kubernetes
Memakai Persistent Volume Di Kubernetes
10 January 2022Saat sebuah pod di-restart, seluruh perubahan di dalam container-nya akan hilang. Ini tidak menjadi masalah untuk service yang stateless seperti stock-item-service yang hanya mengerjakan aksi seperti validasi dan membaca/menyimpan data di database MongoDB dan Elasticsearch. Setelah service tersebut di-restart, ia tetap akan bekerja dengan baik (dengan memory yang ‘segar’). Namun, bagaimana dengan service lain seperti database atau service yang menangani file yang di-upload oleh pengguna? File-file yang sudah ditulis tentu saja tidak boleh hilang saat pod di-restart.
Kategori: DevOps Tags: Kubernetes Python
Melakukan Load Testing Dengan Locust
08 January 2022Bila bicara soal load testing, yang terbayang dalam kepala saya adalah Apache JMeter. Namun kali ini saya akan mencoba sebuah tool baru yang disebut Locust. Salah satu perbedaan utamanya adalah definisi tugas pengujian JMeter dilakukan melalui UI sementara definisi pengujian Locust ditulis melalui kode program Python. Mana yang sebenarnya lebih mudah dan intuitif? Secara logika, seharusnya JMeter, bukan? Tapi entah mengapa saya merasa banyak yang butuh waktu untuk mempelajari UI JMeter sebelum bisa mulai bekerja dengannya. Sementara itu, karena skenario Locust adalah kode program Python, pembuat skenario bisa copy paste dan menerapkan teknik pemograman yang sudah biasa mereka pakai.
Memakai Job Di Kubernetes
02 January 2022Job adalah sebuah resource di Kubernetes yang dipakai untuk mengerjakan sebuah tugas hingga selesai. Berbeda dengan Service yang selalu hidup, begitu tugas Job selesai, pod yang berkaitannya dengannya akan dimatikan. Dengan demikian, Job cocok untuk pekerjaan infrastruktur yang konsisten namun hanya perlu dilakukan sesekali saja seperti backup dan restore database. Sebagai latihan, saya akan membuat sebuah Job untuk melakukan konfigurasi Keycloak seperti membuat realm, client dan user baru.
Kategori: DevOps Tags: Kubernetes
Memakai FSCrawler Untuk Mencari Teks Di Gambar
30 December 2021John adalah seorang hacker yang belakangan ini sangat tertarik pada Jessica. Selama beberapa bulan terakhir, dia membuat scraper, backdoor, dan memanfaatkan berbagai exploit lainnya untuk mendapatkan informasi mengenai Jessica. “Apa hobinya? Apa makanan yang dia suka? Apa warna favoritnya?” pikir John tanpa sadar bahwa obsesinya sudah melanggar privasi Jessica. Dia segera men-klik sebuah folder yang berisi seluruh informasi mengenai Jessica yang sudah dikumpulkannya selama setahun. Awalnya John penuh dengan rasa penasaran dan bahagia menelusuri setiap file gambar, video, PDF, dan dokumen lainnya satu per satu. Namun setelah 15 menit berlalu, John mengeluh, “Banyak sekali file-nya, tidak mungkin aku membuka satu per satu. Aku hanya ingin lihat yang penting saja.”
Kategori: DevOps Tags: SearchEngine Docker
Menerapkan GitOps Di Kubernetes Dengan kpt
28 December 2021GitOps adalah sebuah konsep dimana aplikasi yang di-deploy diwakili oleh sebuah repository Git. Perubahan pada infrastruktur harus dilakukan dengan menambahkan commit baru ke repository Git tersebut yang nantinya akan diaplikasikan ke server (infrastructure as code). Dengan demikian, seluruh riwayat perubahan pada infrastruktur dapat dilihat dari riwayat commit di repository. Salah satu hal penting di GitOps adalah tidak melakukan perubahan secara langsung ke server atau perubahan manual lainnya yang tidak terdokumentasikan di repository. Pada tulisan ini, saya akan menggunakan kpt untuk mempermudah menerapkan GitOps.
Kategori: DevOps Tags: Kubernetes
Memakai GitHub Actions dan Github Packages Untuk Mengelola Image Docker
24 December 2021Salah satu tugas yang umum dilakukan oleh DevOps engineer adalah mengotomatisasikan proses building kode program yang dibuat oleh programmer. Misalnya, saat ada commit baru di branch master
, Continuous Integration (CI) platform seperti Jenkins akan bekerja menghasilkan artifact yang dibuat dari kode program terbaru (misalnya file Jar/War untuk aplikasi Java, Python modules untuk aplikasi Python, dan sebagainya). Khusus untuk aplikasi yang dijalankan di cluster Kubernetes, artifact yang dihasilkan adalah sebuah image Docker yang biasanya dibuat berdasarkan isi file Dockerfile
. Pada tulisan ini, saya akan mencoba menggunakan Github Actions sebagai CI platform untuk menghasilkan image Docker dan mempublikasikannya di GitHub Packages sehingga dapat saya pakai di cluster Kubernetes nantinya. Kedua fitur tersebut dapat dipakai tanpa biaya dengan batas eksekusi 2.000 menit untuk GitHub Actions dan penyimpanan 500 MB untuk Github Packages.
Kategori: DevOps Tags: Docker Kubernetes
Memakai Ingress Controller Di Kubernetes
19 December 2021Pada tulisan sebelumnya, saya menggunakan IP publik untuk mengakses service melalui load balancer eksternal dengan menggunakan tipe LoadBalancer
. Kali ini, saya akan mencoba menggunakan ingress untuk mendapatkan lebih banyak kendali lagi. Seperti biasa, saya akan menggunakan minikube di komputer lokal. Kubernetes tidak dilengkapi dengan ingress controller sehingga langkah pertama adalah memilih salah satu ingress controller yang hendak dipakai. Kode program untuk ingress controller AWS, GCE dan NGINX secara resmi dikelola oleh tim Kubernetes; ada juga ingress controller lainnya dari pihak ketiga yang daftar selengkapnya dapat dijumpai di https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/#additional-controllers.
Kategori: DevOps Tags: Kubernetes
Pengalamatan Pod dan Service Di Kubernetes
17 December 2021Kubernetes bekerja pada sistem terdistribusi yang terdiri atas satu atau lebih server yang disebut node. Untuk mencobanya di komputer lokal, saya tidak perlu sampai membangun home networking. Saya bisa menggunakan minikube yang merupakan implementasi ringan dari Kubernetes yang memang ditujukan untuk dipakai di komputer lokal. Minikube dapat menggunakan hypervisor dan virtual machine untuk men-simulasi-kan node Kubernetes di komputer yang sama. Khusus untuk sistem operasi Linux, minikube juga dapat langsung menggunakan Docker untuk menciptakan node Kubernetes tanpa menggunakan VM. Walaupun konsep “memakai container Docker untuk menjalankan Kubernetes yang akan mengelola container Docker lainnya” terdengar rekursif, ia menawarkan kinerja yang lebih baik.
Kategori: DevOps Tags: Kubernetes
Memakai Python Dalam Docker Di PyCharm
05 February 2020Hari ini saya perlu bekerja kembali dengan tool CLI Python yang sudah lama tidak saya sentuh. Saya bahkan sudah tidak memiliki instalasi Python lagi di sistem operasi yang saya pakai. Apakah ada cara cepat untuk menjalankan script tersebut tanpa harus meng-install Python dan dependency-nya di sistem operasi saya? Walaupun Python memiliki Virtualenv untuk membatasi instalasi dependency ke proyek yang aktif, akan lebih menyenangkan bila saya menjalankannya di container. Tentu saja, saya membutuhkan IDE yang bisa memakai Python di dalam container Docker dan tetap bisa mendeteksi dependency yang ter-install di dalam container tersebut. Salah satu IDE dengan fasilitas tersebut adalah PyCharm.
Mengoptimalkan MySQL untuk integration testing
17 November 2018Pada saat pertama kali bekerja di dunia IT dan mempelajari Oracle Database, saya mendapatkan nasehat: “Tidak ada satu database tunggal yang bekerja dengan baik di semua jenis aplikasi. Untuk itu, database perlu dioptimalkan oleh database administrator.” Sekarang, setelah lebih banyak bekerja di startup, saya jarang sekali menemukan peran database administrator lagi! Hal ini karena startup lebih berfokus pada membuat sebuah aplikasi seminimal mungkin (minimum viable product) dan segala sesuatu yang berada di cloud membuat programmer memiliki pola pikir ‘tinggal pakai saja’.