Un load balancer su Kubernetes distribuisce automaticamente il traffico di rete su più pod per garantire un carico equilibrato e un’elevata disponibilità. Viene solitamente implementato attraverso un servizio di tipo “LoadBalancer”, che inoltra le richieste esterne ai servizi interni. In questo modo, le applicazioni possono essere rese accessibili in modo affidabile e scalabile.

Managed Kubernetes
Orchestrazione sicura dei carichi di lavoro dei container
  • Configurazione automatica dei cluster Kubernetes
  • Archiviazione persistente completamente integrata
  • Assistenza clienti 24/7

Che cos’è un load balancer su Kubernetes?

Un load balancer serve, in genere, per distribuire il carico che i server o le macchine virtuali devono elaborare nel modo più efficiente possibile. In questo modo, è possibile migliorarne le prestazioni complessive. Normalmente, un load balancer viene posizionato inizialmente sui server per evitare che vengano sovraccaricati singolarmente. Questo assicura anche un uso ottimale delle risorse disponibili. Infatti, anche quando un server si guasta, il load balancer garantisce un sistema funzionante reindirizzando le richieste in modo mirato.

I load balancer su Kubernetes funzionano in modo leggermente diverso ma partono dalla stessa idea di fondo. Tuttavia, è necessario notare una distinzione tra due diversi tipi di load balancer su Kubernetes:

  • Load balancer interni
  • Load balancer esterni

Load balancer interni su Kubernetes

I load balancer interni hanno un approccio diverso rispetto a quelli classici. Questi, infatti, assicurano che solo le applicazioni in esecuzione sulla stessa rete virtuale del cluster Kubernetes possano accedervi.

Load balancer esterni su Kubernetes

I load balancer esterni assegnano a un nodo di servizio di un cluster Kubernetes gli indirizzi IP o nomi DNS di modo che possano ricevere le richieste HTTP esterne. Si tratta di un tipo di servizio Kubernetes speciale, progettato per instradare il traffico esterno verso i singoli pod Kubernetes del cluster, garantendo la migliore distribuzione delle richieste in arrivo.

N.B.

Esistono diversi algoritmi per configurare i load balancer su Kubernetes; quale scegliere dipende interamente dall’uso che se ne intende fare. I diversi algoritmi determinano principalmente il principio in base al quale il load balancer elabora il traffico in entrata.

Come funziona un load balancer?

Su Kubernetes, un load balancer assume il compito centrale di distribuire il traffico di rete in modo efficiente su più istanze di un servizio, cioè i pod. L’obiettivo è garantire un carico uniforme, aumentare la disponibilità e compensare i guasti di componenti singoli.

Tecnicamente, il load balancer riceve le richieste in entrata e verifica quali pod sono attualmente disponibili e funzionanti. Kubernetes utilizza un monitoraggio interno continuo: i pod che presentano errori o sovraccarichi vengono automaticamente esclusi dal routing. Il load balancer decide quindi dinamicamente a quale pod inoltrare la richiesta.

Questa distribuzione avviene sulla base di diversi criteri, senza che gli utenti se ne accorgano. L’applicazione rimane accessibile e performante, anche se in background vengono avviati singoli pod, vengono effettuati nuovi deploy o ci sono malfunzionamenti.

Immagine: Il funzionamento del load balancer di Kubernetes in sintesi
Il load balancer distribuisce il traffico esterno sui pod di un servizio nel cluster Kubernetes, rappresentati in giallo.

A cosa serve un load balancer su Kubernetes?

Un load balancer su Kubernetes definisce un servizio in esecuzione nel cluster che è accessibile attraverso la rete internet pubblica. Per capirlo, è utile dare un’occhiata all’architettura di Kubernetes. Un cluster comprende diversi nodi, che a loro volta contengono diversi pod. A ogni pod del cluster viene assegnato un IP interno a cui non si può accedere dall’esterno.

Rendere disponibile il software a un indirizzo IP fisso

Per rendere il software in esecuzione nei pod utilizzabile con un indirizzo IP dedicato, di solito è necessario un servizio Kubernetes. Oltre al load balancer, esistono altri tipi di servizio adatti a vari scenari di implementazione. Tutti i tipi di servizio hanno in comune il fatto di combinare un insieme di pod in un’unità logica e di descrivere il modo in cui vi si accede.

Distribuzione ottimale del traffico esterno

Un load balancer su Kubernetes ha lo scopo di fornire una distribuzione ottimale del traffico esterno ai pod del cluster Kubernetes. Per questo motivo i servizi sono adatti praticamente a qualsiasi applicazione. Poiché i load balancer su Kubernetes possono indirizzare il traffico ai singoli pod, è garantita l’alta disponibilità del cluster. Non appena un pod non funziona o presenta errori, il load balancer assicura che i compiti siano distribuiti agli altri pod.

Ottimizzare la scalabilità

Anche la scalabilità è migliorata dall’uso del load balancing. Kubernetes può creare o eliminare automaticamente i pod secondo le necessità. Quindi, se si determina che il traffico in arrivo richiede meno o più risorse di quelle attualmente disponibili, Kubernetes può rispondere automaticamente a questa circostanza.

Come creare un load balancer con Kubernetes

Per creare un load balancer con Kubernetes è necessario che il cluster sia in esecuzione in un cloud o in un ambiente che supporti la configurazione di load balancer esterni.

Su IONOS un IP statico viene assegnato a un nodo del cluster quando viene creato un load balancer Kubernetes. Con questo IP, il servizio può essere indirizzato dall’esterno del cluster. Il proxy Kube in esecuzione sul nodo distribuisce in modo intelligente il traffico in entrata ai singoli pod.

Per prima cosa, devi creare un servizio e assegnarvi il tipo di servizio “Load Balancer” nel manifesto del servizio nella riga seguente:

type: LoadBalancer

Ad esempio, la configurazione di un load balancer su Kubernetes 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 distribuito ai singoli pod. Il servizio in esecuzione sulla porta 80 di ogni pod viene indirizzato 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 Kubernetes è utilizzare la riga di comando kubectl.

Utilizzando il seguente comando crei e distribuisci 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
Hai trovato questo articolo utile?
Vai al menu principale