müfettiş
Moderatör
- Katılım
- 20 Ocak 2024
- Mesajlar
- 325
- Tepkime puanı
- 1
- Puanları
- 18
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: ClusterIPHiç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: NodePortServisi 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: LoadBalancerAWS, 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: NoneBazen (ö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).