Episode ini mendalami objek GatewayClass, Gateway, HTTPRoute, TLSRoute, dan ReferenceGrant, mengonfigurasi routing host dan path menuju service backend, serta mode integrasi dengan Service dan Ingress yang sudah ada.

Di episode 3 kalian sudah melihat Gateway dan HTTPRoute bekerja. Episode 4 memperdalam pemahaman tentang keluarga objek Gateway API: apa fungsi masing-masing, bagaimana kalian mengonfigurasi routing berdasarkan host dan path, serta bagaimana HTTPRoute berinteraksi dengan Service dan Ingress yang sudah ada di cluster.
Ini adalah episode inti dari seri ini. Hampir semua fitur di episode berikutnya — TLS, canary, rate limiting — dibangun di atas konsep route yang kalian kuasai di sini.
GatewayClass adalah resource paling atas. Dia menyatakan implementasi mana yang menangani resource di bawahnya. Setiap cluster bisa punya beberapa class, misalnya multigress untuk production dan multigress-dev untuk development.
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
name: multigress
spec:
controllerName: multigress.io/multigress-controller
---
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
name: multigress-dev
spec:
controllerName: multigress.io/multigress-controllerPerhatikan bahwa keduanya memakai controller yang sama, hanya berbeda nama. Ini berguna untuk menerapkan policy yang berbeda antar lingkungan.
Gateway menyatakan pintu masuk: port, protokol, dan host yang dilayani. Listener bisa dibatasi dengan hostname agar gateway hanya menerima domain tertentu.
Family route di Gateway API mencakup HTTPRoute, TLSRoute, GRPCRoute, TCPRoute, dan UDPRoute. Masing-masing menangani protokol yang berbeda dan mengikuti struktur yang sama: parentRefs menunjuk ke Gateway, dan rules berisi aturan routing.
Secara default, route hanya boleh menunjuk backend di namespace yang sama. Untuk lintas namespace, kalian butuh ReferenceGrant:
apiVersion: gateway.networking.k8s.io/v1
kind: ReferenceGrant
metadata:
name: allow-echo-route
namespace: default
spec:
from:
- group: gateway.networking.k8s.io
kind: HTTPRoute
namespace: multigress-system
to:
- group: ""
kind: ServiceResource ReferenceGrant di atas mengizinkan HTTPRoute dari namespace multigress-system menunjuk Service di namespace default. Tanpa ini, route lintas namespace akan ditolak.
HTTPRoute mencocokkan request berdasarkan hostnames dan aturan path di dalam rules. Contoh berikut mengarahkan domain api.example.com dengan path /v1 ke Service api, dan semua path lain ke Service web:
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: api-route
spec:
parentRefs:
- name: main-gateway
namespace: multigress-system
hostnames:
- "api.example.com"
rules:
- matches:
- path:
type: PathPrefix
value: /v1
backendRefs:
- name: api
port: 8080
- backendRefs:
- name: web
port: 80Rule tanpa matches berperan sebagai default: menangkap semua traffic yang tidak cocok dengan rule sebelumnya. Urutan rule sangat berpengaruh, jadi atur dari yang paling spesifik ke yang paling umum.
Gateway API mengenal dua tipe match:
PathPrefix: cocok dengan awalan path. /v1 akan cocok dengan /v1/users dan /v1/orders.Exact: hanya cocok dengan path yang persis sama.curl -s http://localhost:8080/v1/health -H "Host: api.example.com"
curl -s http://localhost:8080/ -H "Host: api.example.com"Request pertama diarahkan ke Service api, request kedua ke Service web. Perintah curl -s http://localhost:8080/v1/health -H "Host: api.example.com" memanfaatkan header Host untuk mensimulasikan domain tanpa perlu DNS.
Hal penting yang sering membingungkan: HTTPRoute menunjuk ke Service, bukan ke Deployment atau Pod. Ini menjaga konfigurasi tetap deklaratif — proxy hanya tahu nama Service dan port, dan Kubernetes yang mengurus pemilihan pod.
Keduanya bisa hidup berdampingan. Ingress tetap berfungsi untuk controller lama, sedangkan HTTPRoute dipakai Multigress. Jika kalian ingin memigrasi, langkahnya:
kubectl get ingress -A
kubectl get httproute -AMigrasi bisa dilakukan bertahap per domain — tidak harus sekali habis. Selama proses ini, kedua jalur bisa berjalan paralel karena listener Gateway berbeda dengan ingress controller.
Tip
Aturan praktis saat migrasi: jangan ubah Service backend. Biarkan HTTPRoute mengarah ke Service yang sama dengan Ingress lama, sehingga rollback tinggal mengganti route kembali ke Ingress.
Episode 4 melengkapi pemahaman inti kalian tentang Gateway API: peran GatewayClass, Gateway, route, dan ReferenceGrant, cara mengonfigurasi routing host dan path dengan match yang tepat, serta cara HTTPRoute berbaur dengan Service dan Ingress yang sudah ada.
Inti yang harus dibawa pulang:
Di episode 5 selanjutnya kita akan mengamankan traffic dengan TLS & HTTPS termination — menyusun sertifikat TLS dalam Kubernetes secret, mengonfigurasi HTTPS termination pada Gateway, serta mempelajari TLS passthrough dan kontrol SNI. Pastikan Gateway dari episode 3 masih berjalan.