Kubernetes Service Türleri: ClusterIP, NodePort ve LoadBalancer

müfettiş

Moderatör
Katılım
20 Ocak 2024
Mesajlar
325
Tepkime puanı
1
Puanları
18

images.jpg

Kubernetes Service Türleri: ClusterIP, NodePort ve LoadBalancer​


Giriş: Podlar Ölür, Servisler Yaşar​

Kubernetes'te Pod'lar "ölümlüdür" (Ephemeral). Bir Pod çöktüğünde veya güncellendiğinde, K8s onu öldürür ve yeni bir IP adresiyle yeni bir Pod başlatır. Eğer ön yüz (Frontend) uygulamanız, arka yüz (Backend) Pod'una doğrudan IP adresiyle bağlanıyorsa, her güncellemede sistem çökecektir.

İşte Service objesi bu sorunu çözer. Service, değişken Pod'ların önüne koyulan sabit bir "Load Balancer" ve "DNS İsmi"dir. Arka planda Pod'lar değişse bile Service'in IP'si asla değişmez. Ancak Service'lerin de dış dünyaya nasıl açılacağına göre türleri vardır.

1. ClusterIP (Varsayılan ve Dahili)​

type: ClusterIP

Hiçbir tür belirtmezseniz K8s bu servisi oluşturur.

  • Nasıl Çalışır?: Servise sadece küme (Cluster) içinden erişilebilen özel bir IP adresi atanır.
  • Erişim: Dış dünyadan (İnternetten) bu servise erişilemez. Sadece içerideki diğer Pod'lar erişebilir.
  • Kullanım Alanı: Veritabanları, Redis önbellekleri veya sadece backend'in erişmesi gereken dahili API'ler.
  • Debug İpucu: kubectl port-forward komutuyla geçici olarak geliştirici bilgisayarından erişilebilir.

2. NodePort (İlkel Dışa Açılım)​

type: NodePort

Servisi dış dünyaya açmanın en ilkel yoludur.

  • Nasıl Çalışır?: Kümedeki tüm Worker Node'ların üzerinde belirli bir portu (varsayılan: 30000-32767 aralığı) açar. O porta gelen trafiği servise yönlendirir.
  • Erişim: http://<Node-IP>:30000 adresinden erişilir.
  • Dezavantajları:
    • Port aralığı sınırlıdır (30000+).
    • Güvenlik riski oluşturur (Tüm sunucularda port açar).
    • IP adresi değişirse erişim kopar.
  • Kullanım Alanı: Geliştirme ortamları, geçici testler veya Load Balancer desteği olmayan "Bare-Metal" kurulumlar. Production ortamında önerilmez.

3. LoadBalancer (Bulut Standardı)​

type: LoadBalancer

AWS, Azure veya Google Cloud üzerinde çalışıyorsanız standart yöntem budur.

  • Nasıl Çalışır?: K8s, bulut sağlayıcısının API'si ile konuşur ve sizin için gerçek, fiziksel (veya sanal) bir Load Balancer cihazı kiralar. Size statik bir "Public IP" verir.
  • Erişim: http://203.0.113.1 (Size verilen Public IP).
  • Dezavantajı: Maliyet. Her bir servis için ayrı bir Load Balancer kiralanır. 50 mikroservisiniz varsa, 50 tane Load Balancer faturası ödersiniz.
  • Çözüm: Genellikle sadece 1 tane LoadBalancer servisi (Ingress Controller için) açılır ve tüm trafik oradan içeri alınır.

Headless Service (Bonus)​

ClusterIP: None

Bazen (özellikle veritabanı kümelerinde) Load Balancing istemezsiniz. Doğrudan belirli bir Pod'a (örn: mysql-0) gitmek istersiniz.Headless Service, bir IP adresi sağlamaz; bunun yerine Pod'ların IP adreslerini doğrudan DNS kaydı olarak döner. StatefulSets ile birlikte kullanılır.

Sonuç: Hangisini Seçmeliyim?​

  • Veritabanı mı? -> ClusterIP (veya Headless).
  • Sadece test mi yapıyorsun? -> NodePort.
  • Bulutta mısın ve tek bir giriş kapısı mı lazım? -> LoadBalancer (Ingress ile birlikte).
 
Geri
Üst