HTTPRoute: Pengertian, Cara Kerja, Arsitektur, Komponen, Fungsi, Manfaat, Kelebihan, Kekurangan, dan Implementasinya | Dewa234
HTTPRoute: Pengertian, Cara Kerja, Arsitektur, Komponen, Fungsi, Manfaat, Kelebihan, Kekurangan, dan Implementasinya
Pada artikel sebelumnya kita telah mempelajari Istio Traffic Management, yaitu kemampuan Istio untuk mengatur bagaimana request mengalir di dalam arsitektur microservices. Kita juga telah memahami bagaimana traffic dapat dibagi menggunakan traffic splitting, diarahkan menggunakan routing, hingga dikontrol menggunakan timeout dan retry.
Selanjutnya, kita akan membahas salah satu resource terpenting dalam Kubernetes Gateway API, yaitu HTTPRoute. Resource ini digunakan untuk menentukan bagaimana permintaan HTTP diproses sebelum diteruskan menuju backend service.
Seiring berkembangnya Kubernetes, Gateway API hadir sebagai pendekatan yang lebih modern dibandingkan Ingress tradisional. Salah satu resource utamanya adalah HTTPRoute yang memungkinkan administrator membuat aturan routing HTTP secara lebih fleksibel, mudah dipahami, dan vendor-neutral.
HTTPRoute didukung oleh berbagai implementasi Gateway API, termasuk Istio. Melalui resource ini administrator dapat melakukan path matching, header matching, redirect, rewrite URL, traffic splitting, hingga menghubungkan beberapa backend service dalam satu konfigurasi.
Pada artikel ini kita akan membahas HTTPRoute secara lengkap mulai dari pengertian, fungsi, arsitektur, cara kerja, komponen, implementasi, contoh konfigurasi YAML, hingga best practice yang umum digunakan pada lingkungan production.
Apa Itu HTTPRoute?
HTTPRoute merupakan resource pada Kubernetes Gateway API yang digunakan untuk menentukan bagaimana request HTTP diproses dan diteruskan menuju backend tertentu.
Jika Gateway dapat dianalogikan sebagai pintu masuk sebuah aplikasi Dewa234, maka HTTPRoute merupakan seperangkat aturan yang menentukan ke mana setiap request harus diarahkan berdasarkan host, path, header HTTP, query parameter, maupun metode HTTP yang digunakan.
Dengan adanya HTTPRoute, administrator tidak perlu lagi membuat logika routing di dalam aplikasi. Semua aturan dapat dikelola secara deklaratif menggunakan file YAML Kubernetes.
Mengapa HTTPRoute Dibutuhkan?
Pada aplikasi sederhana mungkin hanya terdapat satu service sehingga seluruh request dapat langsung diteruskan menuju backend.
Browser │ ▼ Application
Namun pada arsitektur microservices situasinya jauh lebih kompleks.
Client
│
▼
Gateway API
│
┌─────────┼─────────┐
▼ ▼ ▼
Product Order Payment
Service Service Service
Setiap request harus diarahkan menuju service yang benar sesuai URL yang diminta pengguna. HTTPRoute menyediakan mekanisme untuk melakukan proses tersebut secara terstruktur.
Posisi HTTPRoute pada Gateway API
Gateway API terdiri dari beberapa resource yang saling bekerja sama.
GatewayClass
│
▼
Gateway
│
▼
HTTPRoute
│
▼
Backend Service
Hubungan antar-resource tersebut dapat dijelaskan sebagai berikut:
- GatewayClass menentukan implementasi Gateway yang digunakan.
- Gateway menjadi pintu masuk traffic.
- HTTPRoute menentukan aturan routing HTTP.
- Backend Service menerima request yang telah diproses.
Dengan pemisahan tersebut konfigurasi menjadi lebih modular dibandingkan pendekatan Ingress klasik.
Bagaimana Cara Kerja HTTPRoute?
Ketika sebuah client mengirim request HTTP, Gateway akan menerima request tersebut terlebih dahulu. Selanjutnya Gateway akan mencari HTTPRoute yang sesuai berdasarkan aturan yang telah dibuat.
Apabila rule berhasil ditemukan, request akan diteruskan menuju backend service yang telah ditentukan.
Browser
│
HTTP Request
│
▼
Gateway
│
Find HTTPRoute
│
▼
Matching Rules
│
▼
Backend Service
Proses tersebut berlangsung sangat cepat sehingga pengguna tidak merasakan adanya proses tambahan.
Arsitektur HTTPRoute
HTTPRoute berada di antara Gateway dan backend service.
Internet
│
▼
Load Balancer
│
▼
Gateway
│
HTTPRoute Rules
│
┌──────────────┼──────────────┐
▼ ▼ ▼
Product API Order API Payment API
Gateway bertugas menerima koneksi dari luar cluster, sedangkan HTTPRoute menentukan bagaimana request diproses berdasarkan rule yang tersedia.
Komponen HTTPRoute
| Komponen | Fungsi |
|---|---|
| parentRefs | Menghubungkan HTTPRoute dengan Gateway. |
| hostnames | Menentukan hostname yang dilayani. |
| rules | Berisi seluruh aturan routing. |
| matches | Mencocokkan request berdasarkan kondisi tertentu. |
| backendRefs | Menentukan backend tujuan. |
| filters | Melakukan redirect, rewrite, atau modifikasi request. |
Fungsi HTTPRoute
HTTPRoute memiliki berbagai fungsi penting dalam pengelolaan lalu lintas HTTP pada Kubernetes.
- Routing berdasarkan URL.
- Routing berdasarkan hostname.
- Routing berdasarkan HTTP Header.
- Routing berdasarkan HTTP Method.
- Routing berdasarkan Query Parameter.
- Traffic Splitting.
- Request Redirect.
- URL Rewrite.
- Menghubungkan Gateway dengan Backend Service.
- Mengelola routing aplikasi microservices.
Hubungan HTTPRoute dengan Istio
Pada artikel sebelumnya kita membahas bahwa Istio mendukung Kubernetes Gateway API sebagai salah satu pendekatan modern untuk traffic management. Dalam implementasi tersebut, HTTPRoute menjadi resource utama untuk mengatur routing HTTP menuju workload yang berada di dalam service mesh.
Client │ ▼ Gateway │ HTTPRoute │ Waypoint / Envoy │ Backend Service
Pada Ambient Mesh, apabila fitur Layer 7 digunakan, HTTPRoute dapat bekerja bersama Waypoint Proxy sehingga request HTTP tetap dapat diproses berdasarkan rule yang telah didefinisikan.
Keuntungan Menggunakan HTTPRoute
- Konfigurasi lebih modular.
- Mudah dibaca.
- Mudah dipelihara.
- Mendukung banyak backend.
- Mendukung traffic splitting.
- Mendukung URL Rewrite.
- Mendukung Redirect.
- Mendukung Header Matching.
- Mendukung Path Matching.
- Vendor Neutral.
Ilustrasi Sederhana HTTPRoute
https://example.com
│
▼
HTTPRoute
┌──────────┼──────────┐
▼ ▼ ▼
/product /order /payment
│ │ │
▼ ▼ ▼
ProductSvc OrderSvc PaymentSvc
Dengan konfigurasi seperti di atas, setiap request akan diarahkan ke backend service yang berbeda berdasarkan path URL yang diminta pengguna.
Path Matching pada HTTPRoute
Salah satu kemampuan utama HTTPRoute adalah melakukan routing berdasarkan path URL. Dengan fitur ini, request dapat diarahkan ke backend yang berbeda tergantung jalur URL yang diminta pengguna.
Gateway API menyediakan beberapa jenis pencocokan path yang umum digunakan.
| Jenis Match | Contoh | Keterangan |
|---|---|---|
| Exact | /login | Harus sama persis. |
| PathPrefix | /products | Mencocokkan semua path yang diawali prefix tersebut. |
Contoh Exact Match:
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: login-route
spec:
parentRefs:
- name: web-gateway
rules:
- matches:
- path:
type: Exact
value: /login
backendRefs:
- name: auth-service
port: 8080
Request /login akan diteruskan ke auth-service, sedangkan /login/admin tidak cocok dengan rule tersebut.
Contoh Prefix Match:
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: product-route
spec:
parentRefs:
- name: web-gateway
rules:
- matches:
- path:
type: PathPrefix
value: /products
backendRefs:
- name: product-service
port: 8080
Rule tersebut akan mencocokkan:
/products/products/1/products/category/books
Header Matching
HTTPRoute juga dapat melakukan routing berdasarkan HTTP header. Fitur ini sangat berguna untuk canary deployment, A/B testing, atau pengujian internal.
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: beta-route
spec:
parentRefs:
- name: web-gateway
rules:
- matches:
- headers:
- name: x-version
value: beta
backendRefs:
- name: product-v2
port: 8080
- backendRefs:
- name: product-v1
port: 8080
Dengan konfigurasi tersebut:
- Request dengan header
x-version: beta→ product-v2. - Request tanpa header tersebut → product-v1.
Client │ ├── x-version: beta ─────► product-v2 │ └── no header ───────────► product-v1
Query Parameter Matching
Request juga dapat diarahkan berdasarkan query parameter.
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: search-route
spec:
parentRefs:
- name: web-gateway
rules:
- matches:
- queryParams:
- name: lang
value: id
backendRefs:
- name: search-id
port: 8080
- backendRefs:
- name: search-default
port: 8080
Contoh:
/search?q=book&lang=id→ search-id./search?q=book→ search-default.
HTTP Method Matching
HTTPRoute mendukung pencocokan berdasarkan metode HTTP.
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: order-route
spec:
parentRefs:
- name: web-gateway
rules:
- matches:
- method: GET
backendRefs:
- name: order-read
port: 8080
- matches:
- method: POST
backendRefs:
- name: order-write
port: 8080
Dengan rule tersebut:
- GET /orders →
order-read. - POST /orders →
order-write.
Host-Based Routing
HTTPRoute dapat melayani beberapa domain dalam satu cluster.
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: multi-host
spec:
parentRefs:
- name: web-gateway
hostnames:
- api.example.com
- admin.example.com
rules:
- backendRefs:
- name: api-service
port: 8080
Request ke api.example.com atau admin.example.com akan diproses oleh route tersebut.
backendRefs
Bagian backendRefs menentukan service tujuan.
backendRefs: - name: product-service port: 8080
HTTPRoute dapat memiliki lebih dari satu backend.
backendRefs: - name: product-v1 port: 8080 weight: 90 - name: product-v2 port: 8080 weight: 10
Traffic Splitting dengan HTTPRoute
Salah satu fitur paling penting adalah weighted routing.
HTTPRoute
│
┌───────┴───────┐
▼ ▼
product-v1 product-v2
90% 10%
Konfigurasi lengkap:
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: product-canary
spec:
parentRefs:
- name: web-gateway
rules:
- backendRefs:
- name: product-v1
port: 8080
weight: 90
- name: product-v2
port: 8080
weight: 10
Teknik ini umum digunakan untuk canary deployment.
Progressive Delivery
Traffic dapat dinaikkan secara bertahap.
Tahap 1: v1 95% | v2 5% Tahap 2: v1 90% | v2 10% Tahap 3: v1 75% | v2 25% Tahap 4: v1 50% | v2 50% Tahap 5: v2 100%
Jika versi baru bermasalah, traffic dapat dikembalikan ke versi lama hanya dengan mengubah nilai weight.
Request Redirect
HTTPRoute dapat melakukan redirect HTTP.
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: redirect-http
spec:
parentRefs:
- name: web-gateway
rules:
- filters:
- type: RequestRedirect
requestRedirect:
scheme: https
statusCode: 301
backendRefs:
- name: dummy-service
port: 8080
Request HTTP akan diarahkan ke HTTPS.
URL Rewrite
URL juga dapat diubah sebelum diteruskan ke backend.
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: rewrite-route
spec:
parentRefs:
- name: web-gateway
rules:
- matches:
- path:
type: PathPrefix
value: /api
filters:
- type: URLRewrite
urlRewrite:
path:
type: ReplacePrefixMatch
replacePrefixMatch: /
backendRefs:
- name: backend-api
port: 8080
Request /api/users akan diteruskan ke backend sebagai /users.
Contoh Arsitektur E-Commerce
https://shop.example.com
│
▼
Gateway
│
HTTPRoute
│
┌───────────────────┼───────────────────┐
▼ ▼ ▼
/products /orders /payments
│ │ │
▼ ▼ ▼
Product Service Order Service Payment Service
Dengan satu Gateway dan satu atau beberapa HTTPRoute, seluruh aplikasi dapat dikelola secara terpusat.
HTTPRoute pada Ambient Mesh
Jika digunakan bersama Istio Ambient Mesh, alurnya dapat terlihat seperti berikut:
Client │ ▼ Gateway │ HTTPRoute │ Waypoint Proxy │ Backend Service
HTTPRoute menentukan aturan routing, sedangkan Waypoint Proxy memproses traffic Layer 7 sebelum request mencapai workload tujuan.
Best Practice Menggunakan HTTPRoute
Agar implementasi HTTPRoute tetap mudah dikelola pada lingkungan production, terdapat beberapa praktik terbaik yang sebaiknya diterapkan sejak awal pengembangan. Konfigurasi yang rapi akan mempermudah proses troubleshooting, deployment, maupun scaling ketika jumlah service terus bertambah.
- Gunakan satu HTTPRoute untuk satu domain atau satu kelompok layanan yang saling berkaitan.
- Gunakan nama resource yang konsisten agar mudah dikenali.
- Pisahkan environment Development, Staging, dan Production.
- Gunakan Path Prefix untuk REST API.
- Gunakan Header Matching hanya jika benar-benar diperlukan.
- Dokumentasikan seluruh rule routing.
- Gunakan Traffic Splitting ketika melakukan Canary Deployment.
- Lakukan pengujian setiap perubahan sebelum diterapkan ke Production.
- Gunakan HTTPS pada seluruh endpoint.
- Monitor latency, error rate, dan throughput secara berkala.
Monitoring HTTPRoute
Setelah HTTPRoute diterapkan, administrator sebaiknya tidak hanya memastikan request berhasil diteruskan ke backend, tetapi juga memantau performa layanan secara menyeluruh.
HTTPRoute
│
▼
Gateway
│
▼
Metrics
├── Request Rate
├── Latency
├── Error Rate
└── Response Time
Melalui observability, administrator dapat mengetahui apakah perubahan routing memberikan dampak terhadap performa aplikasi maupun pengalaman pengguna.
Troubleshooting HTTPRoute
1. Request Menghasilkan 404 Not Found
Masalah ini biasanya terjadi karena path yang diminta tidak cocok dengan rule pada HTTPRoute atau hostname yang digunakan tidak sesuai dengan konfigurasi.
Client │ 404 │ Check Path Check Hostname
2. Backend Tidak Menerima Request
Pastikan backend service telah berjalan dengan baik dan nama service pada backendRefs sesuai dengan Service Kubernetes yang tersedia.
kubectl get svc kubectl get endpoints
3. Traffic Tidak Terbagi Sesuai Weight
Traffic splitting bekerja berdasarkan probabilitas sehingga distribusi tidak selalu terlihat sama dalam jumlah request yang kecil. Lakukan pengujian menggunakan jumlah request yang lebih banyak agar distribusi lebih terlihat.
4. Hostname Tidak Cocok
Periksa kembali konfigurasi DNS maupun nilai hostnames pada HTTPRoute.
Kelebihan HTTPRoute
- Standar resmi Kubernetes Gateway API.
- Konfigurasi lebih fleksibel dibandingkan Ingress tradisional.
- Mendukung routing berdasarkan Hostname.
- Mendukung Path Matching.
- Mendukung Header Matching.
- Mendukung Query Parameter Matching.
- Mendukung URL Rewrite.
- Mendukung HTTP Redirect.
- Mendukung Traffic Splitting.
- Mudah diintegrasikan dengan Istio.
- Skalabel untuk arsitektur Microservices.
- Vendor Neutral sehingga tidak bergantung pada satu implementasi tertentu.
Kekurangan HTTPRoute
- Membutuhkan Gateway API.
- Belum seluruh implementasi Gateway memiliki dukungan fitur yang sama.
- Konfigurasi dapat menjadi kompleks apabila jumlah service sangat banyak.
- Membutuhkan pemahaman mengenai Kubernetes Networking.
- Administrator perlu memahami hubungan Gateway, GatewayClass, dan HTTPRoute.
Contoh Implementasi pada E-Commerce
Bayangkan sebuah platform e-commerce memiliki beberapa layanan seperti Product, Cart, Order, Payment, dan User. Seluruh request dari pengguna masuk melalui satu Gateway.
Internet
│
▼
Gateway
│
HTTPRoute
┌──────────┼──────────┬──────────┐
▼ ▼ ▼ ▼
Product Cart Order Payment
Service Service Service Service
Dengan pendekatan tersebut, administrator dapat mengelola seluruh routing dari satu titik konfigurasi tanpa perlu mengubah kode aplikasi pada masing-masing service.
Hubungan HTTPRoute dengan Artikel Sebelumnya
Apabila diurutkan berdasarkan pembahasan sebelumnya, hubungan antar teknologi menjadi seperti berikut.
Ambient Mesh
│
▼
Waypoint Proxy
│
▼
Istio Traffic Management
│
▼
HTTPRoute
Ambient Mesh menyediakan data plane, Waypoint Proxy memberikan kemampuan Layer 7, Istio Traffic Management mengatur aliran traffic, sedangkan HTTPRoute mendefinisikan aturan routing HTTP yang digunakan oleh Gateway API.
Baca Juga
Silakan ganti tautan di atas dengan URL artikel yang sesuai pada Blogger Anda.
Artikel Selanjutnya
Setelah memahami HTTPRoute, pembahasan berikutnya akan berfokus pada bagaimana mengamankan komunikasi antar workload menggunakan kebijakan otorisasi pada Istio.
HTTPRoute
│
▼
Authorization Policy
│
▼
Authentication
│
▼
PeerAuthentication (mTLS)
Melalui Authorization Policy, administrator dapat menentukan workload mana yang boleh mengakses service tertentu berdasarkan identitas, namespace, hingga metode HTTP yang digunakan.
Pertanyaan yang Sering Diajukan (FAQ)
Apa itu HTTPRoute?
HTTPRoute adalah resource pada Kubernetes Gateway API yang digunakan untuk mengatur bagaimana request HTTP diarahkan menuju backend service berdasarkan rule tertentu.
Apa fungsi utama HTTPRoute?
Fungsi utamanya adalah mengelola routing HTTP menggunakan aturan seperti path, hostname, header, query parameter, maupun metode HTTP.
Apakah HTTPRoute menggantikan Ingress?
Gateway API dirancang sebagai evolusi dari Ingress dengan kemampuan yang lebih fleksibel dan modular. Pada banyak skenario modern, HTTPRoute menjadi pilihan yang lebih kaya fitur.
Apakah HTTPRoute dapat digunakan bersama Istio?
Ya. Istio mendukung Gateway API sehingga HTTPRoute dapat digunakan sebagai salah satu resource untuk mengatur traffic HTTP pada service mesh.
Apa itu backendRefs?
backendRefs adalah bagian dari HTTPRoute yang menentukan backend service tujuan setelah request berhasil dicocokkan dengan rule yang tersedia.
Apa manfaat Traffic Splitting?
Traffic Splitting memungkinkan administrator membagi request ke beberapa backend berdasarkan persentase tertentu, misalnya untuk Canary Deployment atau A/B Testing.
Apakah HTTPRoute mendukung URL Rewrite?
Ya. HTTPRoute dapat melakukan rewrite path sebelum request diteruskan ke backend sesuai implementasi Gateway yang digunakan.
Apa perbedaan Gateway dan HTTPRoute?
Gateway bertugas menerima koneksi dari luar cluster, sedangkan HTTPRoute menentukan bagaimana request HTTP diproses dan diarahkan menuju backend.
Apakah HTTPRoute hanya dapat digunakan pada Kubernetes?
HTTPRoute merupakan bagian dari Kubernetes Gateway API sehingga digunakan pada lingkungan Kubernetes yang memiliki implementasi Gateway API.
Mengapa HTTPRoute penting pada arsitektur Microservices?
Karena HTTPRoute mempermudah pengelolaan routing HTTP ketika aplikasi terdiri dari banyak service yang saling berkomunikasi.
Kesimpulan
HTTPRoute merupakan salah satu resource utama dalam Kubernetes Gateway API yang berfungsi mengatur bagaimana request HTTP diproses sebelum diteruskan menuju backend service. Dengan dukungan fitur seperti Path Matching, Hostname Matching, Header Matching, URL Rewrite, Redirect, hingga Traffic Splitting, HTTPRoute menjadi fondasi penting dalam pengelolaan lalu lintas aplikasi modern.
Dibandingkan pendekatan Ingress tradisional, HTTPRoute menawarkan konfigurasi yang lebih modular dan fleksibel sehingga lebih mudah diterapkan pada arsitektur microservices berskala besar. Dukungan terhadap Gateway API juga membuatnya dapat digunakan oleh berbagai implementasi, termasuk Istio.
Bagi organisasi yang mulai membangun platform cloud-native, memahami HTTPRoute merupakan langkah penting sebelum mempelajari kebijakan keamanan seperti Authorization Policy, Authentication, maupun mTLS yang akan dibahas pada artikel berikutnya.