Episode ini membahas konfigurasi policy traffic keluar (egress), pengelolaan akses ke layanan eksternal, serta pertimbangan network policy Kubernetes untuk lalu lintas service-to-service.

Keamanan tidak hanya soal traffic yang masuk. Pod yang lolos ke internet tanpa kendali adalah risiko besar. Episode 13 membahas egress dan service-to-service routing: mengarahkan traffic keluar lewat egress gateway, mengelola akses ke layanan eksternal secara eksplisit, dan memakai NetworkPolicy untuk membatasi pergerakan lateral di dalam cluster.
Tujuan akhir: setiap byte traffic keluar dan antar-service melalui jalur yang tercatat, terpolicy, dan bisa diaudit.
Tanpa egress gateway, setiap pod punya akses internet sendiri-sendiri melalui IP node. Sulit diaudit dan sulit dipolicy. Dengan egress gateway, semua traffic keluar lewat satu titik sehingga bisa diamati dan dibatasi. Multigress mendukung mode ini dengan listener dan route khusus egress.
Deklarasikan egress sebagai Gateway tersendiri dengan listener TCP atau TLS:
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: egress-gateway
namespace: multigress-system
spec:
gatewayClassName: multigress
listeners:
- name: egress-tls
protocol: TLS
port: 443
hostname: "*.internal-out.example.com"Pod internal kemudian diarahkan ke egress gateway ini. Traffic keluar dipaksa lewat SNI yang diawasi:
apiVersion: gateway.networking.k8s.io/v1
kind: TLSRoute
metadata:
name: egress-route
spec:
parentRefs:
- name: egress-gateway
namespace: multigress-system
hostnames:
- "*.internal-out.example.com"
rules:
- backendRefs:
- name: external-vip
port: 443Dengan pola ini, hanya domain dalam daftar yang bisa diakses keluar. Domain lain tidak punya route, sehingga ditolak.
Untuk mengekspos layanan eksternal ke dalam cluster sebagai Service biasa, pakai ExternalName:
apiVersion: v1
kind: Service
metadata:
name: payment-gateway
namespace: platform
spec:
type: ExternalName
externalName: api.payment.example.com
ports:
- port: 443
targetPort: 443Service payment-gateway menyediakan nama DNS internal untuk API pembayaran. Aplikasi tidak perlu tahu alamat eksternal — mereka cukup memanggil payment-gateway.platform.
Gabungkan ExternalName dengan policy egress untuk mengontrol layanan mana yang boleh diakses:
apiVersion: gateway.multigress.io/v1
kind: SecurityPolicy
metadata:
name: egress-payment-policy
spec:
targetRefs:
- group: gateway.networking.k8s.io
kind: HTTPRoute
name: egress-route
authorization:
rules:
- when:
- key: request.host
values: ["payment-gateway.platform"]
action: ALLOW
- action: DENYPolicy di atas mengizinkan hanya payment-gateway.platform keluar cluster. Pola ini menjadikan daftar akses eksternal sebagai kode yang bisa di-review.
Egress gateway mengatur traffic keluar, sedangkan NetworkPolicy mengatur lalu lintas pod di level jaringan. Keduanya saling melengkapi: egress gateway mengatur ke mana, NetworkPolicy mengatur dari mana ke mana pada lapisan pod.
Contoh NetworkPolicy yang membatasi pod app hanya boleh menerima dari proxy gateway dan pod se-tenant:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: app-ingress-policy
namespace: team-a
spec:
podSelector:
matchLabels:
app: app-a
policyTypes:
- Ingress
- Egress
ingress:
- from:
- namespaceSelector:
matchLabels:
role: multigress
egress:
- to:
- namespaceSelector:
matchLabels:
tenant: team-aPolicy ini hanya mengizinkan traffic masuk dari namespace Multigress, dan traffic keluar hanya ke namespace team-a. Default deny pada egress sangat efektif mencegah pod membuka koneksi liar.
kubectl get networkpolicy -A
kubectl get gateway egress-gateway -n multigress-systemPerintah kubectl get networkpolicy -A menampilkan daftar policy yang berlaku. Jika kosong, berarti traffic antar-pod belum dibatasi — evaluasi kebutuhan sebelum produksi.
Warning
NetworkPolicy membutuhkan CNI yang mendukungnya, seperti Calico atau Cilium. Pastikan CNI kalian menyediakan dukungan ini sebelum mengandalkan policy sebagai lapisan keamanan.
Episode 13 memperluas kendali ke arah keluar: traffic egress melewati gateway yang terpolicy, layanan eksternal diekspos eksplisit lewat ExternalName, dan NetworkPolicy membatasi pergerakan antar pod di dalam cluster.
Inti yang harus dibawa pulang:
Di episode 14 selanjutnya kita akan membahas DDoS protection & rate limiting — implementasi rate limiting dan throttling, pola perlindungan terhadap klien abusif, serta logging dan alerting untuk anomali traffic. Gateway egress dan ingress kalian akan menjadi laboratorium untuk membungkam traffic jahat.