Kubernetes Gateway API vs Ingress: Mengapa Ia Menggantikan Anotasi

Foto oleh Eric Kilby via Wikimedia Commons (CC BY-SA 2.0)
Ya. Gateway API adalah penerus resmi Ingress. API Ingress tidak dihapus dan tetap tersedia secara umum, tetapi dibekukan fiturnya, dan semua pengembangan jaringan aktif telah pindah ke Gateway API. Proyek baru sebaiknya mulai dengan Gateway API alih-alih Ingress.
Itu tergantung controller Anda. Proyek kubernetes/ingress-nginx mencapai akhir masa pakai pada 24 Maret 2026, jadi tidak ada lagi perbaikan bug atau tambalan CVE, membuat migrasi mendesak bagi pengguna tersebut. Jika Anda menjalankan Ingress cloud terkelola atau controller lain yang didukung, Anda punya lebih banyak waktu, tetapi arah jangka panjang memihak Gateway API.
Ketiganya adalah resource utama berorientasi peran. GatewayClass adalah templat controller yang dipasang penyedia infrastruktur, Gateway adalah titik masuk dengan listener dan TLS yang dimiliki tim platform, dan HTTPRoute menyimpan aturan routing yang dimiliki pengembang aplikasi. Pemisahan ini mencerminkan cara kebanyakan organisasi sudah membagi kepemilikan.
Ya, keduanya bisa hidup berdampingan, itulah yang membuat migrasi bertahap mungkin dilakukan. Anda memasang controller Gateway API bersama controller Ingress yang ada dan memindahkan satu service pada satu waktu. Begitu trafik sebuah service berjalan bersih melalui Gateway dan HTTPRoute, Anda menghapus resource Ingress lamanya.
ingress2gateway adalah CLI dari Kubernetes SIG-Network yang membaca resource Ingress yang ada dan menghasilkan manifest Gateway dan HTTPRoute setara, dengan versi 1.0 menerjemahkan lebih dari tiga puluh anotasi ingress-nginx umum. Perlakukan sebagai titik awal yang kuat, bukan stempel. Selalu tinjau manifest yang dihasilkan dan validasi kesetaraan routing sebelum mengalihkan trafik.

Foto oleh Eric Kilby via Wikimedia Commons (CC BY-SA 2.0)
Ringkasan Utama
Gateway API adalah penerus Ingress di Kubernetes. Ia memecah satu resource yang kelebihan beban menjadi bagian berorientasi peran: GatewayClass, Gateway, dan HTTPRoute. Ini menghilangkan tumpukan anotasi yang diandalkan Ingress, memberi tim platform dan aplikasi batas kepemilikan yang jelas, dan kini menjadi jalur yang direkomendasikan sejak ingress-nginx mencapai akhir masa pakai pada Maret 2026.
Saya sudah menjalankan trafik lewat Ingress selama bertahun-tahun, dan polanya selalu membusuk dengan cara yang sama. Anda mulai dengan spesifikasi host-dan-path yang bersih, lalu muncul keanehan TLS, lalu rewrite, lalu rate limit, dan enam bulan kemudian manifest Ingress Anda menjadi dinding anotasi khusus controller yang hanya dipahami satu orang di tim. Ingress distandarkan pada 2015 dan spesifikasinya nyaris tidak berubah; setiap fitur di luar routing host dasar harus diselundupkan lewat anotasi yang tidak portabel antar controller.
Gateway API memperbaiki akar penyebab, bukan gejalanya. Ia telah mencapai tonggak stabil v1 dan kini berada di versi 1.5.x, dengan grup API gateway.networking.k8s.io. Waktunya penting: pada 24 Maret 2026, proyek kubernetes/ingress-nginx mencapai akhir masa pakai. Repositorinya bersifat baca-saja, dan tidak akan ada lagi perbaikan bug atau tambalan CVE. Jika Anda menjalankan ingress-nginx hari ini, migrasi bukan lagi sekadar pilihan.
Cacat desain inti Ingress adalah satu resource mencampur dua pekerjaan yang sama sekali berbeda. Ia mendeskripsikan di mana trafik masuk ke cluster (load balancer, IP-nya, sertifikat TLS-nya) dan bagaimana trafik dirutekan ke service (host, path, backend) dalam objek yang sama. Di sebagian besar organisasi keduanya dimiliki orang yang berbeda: tim platform atau infrastruktur memiliki edge, dan tim aplikasi memiliki rute mereka sendiri. Ingress memaksa kedua urusan itu ke dalam satu manifest, sehingga entah tim platform menjadi penghambat yang menyetujui setiap perubahan rute, atau tim aplikasi mendapat akses tulis ke edge bersama dan bisa saling merusak.
Gateway API memecah satu resource itu tepat di garis yang sudah diikuti bagan organisasi Anda. Ada tiga resource utama, masing-masing dengan pemilik yang jelas.
Sebuah HTTPRoute menempel ke Gateway melalui field parentRefs, dan Gateway memutuskan lewat aturan allowedRoutes-nya namespace mana yang boleh menempel. Itulah seluruh triknya: tim platform mengunci edge dan TLS sekali, lalu memberi pengembang permukaan swalayan yang aman untuk routing mereka sendiri. Tanpa file bersama, tanpa penghambat review anotasi, tanpa radius ledakan tak sengaja antar tim.
Berikut ide yang sama dalam kode. Di bawah ini manifest ingress-nginx tipikal: beberapa field standar ditambah tumpukan anotasi yang hanya dipahami ingress-nginx. Pindahkan ke Traefik atau HAProxy dan anotasi itu tidak berarti apa-apa.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: shop
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-weight: "20"
spec:
ingressClassName: nginx
rules:
- host: shop.example.com
http:
paths:
- path: /api(/|$)(.*)
pathType: ImplementationSpecific
backend:
service:
name: api
port:
number: 80Bobot canary, rewrite, redirect SSL: tidak satu pun dari itu ada di spesifikasi Ingress. Semuanya hidup di anotasi vendor, itulah sebabnya manifest Ingress sebenarnya tidak portabel. Gateway API menarik fitur-fitur itu menjadi field spesifikasi bertipe kelas satu. Berikut HTTPRoute setara dengan rewrite path dan pembagian trafik 20 persen yang diekspresikan secara native.
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: shop
namespace: shop-team
spec:
parentRefs:
- name: prod-gateway
namespace: infra
hostnames:
- shop.example.com
rules:
- matches:
- path:
type: PathPrefix
value: /api
filters:
- type: URLRewrite
urlRewrite:
path:
type: ReplacePrefixMatch
replacePrefixMatch: /
backendRefs:
- name: api-v1
port: 80
weight: 80
- name: api-v2
port: 80
weight: 20Keuntungan field bertipe bukan hanya portabilitas. Karena rewrite, pencocokan header, dan bobot trafik adalah bagian dari skema, validasi kubectl, kebijakan admission, dan IDE Anda semuanya memahaminya. Salah ketik pada bobot tertangkap saat apply, bukan ditemukan jam 2 pagi ketika canary mengirim 100 persen trafik ke service yang salah.
| Aspek | Ingress | Gateway API |
|---|---|---|
| Model resource | Satu resource mencampur edge dan routing | Tiga peran: GatewayClass, Gateway, HTTPRoute |
| Kepemilikan | Satu pengguna, tanpa batas tim | Platform memiliki edge, aplikasi memiliki rute |
| Fitur lanjutan | Anotasi vendor, tidak portabel | Field spesifikasi bertipe, portabel |
| Pembagian trafik | Berbasis anotasi, khusus controller | Bobot backendRefs native |
| Routing lintas namespace | Tidak didukung dengan bersih | allowedRoutes dan ReferenceGrant eksplisit |
| Status proyek | Beku fitur, masih GA | Pengembangan aktif, stabil v1.5.x |
Kabar baiknya, Ingress dan Gateway API bisa berjalan berdampingan di cluster yang sama, jadi Anda bermigrasi satu service pada satu waktu. Tim Kubernetes SIG-Network juga merilis ingress2gateway 1.0 pada Maret 2026, sebuah CLI yang membaca resource Ingress Anda yang ada dan menghasilkan manifest Gateway dan HTTPRoute setara, termasuk penerjemahan lebih dari tiga puluh anotasi ingress-nginx umum. Ini titik awal, bukan stempel: selalu tinjau keluarannya.
Jangan perlakukan Gateway API sebagai pengganti langsung yang hanya disentuh tim jaringan Anda. Seluruh nilainya adalah pemisahan kepemilikan, jadi tentukan sejak awal tim mana yang memiliki GatewayClass dan Gateway serta namespace mana yang mendapat akses HTTPRoute. Jika Anda melewatkan percakapan itu, Anda akan membuat ulang penghambat lama dengan YAML baru.
Jika Anda memakai ingress-nginx, ya, dan dengan sedikit urgensi, karena ia tidak lagi menerima tambalan keamanan setelah akhir masa pakainya pada Maret 2026. Jika Anda menjalankan Ingress cloud terkelola atau controller lain yang masih didukung, Anda punya lebih banyak waktu, tetapi arah perjalanannya sudah pasti: spesifikasi Ingress dibekukan dan setiap fitur jaringan baru mendarat di Gateway API. Untuk apa pun yang greenfield, saya tidak akan memulai cluster baru dengan Ingress pada 2026. Mulailah dengan Gateway API, tetapkan batas peran dengan benar sejak hari pertama, dan lewati fase tumpukan anotasi sepenuhnya.