Episode ini membahas GlobalNetworkPolicy dan GlobalNetworkSet, konsep policy tiers dengan hierarki security, platform, dan application, serta praktik membangun baseline default-deny cluster-wide dan policy per tim.

NetworkPolicy di episode 5 terbatas pada satu namespace. Di klaster produksi dengan puluhan tim, kalian butuh policy yang berlaku cluster-wide dan urutan evaluasi yang bisa diatur. Itulah bahan episode 6: GlobalNetworkPolicy, GlobalNetworkSet, dan tiers.
Pernah tidak kalian bertanya: kalau dua policy dari namespace berbeda saling bertentangan, siapa yang menang? Jawabannya ditentukan tiers. Struktur ini yang membuat Calico bisa membangun keamanan berlapis secara deterministik, mulai dari lapisan platform sampai lapisan aplikasi.
GlobalNetworkPolicy menyeleksi workload di seluruh klaster tanpa peduli namespace. Ini sempurna untuk baseline keamanan: default deny global, aturan untuk kube-system, atau aturan untuk workload dengan label tertentu di mana pun dia berada.
apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
name: security-default-deny
spec:
tier: security
order: 100
selector: all()
types:
- Ingress
- Egress
ingress: []
egress: []Selector all() mencocokkan semua endpoint di klaster. Policy dengan ingress: [] dan egress: [] menjadi penutup global: apa pun yang tidak lolos rule lain di tier lebih awal akan ditolak.
GlobalNetworkSet adalah kumpulan IP dengan label, yang bisa dipakai sebagai sumber atau tujuan policy tanpa menulis IP satu per satu. Berguna untuk daftar IP yang berubah dinamis — misalnya range IP kantor.
apiVersion: projectcalico.org/v3
kind: GlobalNetworkSet
metadata:
name: office-range
labels:
role: trusted
spec:
nets:
- 203.0.113.0/24
- 198.51.100.0/24Policy lalu bisa menulis source.selector: role == 'trusted' untuk mencocokkan semua IP dalam set itu.
Semua policy di Calico dievaluasi dalam tiers — kelompok policy berurutan. Tier dibuat eksplisit, dan setiap policy menunjuk tier-nya. Evaluasi dimulai dari tier dengan order terkecil ke terbesar; rule pertama yang cocok menentukan aksi dan menghentikan evaluasi. Ada tiga tier default yang sering dipakai:
apiVersion: projectcalico.org/v3
kind: Tier
metadata:
name: application
spec:
order: 300
mode: Enforcemode: Enforce berarti rule di tier ini benar-benar diterapkan. Mode lain seperti Disable digunakan saat kalian ingin menonaktifkan seluruh tier sementara tanpa menghapus policy-nya.
security (order 100) -> platform (order 200) -> application (order 300)
| rule cocok? | rule cocok? | rule cocok?
| Allow/Deny/Pass | Allow/Deny/Pass | Allow/Deny/Pass
+--- jika cocok, selesai ---+------------------------+Prinsip kuncinya: kalau rule di tier security sudah memutuskan Allow, traffic diteruskan dan tier di bawahnya tidak lagi dievaluasi. Inilah kenapa tim keamanan bisa memaksa aturan yang tidak bisa ditimpa tim aplikasi.
Pola yang umum di produksi: tim platform membuat baseline di tier security dan platform, lalu memberikan namespace dan tier application kepada tim aplikasi. Berikut rangkaian perintah untuk membangunnya:
calicoctl apply -f security-default-deny.yaml
calicoctl create -f tier-platform.yaml
calicoctl apply -f platform-allow-dns.yaml
calicoctl get tiers
calicoctl get globalnetworkpolicy -o widecalicoctl get tiers menampilkan tier beserta order-nya. Perhatikan urutan: deny global dipasang lebih dulu, baru aturan allow platform seperti DNS.
Tim aplikasi bisa menaruh policy mereka di tier application dengan order yang sama; urutan antar policy dalam satu tier ditentukan nilai order masing-masing:
apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
name: payments-allow-api
namespace: payments
spec:
tier: application
order: 100
selector: app == 'api'
ingress:
- action: Allow
protocol: TCP
source:
selector: app == 'web'
destination:
ports: [443]Jika tim aplikasi membuat kesalahan konfigurasi, aturan ini hanya berlaku di tier application — baseline di tier security tetap melindungi klaster.
Untuk memastikan policy benar-benar aktif, gunakan perintah yang menampilkan endpoint yang dicocokkan:
calicoctl get networkpolicy -n payments -o yaml
calicoctl get workloadendpoints -n payments --export
calicoctl get globalnetworkpolicy --export -o yaml--export menampilkan resource berikut label tambahan yang dimiliki runtime, sehingga lebih mudah membaca status sebenarnya.
Episode 6 memberi kalian kendali penuh atas urutan evaluasi policy: GlobalNetworkPolicy untuk aturan cluster-wide, GlobalNetworkSet untuk daftar IP dinamis, dan tiers untuk memisahkan kewenangan keamanan platform dari aplikasi.
Inti yang harus dibawa pulang:
all() dan policy kosong.calicoctl get tiers dan --export membantu memverifikasi penerapan.Di episode 7 selanjutnya kita masuk ke observability dasar — flow logs, metrik Prometheus dari Felix dan Typha, serta troubleshooting dataplane untuk melihat apakah policy dan endpoint benar-benar diterapkan di node.