Un load balancer su Ku­ber­ne­tes di­stri­bui­sce au­to­ma­ti­ca­men­te il traffico di rete su più pod per garantire un carico equi­li­bra­to e un’elevata di­spo­ni­bi­li­tà. Viene so­li­ta­men­te im­ple­men­ta­to at­tra­ver­so un servizio di tipo “Load­Ba­lan­cer”, che inoltra le richieste esterne ai servizi interni. In questo modo, le ap­pli­ca­zio­ni possono essere rese ac­ces­si­bi­li in modo af­fi­da­bi­le e scalabile.

Managed Ku­ber­ne­tes
Or­che­stra­zio­ne sicura dei carichi di lavoro dei container
  • Con­fi­gu­ra­zio­ne au­to­ma­ti­ca dei cluster Ku­ber­ne­tes
  • Ar­chi­via­zio­ne per­si­sten­te com­ple­ta­men­te integrata
  • As­si­sten­za clienti 24/7

Che cos’è un load balancer su Ku­ber­ne­tes?

Un load balancer serve, in genere, per di­stri­bui­re il carico che i server o le macchine virtuali devono elaborare nel modo più ef­fi­cien­te possibile. In questo modo, è possibile mi­glio­rar­ne le pre­sta­zio­ni com­ples­si­ve. Nor­mal­men­te, un load balancer viene po­si­zio­na­to ini­zial­men­te sui server per evitare che vengano so­vrac­ca­ri­ca­ti sin­go­lar­men­te. Questo assicura anche un uso ottimale delle risorse di­spo­ni­bi­li. Infatti, anche quando un server si guasta, il load balancer ga­ran­ti­sce un sistema fun­zio­nan­te rein­di­riz­zan­do le richieste in modo mirato.

I load balancer su Ku­ber­ne­tes fun­zio­na­no in modo leg­ger­men­te diverso ma partono dalla stessa idea di fondo. Tuttavia, è ne­ces­sa­rio notare una di­stin­zio­ne tra due diversi tipi di load balancer su Ku­ber­ne­tes:

  • Load balancer interni
  • Load balancer esterni

Load balancer interni su Ku­ber­ne­tes

I load balancer interni hanno un approccio diverso rispetto a quelli classici. Questi, infatti, as­si­cu­ra­no che solo le ap­pli­ca­zio­ni in ese­cu­zio­ne sulla stessa rete virtuale del cluster Ku­ber­ne­tes possano accedervi.

Load balancer esterni su Ku­ber­ne­tes

I load balancer esterni assegnano a un nodo di servizio di un cluster Ku­ber­ne­tes gli indirizzi IP o nomi DNS di modo che possano ricevere le richieste HTTP esterne. Si tratta di un tipo di servizio Ku­ber­ne­tes speciale, pro­get­ta­to per in­stra­da­re il traffico esterno verso i singoli pod Ku­ber­ne­tes del cluster, ga­ran­ten­do la migliore di­stri­bu­zio­ne delle richieste in arrivo.

N.B.

Esistono diversi algoritmi per con­fi­gu­ra­re i load balancer su Ku­ber­ne­tes; quale scegliere dipende in­te­ra­men­te dall’uso che se ne intende fare. I diversi algoritmi de­ter­mi­na­no prin­ci­pal­men­te il principio in base al quale il load balancer elabora il traffico in entrata.

Come funziona un load balancer?

Su Ku­ber­ne­tes, un load balancer assume il compito centrale di di­stri­bui­re il traffico di rete in modo ef­fi­cien­te su più istanze di un servizio, cioè i pod. L’obiettivo è garantire un carico uniforme, aumentare la di­spo­ni­bi­li­tà e com­pen­sa­re i guasti di com­po­nen­ti singoli.

Tec­ni­ca­men­te, il load balancer riceve le richieste in entrata e verifica quali pod sono at­tual­men­te di­spo­ni­bi­li e fun­zio­nan­ti. Ku­ber­ne­tes utilizza un mo­ni­to­rag­gio interno continuo: i pod che pre­sen­ta­no errori o so­vrac­ca­ri­chi vengono au­to­ma­ti­ca­men­te esclusi dal routing. Il load balancer decide quindi di­na­mi­ca­men­te a quale pod inoltrare la richiesta.

Questa di­stri­bu­zio­ne avviene sulla base di diversi criteri, senza che gli utenti se ne accorgano. L’ap­pli­ca­zio­ne rimane ac­ces­si­bi­le e per­for­man­te, anche se in back­ground vengono avviati singoli pod, vengono ef­fet­tua­ti nuovi deploy o ci sono mal­fun­zio­na­men­ti.

Immagine: Il funzionamento del load balancer di Kubernetes in sintesi
Il load balancer di­stri­bui­sce il traffico esterno sui pod di un servizio nel cluster Ku­ber­ne­tes, rap­pre­sen­ta­ti in giallo.

A cosa serve un load balancer su Ku­ber­ne­tes?

Un load balancer su Ku­ber­ne­tes definisce un servizio in ese­cu­zio­ne nel cluster che è ac­ces­si­bi­le at­tra­ver­so la rete internet pubblica. Per capirlo, è utile dare un’occhiata all’ar­chi­tet­tu­ra di Ku­ber­ne­tes. Un cluster comprende diversi nodi, che a loro volta con­ten­go­no diversi pod. A ogni pod del cluster viene assegnato un IP interno a cui non si può accedere dall’esterno.

Rendere di­spo­ni­bi­le il software a un indirizzo IP fisso

Per rendere il software in ese­cu­zio­ne nei pod uti­liz­za­bi­le con un indirizzo IP dedicato, di solito è ne­ces­sa­rio un servizio Ku­ber­ne­tes. Oltre al load balancer, esistono altri tipi di servizio adatti a vari scenari di im­ple­men­ta­zio­ne. Tutti i tipi di servizio hanno in comune il fatto di combinare un insieme di pod in un’unità logica e di de­scri­ve­re il modo in cui vi si accede.

Di­stri­bu­zio­ne ottimale del traffico esterno

Un load balancer su Ku­ber­ne­tes ha lo scopo di fornire una di­stri­bu­zio­ne ottimale del traffico esterno ai pod del cluster Ku­ber­ne­tes. Per questo motivo i servizi sono adatti pra­ti­ca­men­te a qualsiasi ap­pli­ca­zio­ne. Poiché i load balancer su Ku­ber­ne­tes possono in­di­riz­za­re il traffico ai singoli pod, è garantita l’alta di­spo­ni­bi­li­tà del cluster. Non appena un pod non funziona o presenta errori, il load balancer assicura che i compiti siano di­stri­bui­ti agli altri pod.

Ot­ti­miz­za­re la sca­la­bi­li­tà

Anche la sca­la­bi­li­tà è mi­glio­ra­ta dall’uso del load balancing. Ku­ber­ne­tes può creare o eliminare au­to­ma­ti­ca­men­te i pod secondo le necessità. Quindi, se si determina che il traffico in arrivo richiede meno o più risorse di quelle at­tual­men­te di­spo­ni­bi­li, Ku­ber­ne­tes può ri­spon­de­re au­to­ma­ti­ca­men­te a questa cir­co­stan­za.

Come creare un load balancer con Ku­ber­ne­tes

Per creare un load balancer con Ku­ber­ne­tes è ne­ces­sa­rio che il cluster sia in ese­cu­zio­ne in un cloud o in un ambiente che supporti la con­fi­gu­ra­zio­ne di load balancer esterni.

Su IONOS un IP statico viene assegnato a un nodo del cluster quando viene creato un load balancer Ku­ber­ne­tes. Con questo IP, il servizio può essere in­di­riz­za­to dall’esterno del cluster. Il proxy Kube in ese­cu­zio­ne sul nodo di­stri­bui­sce in modo in­tel­li­gen­te il traffico in entrata ai singoli pod.

Per prima cosa, devi creare un servizio e as­se­gnar­vi il tipo di servizio “Load Balancer” nel manifesto del servizio nella riga seguente:

type: LoadBalancer

Ad esempio, la con­fi­gu­ra­zio­ne di un load balancer su Ku­ber­ne­tes potrebbe essere simile a questa: il servizio raggruppa i pod con il selettore “web-app”. Il traffico in entrata sull’IP del load balancer sulla porta 8080 viene di­stri­bui­to ai singoli pod. Il servizio in ese­cu­zio­ne sulla porta 80 di ogni pod viene in­di­riz­za­to così:

apiVersion: v1
kind: Service
metadata:
    name: web-app-service
spec:
    selector:
        app: web-app
    type: LoadBalancer
    loadBalancerIP: 203.0.113.0
    ports:
        - name: http
            port: 8080
            targetPort: 80
            protocol: TCP
yaml

Un altro modo per creare un load balancer con Ku­ber­ne­tes è uti­liz­za­re la riga di comando kubectl.

Uti­liz­zan­do il seguente comando crei e di­stri­bui­sci un nuovo servizio chiamato “test-service” che fungerà da load balancer:

kubectl expose deployment test --target-port=9376 \
    --name=test-service --type=LoadBalancer
bash

Se desideri conoscere l’indirizzo IP del servizio appena creato, il comando seguente può essere d’aiuto:

kubectl describe services test-service
bash
Vai al menu prin­ci­pa­le