Episode 6 membuka mesh ke dunia luar: membedakan ingress gateway dari egress, terminasi TLS dan routing berbasis SNI, redirect HTTP ke HTTPS, pengamanan ingress, serta ServiceEntry untuk mengontrol lalu lintas ke layanan eksternal.

Traffic di dalam mesh sudah bisa diatur. Tapi aplikasi tidak hidup sendirian: pengguna datang dari luar, dan layanan kadang perlu memanggil API pihak ketiga. Episode 6 ini membahas dua arah komunikasi itu — ingress (masuk ke mesh) dan egress (keluar dari mesh) — beserta komponen yang mengaturnya: Gateway, VirtualService edge, dan ServiceEntry.
Satu kesalahpahaman umum yang harus segera kita luruskan: gateway Istio bukan pengganti Ingress Controller Kubernetes. Gateway adalah spesifikasi konfigurasi load balancer proxy yang menangani traffic di tepi mesh.
Ingress gateway adalah Envoy yang ditempatkan di tepi mesh untuk menerima traffic dari luar. Dia direpresentasikan sebagai Deployment dengan Service bertipe LoadBalancer, dan perilakunya diatur oleh resource Gateway:
apiVersion: networking.istio.io/v1
kind: Gateway
metadata:
name: bookstore-gateway
namespace: default
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "bookstore.example.com"
- "api.example.com"selector mengarah ke label istio: ingressgateway pada Deployment ingress gateway. Setelah Gateway didefinisikan, VirtualService yang sama dipakai untuk routing:
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
name: bookstore-vs
spec:
hosts:
- "bookstore.example.com"
gateways:
- bookstore-gateway
http:
- route:
- destination:
host: bookstore
port:
number: 8000VirtualService ini menangkap traffic dari bookstore-gateway dan mengarahkannya ke service bookstore di port 8000. Tanpa baris gateways, VirtualService hanya berlaku untuk traffic internal mesh.
Egress gateway memindahkan traffic keluar mesh melewati proxy terpusat. Fungsinya lebih niche: kalian bisa menerapkan kebijakan yang sama (mTLS keluar, audit, rate limiting) untuk semua traffic yang keluar. Untuk kebutuhan sederhana, sidecar langsung ke internet sudah cukup; kita akan membahas kapan egress gateway diperlukan di bagian ServiceEntry.
Gateway bisa mengakhiri TLS sehingga aplikasi di belakangnya tetap menerima HTTP polos:
apiVersion: networking.istio.io/v1
kind: Gateway
metadata:
name: tls-gateway
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 443
name: https
protocol: HTTPS
tls:
mode: SIMPLE
credentialName: tls-secret
hosts:
- "bookstore.example.com"tls.mode: SIMPLE memakai sertifikat dari Secret Kubernetes tls-secret. Mode lain termasuk PASSTHROUGH (TLS diteruskan tanpa diinspeksi, cocok untuk SNI routing) dan MUTUAL (menuntut sertifikat klien).
Untuk memaksa semua pengunjung memakai HTTPS, definisikan server port 80 dengan redirect:
spec:
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "bookstore.example.com"
tls:
httpsRedirect: true
- port:
number: 443
name: https
protocol: HTTPS
tls:
mode: SIMPLE
credentialName: tls-secret
hosts:
- "bookstore.example.com"tls.httpsRedirect: true membuat gateway merespons permintaan HTTP dengan redirect ke versi HTTPS tanpa perlu logika aplikasi.
Dengan mode PASSTHROUGH, gateway tidak mengakhiri TLS tetapi membaca SNI untuk memilih destinasi. Ini memungkinkan banyak service berbagi satu gateway sambil menjaga sertifikat di masing-masing service.
Secara default, sidecar memblokir akses ke domain eksternal yang tidak dikenal. ServiceEntry mendaftarkan layanan eksternal agar bisa dipanggil dan diatur kebijakannya:
apiVersion: networking.istio.io/v1
kind: ServiceEntry
metadata:
name: external-payment
spec:
hosts:
- api.payment.example.com
ports:
- number: 443
name: https
protocol: TLS
resolution: DNS
location: MESH_EXTERNALresolution: DNS berarti Envoy menyelesaikan nama via DNS. Pilihan lainnya:
endpoints.Dengan ServiceEntry, kalian bisa menerapkan kebijakan traffic (retry, timeout, mTLS keluar) dan observability ke layanan eksternal seolah-olah mereka bagian dari mesh.
Info
Untuk mengarahkan egress lewat egress gateway, tambahkan aturan pada VirtualService dengan hosts external dan gateways: [mesh, egress-gateway]. Ini pola yang dipakai saat tiap pod tidak boleh langsung ke internet.
Episode 6 menghubungkan mesh dengan dunia luar: Gateway dan VirtualService untuk ingress dengan terminasi TLS dan redirect HTTPS, mode PASSTHROUGH untuk SNI routing, serta ServiceEntry dengan strategi resolusi DNS, STATIC, atau NONE untuk mengontrol egress.
Inti yang harus dibawa pulang:
httpsRedirect memaksa pengunjung memakai HTTPS.resolution menentukan cara Envoy menemukan endpoint: NONE, STATIC, atau DNS.Di episode 7 selanjutnya kita akan membuat mesh lebih tangguh: resilience patterns — retries dengan retry budgets, timeouts, circuit breaker melalui outlier detection, dan fault injection untuk chaos testing.