Belajar Platform Engineer - Network Policy & Isolation
Episode 20 of 28

Belajar Platform Engineer - Network Policy & Isolation

Mengisolasi workload satu sama lain di dalam jaringan: NetworkPolicy default-deny, isolasi multi-tenancy yang benar-benar bekerja, dan segmentasi ke zona yang mempersempit jalur serangan

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

Pendahuluan

Di episode 19 kita memastikan image yang masuk cluster sudah terverifikasi. Tapi ada pertanyaan besar yang tersisa: setelah masuk, apakah service boleh bicara dengan service mana pun? Di Kubernetes, defaultnya adalah semuanya boleh bicara ke semua — jaringan datar yang membuat satu service yang dibobol bisa menjangkau seluruh cluster. Episode ini membangun network policy & isolation: NetworkPolicy default-deny, isolasi multi-tenancy, dan segmentasi yang mempersempit jalur serangan.

Mengapa ini penting? Isolasi jaringan adalah pertahanan kedua setelah identitas (episode 18): mTLS membuktikan siapa, NetworkPolicy menentukan siapa boleh bicara dengan siapa. Tanpa isolasi, satu container yang di-compromise adalah pintu masuk ke seluruh fleet — database, secret, dan service internal lainnya. Dengan default-deny, blast radius serangan menyusut drastis.

NetworkPolicy: Dasar yang Sering Terlewat

Kubernetes NetworkPolicy mengatur lalu lintas antar pod berdasarkan label. Kuncinya: default harus deny. Cluster tanpa NetworkPolicy default-deny berarti semua pod saling terbuka.

network/default-deny.yaml
# Kebijakan global: tidak ada traffic masuk/keluar tanpa izin
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny
spec:
  podSelector: {}
  policyTypes:
    - Ingress
    - Egress

Dengan default-deny aktif, lalu lintas yang diizinkan harus dinyatakan eksplisit. Contoh: payments-api hanya boleh diakses gateway, dan hanya boleh ke database:

network/payments-api-allow.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: payments-api-allow
  namespace: team-payments
spec:
  podSelector:
    matchLabels:
      app: payments-api
  policyTypes: [Ingress, Egress]
  ingress:
    - from:
        - namespaceSelector:
            matchLabels:
              tier: gateway
        - podSelector:
            matchLabels:
              app: api-gateway
      ports:
        - port: 8080
  egress:
    - to:
        - namespaceSelector:
            matchLabels:
              tier: data
        - podSelector:
            matchLabels:
              app: payments-db
      ports:
        - port: 5432

Perhatikan dua selector (namespace + pod): ini membentuk pasangan "hanya dari namespace gateway, hanya pod api-gateway". Isolasi tidak bekerja jika hanya memakai satu selector yang longgar.

Isolasi Multi-Tenancy di Jaringan

Di episode 15 kita memilih model tenancy; sekarang jaringannya kita kunci. Prinsipnya: namespace tenant A tidak boleh bicara ke namespace tenant B kecuali lewat jalur yang disetujui.

Tenancy modelPola NetworkPolicy
Namespace per tenantPolicy per namespace: izinkan traffic dalam namespace, tolak lintas namespace
Cluster per tenantIsolasi alami (jaringan terpisah); tetap pasang default-deny di tiap cluster
vClusterNetworkPolicy virtual per vCluster + policy fisik di bawahnya
network/tenant-isolation.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: block-cross-tenant
  namespace: team-payments
spec:
  podSelector: {}
  policyTypes: [Ingress]
  ingress:
    - from:
        - podSelector: {}        # sesama namespace boleh
        - namespaceSelector:
            matchLabels:
              shared: ingress     # jalur gateway disetujui

Segmentasi: Membagi Jaringan Menjadi Zona

Selain per tenant, bagi jaringan menjadi zona berdasarkan fungsi — lalu atur lintas zona secara ketat:

100%
ZonaIsiAturan lintas zona
IngressGateway, edge proxyHanya boleh ke zona aplikasi
AplikasiWorkload bisnisHanya ke data + egress terbatas
DataDatabase, cacheTidak boleh memulai koneksi keluar; hanya menerima dari aplikasi

Segmentasi zona membuat penyerang yang berhasil di satu zona tidak otomatis melihat zona lain. Ini melengkapi NetworkPolicy dengan konteks arsitektur.

Praktik: Cilium dan L7 Policy

CNI modern seperti Cilium menaikkan NetworkPolicy dari layer 3/4 ke layer 7 — membatasi metode HTTP dan path, bukan hanya port:

network/l7-http-rule.yaml
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
  name: payments-api-l7
  namespace: team-payments
spec:
  endpointSelector:
    matchLabels:
      app: payments-api
  ingress:
    - fromEndpoints:
        - matchLabels:
            app: api-gateway
      toPorts:
        - ports:
            - port: "8080"
          rules:
            http:
              - method: GET
                path: "/payments"

Layer 7 menutup celah yang tidak bisa dilihat policy layer 3: port 8080 terbuka, tapi hanya GET /payments yang diizinkan — bukan DELETE.

Common Pitfalls

  1. Tidak ada default-deny — NetworkPolicy hanya untuk sebagian namespace; sisanya tetap jaringan datar.
  2. Selector yang terlalu longgar — hanya memakai namespaceSelector tanpa pod label; satu namespace bisa di-bypass via pod lain.
  3. Lupa mengurus egress — ingress di-lock tapi pod bebas mengirim data keluar (exfiltration).
  4. Policy menolak traffic debugging — developer gagal connect dan menghapus semua policy; beri jalur debug yang terkontrol dan ter-audit.
  5. Menganggap default-deny = keamanan lengkap — tetap butuh mTLS (episode 18) dan monitoring untuk komunikasi yang diizinkan.

Important

Pasang NetworkPolicy default-deny di hari pertama, bukan setelah insiden. Menutup jaringan yang sudah terbuka jauh lebih menyakitkan daripada membuka jalur eksplisit satu per satu — dan eksplisit adalah tujuan kita: tidak ada satu byte pun lalu lintas yang tidak disengaja.

Penutup

Inti yang harus dibawa pulang:

  • NetworkPolicy harus mulai dari default-deny, lalu izinkan secara eksplisit.
  • Gunakan selector berpasangan (namespace + pod) agar isolasi benar-benar bekerja.
  • Isolasi multi-tenancy dikunci di jaringan, bukan sekadar dijanjikan di namespace.
  • Segmentasi zona (ingress, aplikasi, data) mempersempit jalur serangan secara arsitektural.
  • CNI seperti Cilium menambah policy layer 7 (HTTP method/path), bukan hanya port.

Di episode 21 selanjutnya kita membawa platform menghadapi gelombang berikutnya: platform engineering AI — platform untuk AI workloads dengan GPU scheduling, LLM serving, dan MLOps, plus bagaimana AI menjadi fitur platform itu sendiri!

Belajar Platform Engineer - Network Policy & Isolation | Belajar Platform Engineer