Episode ini membahas gerbang lalu lintas Cilium: CiliumEgressGatewayPolicy untuk memusatkan traffic keluar melalui IP tertentu dengan NAT, serta CiliumIngressGateway dan integrasi Gateway API untuk pintu masuk. Kalian membuat policy dan route nyata yang menghubungkan cluster dengan dunia luar.

Sejauh ini kita fokus pada lalu lintas di dalam cluster. Episode 12 memutar arah: bagaimana traffic keluar dan masuk melewati batas cluster. Untuk traffic keluar, banyak organisasi ingin semua permintaan keluar muncul dari satu set IP tetap agar bisa di-allowlist oleh pihak eksternal. Untuk traffic masuk, kita butuh pintu yang kokoh di depan Service.
Kita akan membahas dua mekanisme Cilium: CiliumEgressGatewayPolicy untuk egress yang terpusat, dan CiliumIngressGateway dengan Gateway API untuk ingress. Keduanya menunjukkan bagaimana Cilium melampaui peran CNI biasa menuju platform networking yang utuh.
Dalam setup normal, traffic keluar pod di-NAT dengan IP node asal. Masalahnya: jika pod tersebar di banyak node, traffic keluar muncul dari banyak IP berbeda. Situs eksternal yang melakukan allowlist IP akan kesulitan, begitu juga audit logging yang mengandalkan satu IP sumber.
Egress gateway memusatkan ini: semua traffic keluar dari sekelompok pod diarahkan melewati satu node tertentu (atau sekelompok node), di-NAT menjadi satu IP keluar yang konsisten. Dari perspektif luar, seolah-olah semua permintaan datang dari satu gerbang. Aktifkan fitur ini saat install:
cilium install --set egressGateway.enabled=truecilium install --set egressGateway.enabled=true mengaktifkan komponen egress gateway di Cilium. Tanpa ini, resource CiliumEgressGatewayPolicy tidak akan berfungsi.
Resource ini mendefinisikan tiga hal: pod mana yang traffic keluar-nya diarahkan ke gateway, ke mana saja traffic keluar tersebut berlaku, dan IP gateway mana yang dipakai sebagai sumber. Contoh policy untuk workload akunting:
apiVersion: cilium.io/v2
kind: CiliumEgressGatewayPolicy
metadata:
name: egress-akunting
spec:
selectors:
- podSelector:
matchLabels:
app: akunting
destinationCIDRs:
- "0.0.0.0/0"
egressGateway:
nodeSelector:
matchLabels:
node-role.kubernetes.io/gateway: "true"
egressIP: 10.0.100.10podSelector memilih pod akunting, destinationCIDRs menentukan tujuan (di sini semua IP), dan egressGateway menunjuk node berlabel gateway dengan IP keluar 10.0.100.10. Traffic keluar dari pod akunting kini terlihat berasal dari 10.0.100.10, apa pun node tempat pod berjalan.
Verifikasi alamat keluar lewat Hubble dengan memfilter flow egress:
hubble observe --namespace akunting --verdict FORWARDEDhubble observe --namespace akunting --verdict FORWARDED menampilkan flow keluar; pada baris egress, alamat sumber akan menunjukkan IP gateway 10.0.100.10, bukan IP node asal pod.
Untuk traffic masuk, Cilium menawarkan dua jalur: controller ingress klasik dan implementasi Gateway API. Gateway API adalah standar Kubernetes generasi baru yang menggantikan Ingress v1 dengan konsep Gateway, GatewayClass, dan route yang lebih ekspresif. Aktifkan dukungannya:
cilium install --set gatewayAPI.enabled=truecilium install --set gatewayAPI.enabled=true mengaktifkan implementasi Gateway API Cilium. Setelah itu, definisikan gateway dan route:
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: gw-utama
spec:
gatewayClassName: cilium
listeners:
- name: http
port: 80
protocol: HTTP
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: route-frontend
spec:
parentRefs:
- name: gw-utama
rules:
- backendRefs:
- name: frontend
port: 8080gatewayClassName: cilium memilih implementasi Cilium, dan HTTPRoute memetakan request yang masuk ke backend frontend pada port 8080. Dibanding Ingress klasik, struktur ini modular: Gateway milik operator platform, sementara HTTPRoute bisa dimiliki oleh tim aplikasi.
Untuk memverifikasi bahwa route bekerja, jalankan request melalui alamat gateway:
curl -s http://$(kubectl get gateway gw-utama -o jsonpath='{.status.addresses[0].value}')kubectl get gateway gw-utama -o jsonpath='{.status.addresses[0].value}' mengambil alamat yang dialokasikan gateway, lalu curl ke sana akan diarahkan ke service frontend oleh Cilium.
Warning
Egress gateway menambah satu hop pada traffic keluar. Untuk workload yang sangat sensitif terhadap latensi, batasi penggunaan egress gateway hanya pada workload yang memang wajib keluar dari IP tetap, bukan semua pod.
Inti yang harus dibawa pulang:
CiliumEgressGatewayPolicy memilih pod, tujuan, dan IP keluar.egressGateway.enabled=true wajib aktif sebelum policy dipakai.gatewayClassName: cilium memilih implementasi Cilium untuk Gateway API.Di episode 13 selanjutnya kita akan membahas L7 policy dan API-aware security — rule berbasis HTTP, gRPC, dan Kafka di dalam CNP dan CCNP, visibility L7 per endpoint, serta CiliumClusterwideNetworkPolicy untuk kebijakan lintas namespace. Ini membawa policy kita dari level port ke level konten aplikasi.