Skip to main content

Kubernetes Küme’lerine Load Balancer Ekleme

Kubernetes kümeleri, yüksek erişilebilirlik, otomatik ölçekleme ve depolama entegrasyonlarıyla birlikte load balancer desteği sunar. Ayrıca standart Kubernetes araç zincirleri (kubectl, API & CLI) ile uyumludur.

Not:

Load balancer servisi, trafiği kümedeki tüm worker node’lara yönlendirir. Ancak yalnızca trafiği kabul edecek şekilde yapılandırılan node’lar sağlık kontrolünden geçer.
Diğer node’lar başarısız görünse de bu normaldir.

1. Yapılandırma Dosyası Oluşturma veya Güncelleme

Kümeye harici bir load balancer eklemek için yeni bir servis yapılandırma dosyası oluşturabilirsiniz. Örneğin:

kind: Service
apiVersion: v1
metadata:
name: tcp-lb
spec:
type: LoadBalancer
selector:
app: nginx-example
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80

Eğer mevcut bir servis dosyanız varsa, sadece aşağıdaki satırları ekleyerek load balancer tanımlayabilirsiniz:

spec:
type: LoadBalancer
selector:
app: nginx-example
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80

Load Balancer Ayarlarını Yapılandırma

Load balancer oluştururken, node (düğüm) sayısını ve firewall (güvenlik duvarı) kurallarını yapılandırma dosyasında belirleyebilirsiniz.

Node Sayısı (Düğüm Sayısı)

Bir load balancer’ın sahip olduğu node sayısı, aynı anda kaç bağlantıyı sürdürebileceğini belirler.

  • Daha fazla node, daha fazla bağlantı kapasitesi ve yüksek erişilebilirlik (high availability) sağlar.
  • Varsayılan node sayısı 1’dir.
  • Node sayısı 1 ile 200 arasında bir tam sayı olabilir.
  • Hesabınızdaki maksimum node limiti, hesap ayarlarınıza bağlıdır.

Daha yüksek limit talep etmek için Destek Ekibi ile iletişime geçebilirsiniz.

Node Sayısı Tanımlama

Bir load balancer oluştururken node sayısını belirtmek için size unit anotasyonu kullanılır. Servis dosyasında örnek kullanım şu şekildedir:

apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
type: LoadBalancer
selector:
app: nginx-example
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80

Load Balancer Firewall Kuralları

Bir load balancer oluşturulduktan sonra, yeniden boyutlandırma işlemi dakikada bir kez yapılabilir.

Load balancer erişimini kontrol etmek için firewall kuralları tanımlayabilirsiniz.

  • LoadBalancerSourceRanges alanı ile hangi IP adreslerinin bağlantı kurabileceğini belirleyebilirsiniz.
  • deny-list anotasyonu ile istenmeyen IP bloklarını engelleyebilirsiniz.

Aşağıdaki örnek yapılandırmada:

  • 198.51.100.0/16 IP bloğu engellenmiştir,
  • 203.0.113.24 ve 203.0.113.68 IP adreslerinden gelen bağlantılar ise izinlidir.
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
type: LoadBalancer
selector:
app: nginx-example
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80
loadBalancerSourceRanges:
- 203.0.113.24/32
- 203.0.113.68/32

Load balancer oluşturma işlemi tamamlandığında faturalandırma başlar.

Servis yapılandırma dosyasındaki anotasyonları (annotations) kullanarak ek load balancer ayarlarını yapabilirsiniz. Örneğin dahili (internal) bir load balancer ekleyebilir veya sağlık kontrollerini (health checks) belirleyebilirsiniz.

Load Balancer’ları Görüntüleme

Yapılandırma dosyasını bir deployment’a uyguladıktan sonra, load balancer’ı kontrol panelinde kümenizin Resources sekmesinde görebilirsiniz.

Alternatif olarak, load balancer durumunu görmek için şu komutu kullanabilirsiniz:

kubectl get services
NAME                   TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)        AGE
kubernetes ClusterIP 192.0.2.1 <none> 443/TCP 2h
sample-load-balancer LoadBalancer 192.0.2.167 <pending> 80:32490/TCP 6s

Load balancer oluşturma işlemi tamamlandığında, EXTERNAL-IP sütununda <pending> yerine dış IP adresi görünür.
PORT(S) sütununda ise ilk port (80) gelen trafik portu, ikinci port (32490) ise node port’tur. Bu, targetPort parametresinde belirtilen container portu değildir.

⚠️ Uyarı

Kümenin Resources sekmesine ek olarak; worker node’lar, load balancer’lar ve diskler (volumes) de Kubernetes sayfası dışında listelenir.

Eğer bu kaynakları kontrol paneli üzerinden yeniden adlandırır veya değiştirirseniz:

  • Küme tarafından kullanılamaz hale gelebilirler,
  • Veya reconciler (yeniden eşleyici) yeni kaynaklar oluşturabilir.

Bunu önlemek için küme kaynaklarını yalnızca kubectl komutu veya kontrol panelinin Kubernetes sayfası üzerinden yönetin.

Tek Bir Load Balancer Detaylarını Görüntüleme

Belirli bir load balancer hakkında ayrıntılı bilgi almak için aşağıdaki komutu kullanabilirsiniz:

kubectl describe service <LB-İSİM>
Name:                     sample-load-balancer
Namespace: default
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"sample-load-balancer","namespace":"default"},"spec":{"ports":[{"name":"https",...
Selector: <none>
Type: LoadBalancer
IP Family Policy: SingleStack
IP Families: IPv4
IP: 10.245.178.117
IPs: 10.245.178.117
LoadBalancer Ingress: 203.0.113.86
Port: https 80/TCP
TargetPort: 443/TCP
NodePort: https 32490/TCP
Endpoints: <none>
Session Affinity: None
External Traffic Policy: Cluster
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal EnsuringLoadBalancer 3m (x2 over 38m) service-controller Ensuring load balancer
Normal EnsuredLoadBalancer 1m (x2 over 37m) service-controller Ensured load balancer