Back to IF4054 Pengoperasian Sistem Perangkat Lunak
Terraform, Kubernetes and Kyverno in Practice
Questions/Cues
- Bagaimana Terraform mem-provision resource Kubernetes?
- Seperti apa Deployment yang aman di cluster lokal?
- Bagaimana Kyverno dipasang dan diverifikasi?
- Apa deliverable milestone dan pitfall yang harus dihindari?
Reference Points
- IF4054 IaC & Cluster Security (Slides 30-39)
Terraform: Provisioning Deklaratif
Terraform memakai HCL untuk mendeskripsikan resource; CLI melakukan plan dan apply terhadap sebuah provider (plugin yang menerjemahkan blok resource ke panggilan API platform target: AWS, GCP, Kubernetes, dll.). Workflow write, plan, apply identik baik untuk VM cloud maupun namespace Kubernetes.
Contoh pada slide: resource
kubernetes_namespacebernamarps-week3bersamakubernetes_resource_quota(requests.cpu = 2,requests.memory = 4Gi). Terraform memahami dependency otomatis dari referensikubernetes_namespace.app.metadata[0].name;planmenampilkan keduanya sebagai “to be created”, dan menghapus blok lalu apply meruntuhkan persis kedua resource itu.Kubernetes Lokal
kind create clusteratauminikube startmemberi API Kubernetes lokal yang disposable;kubectl apply -f deployment.yamlmengirim deklarasi ke API server. Deployment contoh (rps-api, 3 replika, imagemyapp:sha256-9f3a) menyertakansecurityContext.runAsNonRoot: true, persyaratan yang sama yang kelak ditegakkan Kyverno sebagai policy.Kyverno: Instalasi dan Verifikasi
- Dipasang sebagai kumpulan controller di dalam cluster (
kubectl apply -fatau Helm).- Mendaftarkan diri sebagai validating/mutating webhook; setiap
kubectl applyberikutnya melewatinya.kubectl get clusterpoliciesmenampilkan policy aktif;kubectl describepada resource yang ditolak menunjukkan policy mana yang memblokir.- Policy dapat diuji lokal terhadap manifest contoh sebelum ditegakkan cluster-wide, mirip dry-run di CI.
Arsitektur End-to-End
flowchart TD TF["Terraform<br/>provision namespace"] --> K["Cluster Kind/Minikube"] IMG["Image ter-scan<br/>dari pipeline CI"] --> D["Deployment<br/>runAsNonRoot"] D --> K KY["Kyverno ClusterPolicy<br/>require-non-root"] --> KMilestone: Provisioning and Cluster Policy
Provision cluster lokal dan namespace via Terraform, deploy image hasil pipeline minggu sebelumnya dengan Deployment, lalu definisikan dan tegakkan minimal satu Kyverno ClusterPolicy (non-root sebagai baseline). Deliverable: deployment berjalan di namespace tersebut, plus demonstrasi manifest tak patuh yang ditolak Kyverno.
Pitfall dan Anti-Pattern
- Manual cluster drift —
kubectl editpada resource live membatalkan inti IaC.- Unlocked shared state — apply tanpa remote state locking memicu race condition antar-anggota tim.
- ClusterRole terlalu luas —
cluster-admin“agar tidak terblokir” merusak least privilege secara permanen.- Audit-only forever — policy Audit tanpa pernah ke Enforce hanya mencatat, tidak memblokir.
Terraform (HCL, provider, plan/apply) dapat mem-provision resource Kubernetes seperti namespace dan quota secara deklaratif. Di cluster lokal (Kind/Minikube), Deployment berisi
runAsNonRootdan Kyverno (webhook admission) menolak manifest tak patuh. Milestone-nya menggabungkan ketiganya dengan image dari pipeline CI. Hindari drift manual, state tanpa lock, ClusterRole terlalu luas, dan policy Audit selamanya.
Additional Information
GitOps Mengatasi Drift
Pitfall manual cluster drift diatasi dengan GitOps (Argo CD/Flux) yang terus merekonsiliasi cluster dari Git — dibahas pada payung Release Engineering and Delivery.
Proyek Eksplorasi Mandiri
- Selesaikan milestone: namespace via Terraform, Deployment image Anda, dan satu policy Kyverno; dokumentasikan keluaran penolakan manifest root.
Bacaan Lanjutan
- Terraform Registry — Kubernetes provider.
- Google SRE Book — Bab 8 (Release Engineering).