Episode ini membahas manipulasi header, redirects, rewrites, dan prefix matching, conditional routing dengan route rules, serta dukungan protokol gRPC dan WebSocket melalui gateway.

Routing dasar sudah kalian kuasai. Sekarang saatnya memanipulasi request itu sendiri. Episode 8 membahas advanced routing dan request transformation: mengubah header, mengalihkan dan menulis ulang path, menilai kondisi routing yang kompleks, serta melayani protokol non-HTTP seperti gRPC dan WebSocket.
Filter RequestHeaderModifier menambah, mengubah, atau menghapus header sebelum request sampai ke backend:
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: api-route
spec:
parentRefs:
- name: main-gateway
namespace: multigress-system
rules:
- backendRefs:
- name: api
port: 8080
filters:
- type: RequestHeaderModifier
requestHeaderModifier:
set:
- name: X-Forwarded-For
value: "true"
add:
- name: X-Client-Region
value: "id"
remove:
- "X-Internal-Token"Dengan filter di atas, proxy menambahkan header X-Client-Region sebelum meneruskan ke Service api. Perintah kubectl apply -f route.yaml langsung menerapkan transformasi ini tanpa perlu restart backend.
Ada dua filter yang sekilas mirip tetapi berbeda tujuan:
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: https-redirect
spec:
parentRefs:
- name: main-gateway
namespace: multigress-system
rules:
- filters:
- type: RequestRedirect
requestRedirect:
scheme: https
statusCode: 301Route di atas mengubah semua request HTTP ke HTTPS. Sedangkan untuk rewrite path lama ke path baru:
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: rewrite-route
spec:
rules:
- matches:
- path:
type: PathPrefix
value: /api/v2
filters:
- type: URLRewrite
urlRewrite:
path:
type: ReplacePrefixMatch
replacePrefixMatch: /v2
backendRefs:
- name: api
port: 8080Request /api/v2/users akan diteruskan sebagai /v2/users ke backend. Dengan ReplacePrefixMatch, backend tidak perlu tahu bahwa path lama bernama v2.
Rule HTTPRoute bisa dikondisikan dengan lebih dari path. Kombinasi berikut mengarahkan request berdasarkan header dan metode:
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: booking-route
spec:
parentRefs:
- name: main-gateway
rules:
- matches:
- headers:
- type: Exact
name: X-Canary
value: "true"
method: GET
backendRefs:
- name: booking-canary
port: 8080
- backendRefs:
- name: booking-stable
port: 8080Klien yang mengirim header X-Canary: true dengan metode GET diarahkan ke booking-canary; sisanya ke booking-stable. Ini bentuk canary berbasis header yang sering dipakai untuk testing internal.
Beberapa aturan penting tentang match:
method dan queryParams ikut tersedia sebagai kondisi.gRPC memakai HTTP/2 dan istilah method seperti /service.Method. Route-nya menggunakan GRPCRoute dengan match berdasarkan service dan method:
apiVersion: gateway.networking.k8s.io/v1
kind: GRPCRoute
metadata:
name: grpc-route
spec:
parentRefs:
- name: main-gateway
namespace: multigress-system
hostnames:
- "grpc.example.com"
rules:
- matches:
- method:
type: Exact
service: com.example.payment.PaymentService
method: Charge
backendRefs:
- name: payment-grpc
port: 9000GRPCRoute memakai struktur yang sama dengan HTTPRoute, hanya match-nya berbasis service dan method gRPC.
WebSocket tidak membutuhkan route khusus — handshake-nya adalah request HTTP biasa dengan header upgrade. Asalkan HTTPRoute menunjuk ke Service yang benar, upgrade akan diteruskan, dan status 101 Switching Protocols menandakan koneksi berhasil di-upgrade.
Info
Pastikan policy timeout di BackendTrafficPolicy tidak terlalu pendek untuk WebSocket — koneksi bisa bertahan lama, dan timeout request standar akan memutusnya.
Episode 8 melengkapi kemampuan routing kalian: transformasi header, redirect dan rewrite, routing kondisional berdasarkan header dan metode, serta dukungan protokol gRPC dan WebSocket yang berjalan mulus lewat gateway.
Inti yang harus dibawa pulang:
Di episode 9 selanjutnya kita akan membahas canary deployments & progressive delivery — traffic shifting dengan weights, feedback loop observability untuk keamanan deployment, serta integrasi dengan Argo Rollouts dan Flagger. Route rule yang baru kalian pelajari akan menjadi alat utama di episode ini.