Come creare e applicare un load balancer con Kubernetes
Affinché Kubernetes sia il più efficiente possibile, è importante che il carico di lavoro sia distribuito in modo ottimale tra i diversi pod. A questo scopo, un load balancer rappresenta una soluzione eccellente per il software di gestione 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 viene utilizzato, 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 i singoli server vengano sovraccaricati. 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
Per offrirvi una guida più completa, daremo una rapida occhiata ai load balancer interni su Kubernetes, ma il fulcro dell’articolo rimarranno quelli esterni. I load balancer interni hanno un approccio diverso rispetto ai load balancer 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 del cluster, garantendo la migliore distribuzione delle richieste in arrivo.
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.
Non utilizzate ancora Kubernetes? Il servizio Managed Kubernetes di IONOS vi permette di distribuire le vostre applicazioni container su Kubernetes e di beneficiare degli ampi vantaggi del software di gestione dei container! Il nostro tutorial su Kubernetes può aiutarvi nei primi passi con Kubernetes.
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. In questo modo i pod vengono creati e rimossi automaticamente e gli IP vengono riassegnati.
Per rendere il software in esecuzione nei pod utilizzabile a un indirizzo fisso, 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:
“a Service is an abstraction which defines a logical set of Pods and a policy by which to access them”– Fonte: https://kubernetes.io/docs/concepts/services-networking/service/
Traduzione: “un servizio è un’astrazione che definisce un insieme logico di pod e le regole secondo cui accedervi” (tradotto da IONOS)
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.
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, dovete 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
spec:
selector:
app: web-app
type: LoadBalancer
loadBalancerIP: 203.0.113.0
ports:
- name: http
port: 8080
targetPort: 80
protocol: TCP
phpUn altro modo per creare un load balancer con Kubernetes è utilizzare la riga di comando kubectl.
Utilizzando il seguente comando create e distribuite un nuovo servizio chiamato test-service che fungerà da load balancer:
kubectl expose deployment test --target-port=9376 \ --name=test-service –type=LoadBalancer
Se desiderate conoscere l’indirizzo IP del servizio appena creato, il comando seguente può essere d’aiuto:
kubectl describe services test-service