Ana içeriğe geç

Nginx Ingress’ten Gateway API’ye Kesintisiz Geçiş (DOKS)

Bu Rehberde Ne Öğreneceksiniz?

Bu rehber, Nginx Ingress’in kullanımdan kaldırılması sonrası Gateway API’ye kesintisiz (zero-downtime) geçiş sürecini ele alır.
Ingress ve Gateway yapılarını aynı anda çalıştırarak DNS geçişini güvenli şekilde tamamlamayı öğretir.
TLS sertifikalarının korunması, HTTP → HTTPS yönlendirmeleri ve Load Balancer yapılandırmaları detaylandırılır.


Teknik Özet

Bu içerik, DigitalOcean Managed Kubernetes (DOKS) üzerinde çalışan Nginx Ingress altyapısının, Cilium tabanlı Gateway API’ye taşınmasını kapsar.
Amaç; üretim trafiğini kesmeden, TLS sertifikalarını koruyarak ve DNS geçişini kontrollü biçimde gerçekleştirmektir.
Süreç; hazırlık, Gateway kurulumu, sertifika yönetimi, test ve DNS yönlendirme adımlarından oluşur.


Gateway API ile Ingress Arasındaki Temel Farklar

Gateway API, Ingress’e kıyasla daha modüler ve açık bir trafik yönetim modeli sunar.

ÖzellikIngress NGINXGateway API (Cilium)
Sınıf Tanımıkubernetes.io/ingress.classspec.gatewayClassName
TLS YönetimiAnnotation tabanlıAyrı Certificate kaynağı
HTTP → HTTPSNginx redirect annotationRequestRedirect filtresi
Load Balancer Ayarlarımetadata.annotationsspec.infrastructure.annotations

DigitalOcean Load Balancer ayarları yalnızca spec.infrastructure.annotations altında tanımlanmalıdır.


Adım Adım Kesintisiz Geçiş

1. cert-manager’ı Gateway API İçin Hazırlama

helm upgrade cert-manager jetstack/cert-manager \
--namespace cert-manager \
--reuse-values \
--set extraArgs="{--enable-gateway-api=true}"
  • Bu komut cert-manager’ın Gateway API kaynaklarını desteklemesini sağlar.

2. Gateway Kaynağını Oluşturma


apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: tr1-gateway
spec:
gatewayClassName: cilium
infrastructure:
annotations:
service.beta.kubernetes.io/do-loadbalancer-name: "tr1-gateway-lb"
service.beta.kubernetes.io/do-loadbalancer-size-unit: "2"
listeners:
- name: http
protocol: HTTP
port: 80
hostname: "rabisu.cloud"
- name: https
protocol: HTTPS
port: 443
hostname: "rabisu.cloud"
tls:
mode: Terminate
certificateRefs:
- kind: Secret
name: rabisu-tls-secret
  • Bu yapılandırma Gateway API için yeni bir Load Balancer oluşturur.

3. Mevcut TLS Sertifikasını Kopyalama

  1. DNS henüz yeni Gateway IP’sine yönlendirilmediği için mevcut Ingress sertifikası geçici olarak kullanılır.

kubectl get secret eski-tls-secret -o yaml | \
sed "s/name: eski-tls-secret/name: rabisu-tls-secret/" | \
kubectl apply -f -
  • Bu adım yalnızca geçiş süresi içindir.

4. HTTPRoute Kurallarını Tanımlama

  1. HTTP → HTTPS yönlendirmesi Gateway API’de filtre tabanlı yapılır.

apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: http-redirect
spec:
parentRefs:
- name: tr1-gateway
sectionName: http
hostnames:
- "rabisu.cloud"
rules:
- filters:
- type: RequestRedirect
requestRedirect:
scheme: https
statusCode: 301
  • Bu tanım tüm HTTP isteklerini kalıcı olarak HTTPS’e yönlendirir.

5. Test ve DNS Geçişi

  1. Gateway IP adresi alınır:

kubectl get gateway tr1-gateway
  • Önce IP üzerinden test yapılır. Doğrulama sonrası DNS A kaydı Gateway IP’ye yönlendirilir.

Sıkça Sorulan Sorular? (S.S.S)

1. Ingress ne zaman kaldırılmalıdır? DNS geçişinden sonra 24–48 saat izleme önerilir.

2. Geçiş sırasında ek maliyet olur mu? Evet, kısa süreli çift Load Balancer maliyeti oluşur.

3. Sertifikalar otomatik yenilenir mi? DNS sonrası Certificate kaynağı oluşturulursa yenilenir.

4. Rollback mümkün mü? DNS kaydını eski Load Balancer IP’sine yönlendirmek yeterlidir.


Sonuç

Bu rehber ile Nginx Ingress’ten Gateway API’ye sıfır kesintiyle geçiş tamamlanmıştır. Gateway API, daha ölçeklenebilir ve yönetilebilir bir trafik altyapısı sunar. Bu yapı, modern Kubernetes ortamları için önerilen standarttır.