Sobes.tech
Middle+

Kubernetes-də yük balanslaşdırması necə həyata keçirilir?

sobes.tech Süni İntellekt

AI-dan cavab

Kubernetes-də yük balanslaşdırma bir neçə səviyyədə həyata keçirilir:

  1. Xidmət (Kube-proxy səviyyəsində):

    • Hər Pod Xidmət daxilində unikal IP ünvanı alır.
    • Kube-proxy, hər bir nodda işləyən, Xidmət və EndpointSlice-də dəyişiklikləri izləyir.
    • Trafiki yönləndirmə qaydalarını (iptables, ipvs) konfiqurasiya edir.
    • Trafik, Xidmətin klaster IP ünvanına yönəldildikdə, seçilmiş algoritm (standart Round Robin) ilə Podlar arasında paylanır.
    • Kube-proxy üçün iki işləmə rejimi mövcuddur: iptables (standart, Linux netfilter əsasında) və ipvs (böyük klasterlər üçün daha səmərəli, Virtual Server API əsasında).
    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
    spec:
      selector:
        app: my-app # app: my-app etiketi olan Podları seçir
      ports:
        - protocol: TCP
          port: 80 # Xidmət portu
          targetPort: 8080 # Podlar üzərində port
    
  2. Ingress (L7 səviyyəsində):

    • Xarici HTTP/S yük balanslaşdırması üçün vahid giriş nöqtəsi kimi işləyir.
    • Qaydaları həyata keçirmək üçün Ingress controller (məsələn, Nginx Ingress Controller) tələb olunur.
    • URL yolu, host adı və digər L7 qaydalarına əsasən trafiki müəyyən bir Xidmətə yönləndirir.
    • Müxtəlif yük balanslaşdırma strategiyaları, SSL terminasyonu, ad əsasında virtual hosting həyata keçirməyə imkan verir.
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: my-ingress
    spec:
      rules:
      - host: myapp.example.com
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-service # Bu Xidmətə trafiki yönləndirir
                port:
                  number: 80
    
  3. LoadBalancer Xidməti (Bulud Provayder səviyyəsində):

    • LoadBalancer tipli Xidmət yaradıldıqda, Kubernetes bulud provayderinin API-si ilə əlaqə qurur (AWS, GCP, Azure və s.).
    • Provayder xarici yük balanslaşdırıcısı yaradır və trafiki klasterin düyünlərinə yönəldir.
    • Sonra, Kube-proxy trafiki klaster daxilində Podlara yönəldir.
    • Bu tip Xidmət xarici giriş və L4 (TCP/UDP) və ya L7 (HTTP/S) səviyyəsində yük balanslaşdırma təmin edir, provayderdən asılı olaraq.
    apiVersion: v1
    kind: Service
    metadata:
      name: my-external-service
    spec:
      selector:
        app: my-app
      ports:
        - protocol: TCP
          port: 80
          targetPort: 8080
      type: LoadBalancer # Xarici yük balanslaşdırıcısı yaradır
    
  4. Xüsusi Yük Balanslaşdırıcılar (məsələn, HAProxy, Nginx Pod kimi):

    • Klaster daxilində Deployment və Service (ClusterIP və ya NodePort) kimi yerləşdirilə bilər.
    • Xarici trafiki bu Service-ə konfiqurasiya edin.
    • Yük balanslaşdırıcı digər Podlar arasında trafiki paylayacaq.

Beləliklə, Kubernetes daxili mexanizmlər (Service, Kube-proxy) ilə xarici həlləri (Ingress, Cloud Provider Load Balancers) və xüsusi yük balanslaşdırıcıların yerləşdirilməsini birləşdirən çox səviyyəli yanaşma təklif edir.