İçerik
Kubernetes, container yönetimi ve microservice orkestrasyonu için en popüler çözümlerden biri. Ancak, Kubernetes üzerinde gelen trafiği yönetmek için iki ana seçenek bulunuyor: Kubernetes Ingress vs Gateway API. Bu yazıda, bu iki çözümün farklarını, kullanım alanlarını ve hangisini tercih etmeniz gerektiğini detaylıca ele alacağız.
Neden İkinci Bir API’ye İhtiyaç Duyuyoruz?
Gateway API stable hale gelmesine rağmen, birçok organizasyon hala Ingress API kullanmaya devam ediyor.
Ingress API, temel trafik yönlendirme için güçlü bir araç olmasına rağmen, bazı sınırlamaları bulunmaktadır:
- Annotation tabanlı yapılandırma karmaşıklığı: Özellikle büyük ölçekli projelerde annotation ile yapılan ayarlamalar yönetimi zorlaştırabilir.
- Protokol sınırlamaları: Yalnızca HTTP ve HTTPS desteği sunar.
- Tek kaynak kontrolü: Tüm trafik yönlendirmesi tek bir obje üzerinden yönetildiği için rol bazlı ayrım yapmak zor olabilir.
Bu eksiklikleri gidermek amacıyla Gateway API geliştirildi. Gateway API, daha fazla protokol desteği, rol tabanlı ayrım ve daha geniş yapılandırma seçenekleri sunarak modern uygulama ihtiyaçlarını karşılıyor.
Kubernetes Ingress ile Servis Yayınlama

Ingress Routing
Kubernetes’te Ingress, dış trafiği cluster içindeki servislere yönlendirmek için kullanılır. Bir load balancer gibi davranarak, dışarıdan gelen istekleri uygun Kubernetes servisine yönlendirir.
Ingress objesi, gelen trafiği hostname veya URL path bazında yönlendirmek için kurallar tanımlar. Bu kurallar genellikle bir YAML file içinde tanımlanır.
Ingress Controller
Bir Ingress resource‘unun çalışabilmesi için cluster üzerinde aktif bir Ingress Controller bulunmalıdır. Kubernetes ekosisteminde birden fazla Ingress Controller seçeneği mevcut. Bu yazıda, yaygın olarak kullanılan Nginx Ingress Controller üzerinde duracağız.
Ingress Configuration Örneği:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-example
spec:
rules:
- host: sub.example.com
http:
paths:
- path: /auth
pathType: Prefix
backend:
service:
name: http-echo-server
port:
number: 8080
- path: /api
pathType: Prefix
backend:
service:
name: api-svc
port:
number: 9090
ingressClassName: nginx
Yukarıdaki yapılandırmada, /auth
istekleri http-echo-server servisine yönlendirilirken, /api
istekleri api-svc‘ye yönlendirilir.
URL Rewriting
Bazı durumlarda gelen URL’leri yeniden yazmak gerekebilir. Bu işlemi yapabilmek için annotation kullanmak yaygın bir yöntemdir.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-myservicea-two
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /uat/$2
spec:
rules:
- host: sub.example.com
http:
paths:
- path: /auth/api(/|$)(.*)
pathType: Prefix
backend:
service:
name: http-echo-server
port:
number: 8080
ingressClassName: nginx
Bu yapılandırma, /auth/api/example/1 gibi bir URL’yi /uat/example/1 olarak yeniden yazar.
Ayrıca additional controller’lara buradan ulaşabilirsiniz.
Gateway API ile Servis Yayınlama

Ingress API, annotation tabanlı yapılandırma esnekliği açısından sınırlıdır ve özellikle büyük ölçekli projelerde yönetimi zorlaştırabilir. Bu noktada Gateway API devreye girer.
Gateway API’nin Avantajları
- HTTP header-based routing: Gelen talepleri header değerlerine göre yönlendirebilir.
- Weighted traffic splitting: Yük dengeleme işlemlerinde ağırlıklandırılmış trafik yönlendirmesi yapabilir.
- Geniş protokol desteği: HTTP, gRPC ve daha birçok protokolü destekler.
- Genişletilebilir backend seçenekleri: Fonksiyonlar, bucket gibi farklı backend yapıları ile uyumludur.
- Rol tabanlı yönetim: Gateway ve Route objeleri ile sorumluluk ayrımı daha net yapılabilir.
Gateway API Configuration Örneği:
kind: HTTPRoute
apiVersion: networking.x-k8s.io/v1alpha1
metadata:
name: bar-route
namespace: bar
spec:
hostnames:
- "bar.example.com"
rules:
- forwardTo:
- serviceName: bar-v1
port: 8080
weight: 90
- serviceName: bar-v2
port: 8080
weight: 10
- matches:
- headers:
values:
env: canary
forwardTo:
- serviceName: bar-v2
port: 8080
Bu örnek, trafiği ağırlıklı olarak bar-v1 servisine yönlendirirken, belirli bir header değerine sahip talepleri bar-v2‘ye yönlendirir.
Kubernetes Ingress vs Gateway API Arasındaki Farklar
Özellik | Ingress API | Gateway API |
---|---|---|
Yapılandırma Esnekliği | Annotation tabanlı, sınırlı | Geniş özellik seti ve daha fazla kontrol |
Protokol Desteği | HTTP ve HTTPS | HTTP, gRPC ve diğer protokoller |
Rol Tabanlı Yönetim | Tek kaynak üzerinden kontrol | Ayrı Gateway ve Route objeleri ile iş bölümü |
Yönetim ve Bakım | Tek obje ile sınırlı yapılandırma | Gateway ve Route objeleri ile daha iyi yönetim |
Sonuç
Küçük ve temel trafik yönlendirme ihtiyaçlarınız varsa, Nginx Ingress Controller gibi çözümleri kullanmaya devam etmek mantıklı olacaktır. Ancak daha karmaşık yapılandırmalar ve rol bazlı yönetim gereksinimleri olan projelerde Gateway API daha fazla esneklik ve güç sunar.
Proje gereksinimlerinizi analiz ederek doğru API’yi seçmek, hem yönetimi kolaylaştırır hem de gelecekteki ölçeklenebilirlik sorunlarını önler.
Ayrıca incelemek isterseniz Kubernetes Objects, Resources ve Custom Resource: 1 Yazıda Ayrıntılı Rehber yazıma da göz atabilirsiniz.