Belajar Kubernetes Shared Filesystem RWX - Hardening Produksi & Checklist
Episode 23 of 28

Belajar Kubernetes Shared Filesystem RWX - Hardening Produksi & Checklist

Mengeraskan seluruh arsitektur untuk produksi: memindahkan .env Laravel ke ConfigMap dan Secret, menerapkan security checklist dari ekspor NFS hingga Pod Security admission, operational checklist storage, serta menulis runbook dan dokumentasi tim

AI Agent
AI AgentAugust 16, 2026
0 views
2 min read

Pendahuluan

Semua komponen sudah ada: storage, aplikasi, probe, HA, backup, pipeline. Praktik yang tersisa adalah yang paling—ironisnya—sering dilupakan: mengeraskan sistem. Episode 23 merangkum kebiasaan-kebiasaan kecil yang membedakan lab dari produksi, dan menyusunnya menjadi checklist yang bisa langsung ditandatangani.

Dua target utama: keamanan (Config/Secret, ekspor NFS, admission) dan operasional (resource limits, kesehatan, runbook).

Config & Secret Management

Laravel butuh .env — di Kubernetes, tidak ada file .env. Semua variabel didistribusikan sebagai objek:

KubernetesSimpan konfigurasi sebagai ConfigMap dan Secret
kubectl create configmap laravel-config \
  --from-literal=APP_ENV=production \
  --from-literal=FILESYSTEM_DISK=public \
  --from-literal=REDIS_HOST=redis.default.svc.cluster.local
 
kubectl create secret generic laravel-secrets \
  --from-literal=APP_KEY=base64:.... \
  --from-literal=DB_PASSWORD=.... \
  --from-literal=REDIS_PASSWORD=....

Pasang ke Deployment sebagai env:

env dari ConfigMap dan Secret
containers:
  - name: laravel-web
    envFrom:
      - configMapRef:
          name: laravel-config
      - secretRef:
          name: laravel-secrets

Jangan ever commit .env ke git; jangan tempel di Dockerfile (episode 8). Untuk skala tim lebih besar, gunakan External Secrets Operator / Vault agar Secret Kubernetes sendiri dikelola terpusat.

Tip

Uji pemisahan ini! Hapus Secret lalu restart Pod — aplikasi harus jelas gagal tanpa kredensial, dan tidak boleh ada jejak .env yang tersisa di image.

Security Checklist

Mengikuti konvensi keamanan:

  • NFS export terbatas — daftar IP worker di /etc/exports, bukan * (episode 13).
  • all_squash + anonuid — untuk produksi, kecuali alasan kuat memakai no_root_squash.
  • Enkripsi: LUKS at-rest + sec=krb5p bila jaringan tak tepercaya (episode 15).
  • Resource limits di Deployment Laravel:
batas CPU dan memory
resources:
  requests:
    cpu: 250m
    memory: 512Mi
  limits:
    cpu: 1000m
    memory: 1Gi
  • Pod Security admission — aktifkan level restricted/baseline untuk namespace aplikasi agar container berjalan non-root dan tanpa privilege mencolok.
KubernetesLabel Pod Security Admission
kubectl label ns default pod-security.kubernetes.io/enforce=baseline

Warning

PSA level restricted melarang gambar berjalan sebagai root dan beberapa syscall. Image kita sudah USER www-data (episode 8) — kalian tinggal menyelaraskan fsGroup, runAsUser, dan allowPrivilegeEscalation: false di securityContext Deployment.

Operational Checklist

Yang membuat sistem tetap hidup hari ke hari:

  • Healthz endpoint di aplikasi (mis. /healthz di probe, episode 9) dan prompt health NFS (episode 18).
  • Logs terpusat — nginx + laravel masuk sistem log gabungan.
  • Alerts aktif — PVC penuh, NFS down, PersistentVolumeClaimPending (episode 18).
  • Sizing storage berkelanjutan — hitung pertumbuhan folder media (mis. du -sh mingguan), alert di 70% kapasitas, expand sebelum 85% (episode 16).
  • Capacity planning — catat baseline: berapa media per user, tren bulanan; ini input untuk keputusan storage episode 26.

Dokumentasi & Runbook

Dokumentasi yang baik adalah fitur. Susun runbook untuk skenario utama:

  • NFS down — gejala, langkah check konektivitas, failover HA (episode 20), eskalasi.
  • PVC penuh — cara cepat menambah kapasitas (episode 16), siapa yang setuju.
  • Permission error — alur debug UID/GID (episode 13), cara chown yang aman.

Tempatkan runbook di knowledge base internal (wiki/confluence/git). Sertakan: topologi terkini (diagram dari episode 27), kredensial non-sensitif, dan kontak on-call.

Penutup

Pada episode 23 ini, arsitektur kalian telah berubah menjadi produksi-grade:

Inti yang harus dibawa pulang:

  • .env Laravel → ConfigMap (non-rahasia) + Secret (rahasia); opsional External Secrets/Vault.
  • Security: ekspor IP-spesifik, all_squash, LUKS, resource limits, Pod Security admission.
  • Operational: healthz, logs terpusat, alert 70% kapasitas, capacity planning.
  • Runbook: NFS down, PVC penuh, permission error — didokumentasikan dan dimiliki tim.

Di episode 24 selanjutnya kita akan memeriksa troubleshooting & common issues: PVC pending, mount failed, permission denied, NFS hang, dan data tak terlihat antar replica — berikut alur diagnostik untuk tiap kasus. Sampai jumpa di episode 24!

Belajar Kubernetes Shared Filesystem RWX - Hardening Produksi & Checklist | Belajar Kubernetes Shared Filesystem RWX