Halo teman-teman tech enthusiasts! Minggu lalu, kami memutuskan untuk melakukan sebuah eksperimen gila: menantang diri kami sendiri untuk membangun infrastruktur DevSecOps lengkap yang benar-benar siap untuk tahap produksi dalam waktu hanya 48 jam.

Kami tidak berbicara tentang proyek “mainan” dengan satu pod Nginx sederhana. Kami membangun ekosistem nyata—sebuah multi-node Kubernetes cluster yang dilengkapi dengan sistem GitOps, manajemen rahasia tingkat lanjut, observabilitas penuh, dan alur kerja otomatis. Ini adalah jenis setup yang biasanya dikerjakan oleh tim besar selama berminggu-minggu, tapi kami ingin melihat sejauh mana kami bisa melangkah di bawah tekanan waktu.

Mengapa Kami Melakukannya?

Kami mengamati adanya jurang besar antara apa yang diajarkan di tutorial DevOps dasar dengan ekspektasi perusahaan terhadap senior engineer. Banyak lowongan kerja meminta “pengalaman Kubernetes produksi,” namun sangat sulit mendapatkan pengalaman itu tanpa terjun langsung ke masalah yang berantakan.

Kami ingin membuktikan bahwa pemahaman mendalam lahir dari kesulitan. Kami ingin merancang, melakukan debugging pada networking yang kompleks, dan menyatukan berbagai komponen hingga kami bisa berkata: “Kami paham cara kerja mesin di bawah kap mobil ini.” Fokus kami bukan hanya hasil akhir, tapi memahami Infrastructure as Code (IaC), manajemen konfigurasi, dan keamanan data secara holistik.

Arsitektur yang Kami Bangun

Untuk mensimulasikan lingkungan produksi yang nyata, kami memilih tumpukan teknologi berikut:

  • Infrastruktur Layer: Kami menggunakan Terraform untuk memprakarsai tiga instans EC2 di AWS (satu master, dua workers) di dalam private subnet dengan akses bastion host untuk keamanan maksimal.
  • Cluster Layer: Kubernetes diinstal secara manual menggunakan kubeadm (bukan layanan terkelola seperti EKS) untuk memahami siklus hidup klaster. Kami menggunakan Calico untuk pod networking dan MetalLB untuk mensimulasikan load balancer di lingkungan bare-metal.
  • Platform Layer: Traefik bertindak sebagai ingress controller, didampingi cert-manager untuk otomatisasi sertifikat TLS. Untuk keamanan data, kami menggunakan HashiCorp Vault yang disinkronkan ke Kubernetes melalui External Secrets Operator.
  • Delivery & Monitoring: ArgoCD mengelola alur GitOps, sementara Prometheus dan Grafana memastikan kami memiliki visibilitas penuh terhadap kesehatan sistem.

Suka Duka Selama 48 Jam

1. Masalah Sumber Daya: Fondasi yang Goyah (Jam 1-4)

Awalnya, kami merasa percaya diri menggunakan instans t3.small untuk menghemat biaya. Namun, saat menjalankan kubeadm init, klaster kami mengalami silent failure. API Server tidak merespons dan sistem terasa sangat lambat.

Setelah menyelidiki log sistem, kami menemukan bahwa Kubernetes memiliki persyaratan sumber daya minimum yang tidak bisa dinegosiasikan. Master node membutuhkan setidaknya 2GB RAM untuk beroperasi stabil. Kami segera melakukan upgrade ke instans t3.medium, dan seketika klaster kami hidup kembali. Pelajaran: Dalam infrastruktur, jangan pernah meremehkan spesifikasi minimum. Infrastruktur yang murah di awal bisa menjadi sangat mahal dalam waktu debugging.

2. Labirin Jaringan: Mimpi Buruk Networking (Jam 5-12)

Setelah klaster berjalan, kami mencoba mengekspos layanan melalui Traefik. Namun, setiap permintaan HTTP yang kami kirim hanya berakhir dengan status hanging tanpa pesan kesalahan. Enam jam berikutnya kami habiskan di terminal untuk melakukan trace pada paket data.

Kami menemukan bahwa masalahnya berlapis: Traefik dikonfigurasi hanya untuk mendengarkan port HTTPS (websecure), sementara kami mengirimkan permintaan HTTP biasa. Selain itu, Ingress kami merujuk pada TLS secret yang belum dibuat, sehingga Traefik memilih untuk diam daripada melaporkan eror secara eksplisit di frontend. Pelajaran: Jika sesuatu tidak merespons di Kubernetes, periksa log controller-nya terlebih dahulu, bukan hanya status pod-nya.

3. Secrets yang Menolak Sinkronisasi (Jam 13-18)

HashiCorp Vault adalah standar industri, tapi konfigurasinya cukup menantang. Kami berhasil menginstal Vault, namun External Secrets Operator terus melaporkan status sukses padahal secret di Kubernetes tetap kosong.

Ternyata, pada Vault KV v2, terdapat perbedaan antara path yang kita lihat di UI dengan path API aslinya. API membutuhkan tambahan segmen /data/ (misalnya: secret/data/myapp). Setelah kami menyesuaikan manifest YAML kami, data rahasia mulai mengalir lancar ke dalam aplikasi. Pelajaran: Jangan terpaku pada tampilan UI; selalu verifikasi dokumentasi API dari alat yang Anda gunakan.

4. Keajaiban GitOps: Efisiensi Tanpa Batas (Jam 19-30)

Momen terbaik terjadi saat ArgoCD mulai berjalan. Setelah kami mengatasi masalah akses melalui SSH tunneling (karena klaster berada di subnet pribadi), kami mencoba mengubah tag gambar aplikasi di repositori Git.

Dalam hitungan detik, ArgoCD mendeteksi perbedaan, menarik perubahan, dan melakukan rolling update secara otomatis. Tidak ada lagi perintah kubectl apply -f. Hanya git push, dan biarkan sistem bekerja. Ini adalah puncak dari otomatisasi yang kami impikan.

5. Monitoring yang Terlupakan (Jam 31-40)

Kami menyadari bahwa memiliki sistem canggih tanpa pengawasan adalah tindakan berisiko. Kami menginstal stack Prometheus, namun dashboard Grafana untuk Traefik tetap kosong. Masalahnya? Prometheus Operator membutuhkan label khusus pada ServiceMonitor agar ia tahu bahwa layanan tersebut harus dipantau.

Tanpa label release: prometheus, operator tersebut mengabaikan semua metrik dari Traefik. Begitu label ditambahkan, grafik metrik langsung bermunculan, memberikan kami data request per second dan error rate secara real-time.

Apa yang Kami Pelajari?

Jika kami harus mengulang maraton ini, ada beberapa strategi yang akan kami ubah:

  1. Observabilitas adalah Prioritas: Seharusnya kami membangun sistem monitoring di jam-jam pertama. Sulit untuk memperbaiki mesin jika kita tidak bisa melihat apa yang terjadi di dalamnya.
  2. Uji Isolasi: Kami sempat mencoba menggabungkan terlalu banyak komponen sekaligus. Akan jauh lebih cepat jika setiap bagian (seperti Vault atau Ingress) diuji secara mandiri sebelum diintegrasikan.
  3. Log adalah Sahabat Terbaik: Jangan menebak-nebak. Setiap kegagalan di Kubernetes hampir selalu meninggalkan jejak di log controller terkait.

Kesimpulan Akhir

Membangun ini semua dalam 48 jam sangatlah melelahkan, menguras pikiran, tapi luar biasa memuaskan! Kami sekarang benar-benar memahami mengapa alat-alat ini ada. Kami paham nilai Vault karena kami merasakan sulitnya mengelola rahasia secara manual. Kami menghargai ArgoCD karena kami tahu betapa berisikonya perubahan manual di klaster.

Buat teman-teman yang ingin mendalami dunia DevOps, kami sangat menyarankan untuk berhenti sejenak dari menonton tutorial dan mulailah membangun sesuatu yang ambisius. Tetapkan tenggat waktu, hadapi masalahnya, dan belajarlah dari setiap eror yang muncul. Itulah cara terbaik untuk menjadi ahli.

Seluruh kode, manifest, dan konfigurasi yang kami gunakan tersedia di repositori kami untuk kalian pelajari atau jadikan referensi: github.com/NanaGyamfiPrempeh30/k8s-devsecops

About the Author

Dzul Qurnain

Suka nonton Anime, ngoding dan bagi-bagi tips kalau tahu.. Oh iya, suka baca ( tapi yang menarik menurutku aja)... Praktisi WordPress, web development, SEO, dan server administration yang membagikan tutorial teknis dan catatan implementasi nyata.

View All Articles