kubernetes network & services

kubernetes network & services

Kubernetes Ağ yönetimi:

1. iptables & route tables → Linux’ta ağ trafiğini yönlendirir, Kubernetes otomatik yönetir.

2. kube-proxy → Gelen trafiği pod’lara yönlendirir, iptables veya IPVS ile kurallar oluşturur.

3. CNI (Container Networking Interface) → Pod’lara IP adresi atar, ağ bağlantısını sağlar.

4. CNI Plugin’ler (Calico, Flannel, AWS-VPC-CNI) → Ağ politikalarını ve yönlendirmeyi belirler.

• Calico → Güvenlik ve ağ politikaları ekler.

• Flannel → Basit yönlendirme yapar, IP tünelleme kullanır.

• AWS-VPC-CNI → AWS’de her pod’a gerçek VPC IP’si atar.

5. Node → Pod’ların çalıştığı fiziksel/sanal sunucudur.

6. Pod → İçinde bir veya birden fazla konteyner bulunan en küçük birimdir.

7. CIDR → Node’lara tahsis edilen IP bloklarıdır, pod’lar buradan IP alır.

Pod’lar Arası İletişim

• Her pod’un kendi IP adresi vardır ve node’un ağı üzerinden yönlendirilir.

  • Pod’a atanmış IP’yi görmek için:
kubectl exec -it <pod> bash

ip a

• Node’da pod’un IP’sini görmek için:

ip route ls | grep <POD_IP>

Özetle

• Node, Kubernetes’te bir CIDR bloğuna sahiptir.
• Pod ayağa kalktığında, node bu CIDR bloğundan bir IP adresi seçer ve pod’a atar.
• Pod’un içinde bir sanal ağ arayüzü (eth0 gibi) oluşur ve bu IP buraya bağlanır.
• Node, kendi yönlendirme tablosunda (ip route) bu IP’nin hangi arayüzden geçtiğini gösterir.

Kubernetes Service & Örnek Senaryolar

Pod’lar ölçeklenirken veya yeniden başlatıldığında IP’leri değişebilir. Service, pod’ların sabit bir adres üzerinden erişilebilir olmasını sağlar.

1. ClusterIP (Varsayılan — İç Trafik)

📌 Senaryo: Bir e-ticaret sitesinin frontend kısmı, backend servisinden veri çekmek istiyor. Pod’ların IP’leri değişebileceğinden, ClusterIP kullanılarak backend sabit bir servis adıyla erişilebilir hale getirilir.

➡ Gerçek Hayatta Kullanım: Mikro servis mimarilerinde, arka plandaki servislerin (veritabanı, API’ler vb.) birbirine erişmesi gerektiğinde kullanılır.

2. NodePort (Dışarıdan Erişim — Belirli Node Portu Üzerinden)

📌 Senaryo: Kümede çalışan bir web uygulamasına, dış dünyadan herhangi bir node’un IP’si üzerinden erişmek istiyoruz. NodePort ile belirli bir port açılarak tüm node’lar üzerinden erişim sağlanır.

➡ Gerçek Hayatta Kullanım: Test ortamlarında dış dünyadan erişim gerektiğinde veya bir yük dengeleyici (Load Balancer) eklenmeden erişim sağlanmak istendiğinde kullanılır.

3. LoadBalancer (Dış Dünyaya Açık Servis)

📌 Senaryo: AWS veya GCP üzerinde çalışan bir REST API, internet üzerinden herkesin erişimine açılmalıdır. LoadBalancer türü kullanıldığında, cloud sağlayıcısı otomatik olarak bir dış IP adresi atar ve trafiği ilgili pod’lara yönlendirir.

➡ Gerçek Hayatta Kullanım: Gerçek dünya projelerinde, halka açık API’ler, web uygulamaları veya dış kullanıcıların bağlanması gereken hizmetler için kullanılır.

4. ExternalName (Harici Bir Servise DNS ile Yönlendirme)

📌 Senaryo: Kubernetes içindeki uygulamaların harici bir veritabanına (örneğin AWS RDS PostgreSQL) bağlanması gerekiyor. ExternalName, Kubernetes içindeki servisleri bir DNS adresine yönlendirerek, uygulamaların doğrudan bir dış kaynağa bağlanmasını sağlar.

➡ Gerçek Hayatta Kullanım: Kubernetes içindeki mikro servislerin, dış dünyadaki veritabanlarına veya hizmetlere sorunsuz erişmesini sağlamak için kullanılır.

ClusterIP → Servisler sadece küme içinden erişebilir (Mikro servisler arası iletişim).

• NodePort → Node’ların belirli bir portu açılarak dış erişim sağlanır (Test ortamları için kullanışlı).

• LoadBalancer → Cloud ortamında çalışan servisler dış dünyaya açılır (Web API’ler, web uygulamaları).

• ExternalName → Kubernetes içindeki servisler, harici bir servise DNS üzerinden yönlendirilir (Harici veritabanı veya API bağlantıları).

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Back To Top