Gateway API: Pengertian, Cara Kerja, Arsitektur, Komponen, Manfaat, Kelebihan, Kekurangan, dan Implementasinya | Dewa234
Gateway API: Pengertian, Cara Kerja, Arsitektur, Komponen, Manfaat, Kelebihan, Kekurangan, dan Implementasinya
Setelah memahami Service Mesh dan Linkerd, pembahasan berikutnya adalah Gateway API. Teknologi ini menjadi bagian penting dalam perkembangan networking Kubernetes karena menyediakan mekanisme yang lebih ekspresif dan terstruktur untuk mengatur traffic menuju aplikasi Dewa234.
Dalam aplikasi modern berbasis Kubernetes, kebutuhan networking tidak hanya sebatas membuka akses menuju Service. Administrator dan developer juga membutuhkan routing berdasarkan hostname, path, header, pembagian traffic, pengelolaan listener, serta pemisahan tanggung jawab antara infrastructure provider, cluster operator, dan application developer.
Gateway API dirancang untuk memenuhi kebutuhan tersebut. Gateway API merupakan kumpulan API Kubernetes yang menyediakan provisioning infrastruktur dinamis dan advanced traffic routing dengan pendekatan yang extensible, role-oriented, dan protocol-aware. :contentReference[oaicite:1]{index=1}
Apa Itu Gateway API?
Gateway API adalah kumpulan resource API untuk Kubernetes yang digunakan untuk mengatur akses dan routing traffic jaringan menuju aplikasi dan Service di dalam cluster.
Gateway API dikembangkan sebagai API yang lebih ekspresif dibandingkan pendekatan Ingress tradisional. Resource Gateway API memungkinkan konfigurasi networking dipisahkan berdasarkan peran sehingga infrastructure provider, cluster operator, dan application developer dapat memiliki tanggung jawab yang berbeda.
Gateway API didefinisikan sebagai Custom Resource Definition (CRD) dan dapat didukung oleh berbagai implementasi atau controller. Artinya, Gateway API bukan sebuah proxy tunggal, melainkan spesifikasi API yang dapat diimplementasikan oleh berbagai solusi networking. :contentReference[oaicite:2]{index=2}
Mengapa Gateway API Dibutuhkan?
Kubernetes telah menyediakan Ingress untuk mengatur akses HTTP dan HTTPS menuju Service. Namun, kebutuhan aplikasi modern sering kali lebih kompleks.
Administrator dapat membutuhkan:
- Routing berdasarkan hostname.
- Routing berdasarkan path.
- Routing berdasarkan HTTP header.
- Traffic splitting.
- Pengelolaan listener.
- Pemisahan tanggung jawab antar-role.
- Cross-namespace routing.
- HTTP dan HTTPS routing.
- GRPC routing.
- TCP dan TLS routing.
- Integrasi dengan load balancer.
Gateway API dirancang agar kebutuhan tersebut dapat dikonfigurasi melalui resource Kubernetes yang lebih terstruktur dan extensible. :contentReference[oaicite:3]{index=3}
Gateway API dan Kubernetes
Gateway API tidak menggantikan Kubernetes. Gateway API justru berjalan sebagai bagian dari ekosistem Kubernetes networking.
Kubernetes
│
┌───────────┴───────────┐
│ │
Service Gateway API
│
┌────────────────┼────────────────┐
▼ ▼ ▼
GatewayClass Gateway HTTPRoute
│ │ │
└────────────────┼────────────────┘
▼
Service
│
▼
Pod
Kubernetes menyediakan workload, Pod, Service, dan networking dasar. Gateway API menambahkan model API untuk mengelola traffic masuk dan routing secara lebih fleksibel.
Gateway API dan Ingress
Gateway API sering dibandingkan dengan Ingress karena keduanya dapat digunakan untuk mengatur traffic HTTP menuju aplikasi Kubernetes.
Namun, Gateway API memiliki model resource yang lebih kaya dan dirancang dengan prinsip role-oriented serta extensible.
| Aspek | Ingress | Gateway API |
|---|---|---|
| Model | Resource Ingress. | Beberapa resource dengan tanggung jawab berbeda. |
| Routing | HTTP/HTTPS dengan kemampuan terbatas. | Lebih ekspresif. |
| Role separation | Terbatas. | Dirancang berdasarkan role. |
| Header matching | Sering membutuhkan anotasi implementasi. | Didukung sebagai bagian dari model routing. |
| Traffic weighting | Sering membutuhkan konfigurasi khusus. | Didukung oleh model Gateway API. |
| Extensibility | Terbatas. | Dirancang extensible. |
| Cross namespace | Lebih terbatas. | Dapat dikontrol dengan mekanisme trust seperti ReferenceGrant. |
Gateway API merupakan penerus konsep API Ingress, tetapi bukan resource Ingress itu sendiri. Migrasi dari Ingress ke Gateway API membutuhkan konversi resource. :contentReference[oaicite:4]{index=4}
Prinsip Desain Gateway API
Gateway API dibangun berdasarkan beberapa prinsip utama.
1. Role-Oriented
Resource Gateway API dirancang berdasarkan peran yang berbeda dalam pengelolaan jaringan.
- Infrastructure Provider.
- Cluster Operator.
- Application Developer.
2. Portable
Spesifikasi Gateway API dirancang agar dapat digunakan oleh berbagai implementasi, bukan hanya satu vendor.
3. Expressive
Gateway API menyediakan kemampuan routing seperti header matching dan traffic weighting yang sebelumnya sering membutuhkan anotasi khusus pada Ingress.
4. Extensible
Gateway API dapat diperluas untuk kebutuhan dan implementasi tertentu tanpa harus mengubah keseluruhan model API.
Keempat prinsip tersebut merupakan bagian penting dari desain Gateway API. :contentReference[oaicite:5]{index=5}
Arsitektur Gateway API
Arsitektur Gateway API dapat dipahami dengan melihat hubungan antara GatewayClass, Gateway, Route, dan backend seperti Kubernetes Service.
Client
│
▼
Gateway Endpoint
│
▼
+-----------+
| Gateway |
+-----------+
│
▼
+-----------+
| HTTPRoute |
+-----------+
│
▼
+-----------+
| Service |
+-----------+
│
▼
Pods
GatewayClass
│
▼
Mengatur controller
yang menangani Gateway
GatewayClass menentukan kelas Gateway yang digunakan, Gateway merepresentasikan instance infrastruktur traffic handling, sedangkan HTTPRoute menentukan bagaimana request HTTP diarahkan menuju backend. :contentReference[oaicite:6]{index=6}
Komponen Utama Gateway API
| Komponen | Fungsi |
|---|---|
| GatewayClass | Menentukan kelas Gateway dan controller yang mengelolanya. |
| Gateway | Merepresentasikan instance infrastruktur untuk menangani traffic. |
| HTTPRoute | Mengatur routing request HTTP menuju backend. |
| GRPCRoute | Mengatur routing untuk traffic gRPC. |
| TLSRoute | Mengatur routing berbasis TLS. |
| TCPRoute | Mengatur routing TCP pada implementasi yang mendukungnya. |
| UDPRoute | Mengatur routing UDP pada implementasi yang mendukungnya. |
| ReferenceGrant | Mengatur izin reference lintas namespace. |
Model resource Gateway API terus berkembang. Dokumentasi resmi Gateway API saat ini menjelaskan beberapa tipe Route standar seperti HTTPRoute, GRPCRoute, TLSRoute, TCPRoute, dan UDPRoute dengan tingkat stabilitas yang dapat berbeda sesuai jenis resource. :contentReference[oaicite:7]{index=7}
Apa Itu GatewayClass?
GatewayClass adalah resource cluster-scoped yang mendefinisikan kelompok Gateway dengan konfigurasi dan perilaku umum.
GatewayClass biasanya disediakan atau dikelola oleh infrastructure provider dan menunjuk controller yang bertanggung jawab terhadap implementasinya.
GatewayClass
│
▼
Gateway Controller
│
├─────────────┐
▼ ▼
Gateway A Gateway B
GatewayClass memiliki fungsi yang mirip dengan konsep IngressClass, tetapi digunakan dalam model Gateway API. :contentReference[oaicite:8]{index=8}
Contoh GatewayClass
apiVersion: gateway.networking.k8s.io/v1 kind: GatewayClass metadata: name: example-gateway-class spec: controllerName: example.com/gateway-controller
Nilai controllerName menunjukkan controller yang bertanggung jawab menangani GatewayClass tersebut.
Apa Itu Gateway?
Gateway merepresentasikan instance infrastruktur yang digunakan untuk menangani traffic.
Gateway dapat merepresentasikan berbagai bentuk infrastructure seperti load balancer cloud atau reverse proxy yang dikonfigurasi untuk menerima traffic.
Gateway
│
┌────────┼────────┐
▼ ▼ ▼
HTTP HTTPS TLS
│ │ │
└────────┼────────┘
▼
Routes
Gateway dikaitkan dengan satu GatewayClass yang menentukan controller atau implementasi yang menangani Gateway tersebut. :contentReference[oaicite:9]{index=9}
Contoh Gateway
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: example-gateway
spec:
gatewayClassName: example-gateway-class
listeners:
- name: http
protocol: HTTP
port: 80
Pada contoh tersebut, Gateway dikonfigurasi untuk menerima traffic HTTP pada port 80.
Apa Itu Listener?
Listener menentukan bagaimana Gateway menerima traffic.
Konfigurasi listener dapat mencakup:
- Nama listener.
- Protocol.
- Port.
- Hostname.
- Konfigurasi TLS.
- Aturan Route yang diperbolehkan.
Gateway
│
├── Listener HTTP :80
│
├── Listener HTTPS :443
│
└── Listener HTTPS :443
│
└── Hostname
api.example.com
Apa Itu HTTPRoute?
HTTPRoute adalah resource Gateway API yang digunakan untuk mendefinisikan aturan routing request HTTP dari Gateway listener menuju backend.
HTTPRoute dapat menggunakan:
- Hostname.
- Path.
- Header.
- Query parameter.
- Filters.
- Backend references.
- Traffic weighting.
HTTPRoute merupakan salah satu resource utama Gateway API dan telah berada pada Standard Channel sejak Gateway API v0.5.0. :contentReference[oaicite:10]{index=10}
Contoh HTTPRoute
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: example-route
spec:
parentRefs:
- name: example-gateway
hostnames:
- "www.example.com"
rules:
- matches:
- path:
type: PathPrefix
value: /app
backendRefs:
- name: example-service
port: 8080
Pada contoh tersebut, request dengan hostname www.example.com dan path yang diawali /app diarahkan menuju Service example-service pada port 8080.
Hubungan GatewayClass, Gateway, dan HTTPRoute
GatewayClass
│
▼
Gateway Controller
│
▼
Gateway
│
┌─────┴─────┐
▼ ▼
HTTPRoute HTTPRoute
│ │
▼ ▼
Service A Service B
Hubungan tersebut merupakan inti dari model resource Gateway API. GatewayClass menentukan implementasi, Gateway menentukan titik infrastruktur traffic handling, dan Route menentukan aturan pemetaan traffic menuju backend. :contentReference[oaicite:11]{index=11}
Bagaimana Cara Kerja Gateway API?
Cara kerja Gateway API dapat dipahami melalui aliran request dari client hingga backend Service.
- Client meminta URL aplikasi.
- DNS Resolver menemukan alamat Gateway.
- Client mengirim request menuju Gateway.
- Gateway menerima request melalui listener.
- Gateway mencocokkan HTTPRoute yang sesuai.
- HTTPRoute memeriksa hostname, path, header, atau rule lainnya.
- Gateway meneruskan request ke backend.
- Service Kubernetes meneruskan traffic menuju Pod.
- Pod menghasilkan response.
- Response dikembalikan melalui Gateway menuju client.
Ilustrasi Request Flow Gateway API
Client │ │ HTTP Request ▼ DNS Resolver │ ▼ Gateway Address │ ▼ Gateway │ ▼ Listener │ ▼ HTTPRoute │ ▼ Kubernetes Service │ ▼ Pod │ ▼ Application
Alur tersebut sesuai dengan model request flow Gateway API, di mana request dapat dicocokkan berdasarkan konfigurasi Gateway dan HTTPRoute sebelum diteruskan ke backend. :contentReference[oaicite:12]{index=12}
Gateway API dan DNS
Gateway API juga memiliki hubungan dengan DNS karena client biasanya membutuhkan hostname untuk menemukan endpoint Gateway.
www.example.com
│
▼
DNS Resolver
│
▼
Gateway IP / Address
│
▼
Gateway
Dengan demikian, pembahasan Gateway API berhubungan dengan artikel sebelumnya mengenai DNS Resolver dan konsep DNS secara keseluruhan.
Gateway API dan HTTP
Gateway API sangat erat dengan protokol HTTP karena HTTPRoute menyediakan aturan untuk memproses request HTTP.
Routing dapat dilakukan berdasarkan:
- Hostname.
- Path.
- HTTP Method.
- Header.
- Query Parameter.
Gateway API dan HTTPS
Gateway API juga dapat digunakan untuk mengelola traffic HTTPS melalui listener dengan konfigurasi TLS yang sesuai dengan implementasi Gateway.
Client │ │ HTTPS ▼ Gateway :443 │ │ TLS ▼ HTTPRoute │ ▼ Service