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:
-
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 -
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 -
LoadBalancer Xidməti (Bulud Provayder səviyyəsində):
LoadBalancertipli 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 -
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.