Middle+
Hogyan valósul meg a terheléselosztás a Kubernetesben?
sobes.tech MI
Válasz az MI-től
A terheléselosztás a Kubernetesben több szinten valósul meg:
-
Szolgáltatás (a Kube-proxy szintjén):
- Minden Pod egyedi IP-címet kap a Szolgáltatásban.
- A Kube-proxy, amely minden csomóponton fut, figyeli a Szolgáltatás és az EndpointSlice változásait.
- Átirányítási szabályokat állít be (iptables, ipvs) a Szolgáltatás cluster IP-címére.
- A cluster IP-re érkező forgalom a kiválasztott algoritmus szerint (alapértelmezett Round Robin) oszlik meg a Podok között.
- Két működési módja van a Kube-proxy-nak: iptables (alapértelmezett, Linux netfilteren alapuló) és ipvs (nagyobb klaszterekhez hatékonyabb, Virtual Server API-n alapuló).
apiVersion: v1 kind: Service metadata: name: my-service spec: selector: app: my-app # Podokat választ ki az app: my-app címkével ports: - protocol: TCP port: 80 # A Szolgáltatás portja targetPort: 8080 # A Podok portja -
Ingress (az L7 szinten):
- Egyetlen belépési pontként működik a HTTP/S forgalom külső terheléselosztásához.
- Szükség van Ingress kontrollerrre (pl. Nginx Ingress Controller) a szabályok megvalósításához.
- A forgalmat a URL útvonal, a hosztnév és más L7 szabályok alapján irányítja egy adott Szolgáltatás felé a klaszteren belül.
- Lehetővé teszi különböző terheléselosztási stratégiák, SSL terminálás, név alapú virtuális hosztolás megvalósítását.
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 # Ez a Szolgáltatás kapja a forgalmat port: number: 80 -
LoadBalancer Service (a Cloud Provider szintjén):
- A
LoadBalancertípusú Service létrehozásakor a Kubernetes kommunikál a felhőszolgáltató API-jával (AWS, GCP, Azure stb.). - A szolgáltató létrehoz egy külső terheléselosztót, amely a klaszter csomópontjai felé irányítja a forgalmat.
- Ezután a Kube-proxy átirányítja a forgalmat a Podokra a klaszteren belül.
- Ez a típusú Service külső hozzáférést és terheléselosztást biztosít L4 (TCP/UDP) vagy L7 (HTTP/S) szinten a szolgáltató függvényében.
apiVersion: v1 kind: Service metadata: name: my-external-service spec: selector: app: my-app ports: - protocol: TCP port: 80 targetPort: 8080 type: LoadBalancer # Külső terheléselosztót hoz létre - A
-
Egyedi Load Balancers (pl. HAProxy, Nginx Podként):
- A klaszteren belül telepíthető egy terheléselosztó Deployment és Service (ClusterIP vagy NodePort) formájában.
- A külső forgalmat erre a Service-re lehet irányítani.
- A load balancer önállóan osztja el a forgalmat más Podok között.
Így a Kubernetes több szintű megközelítést kínál a terheléselosztáshoz, ötvözve a beépített mechanizmusokat (Service, Kube-proxy) külső megoldásokkal (Ingress, Cloud Provider Load Balancers) és a saját load balancer-ek telepítésének lehetőségével.