Load balancer con Kubernetes

Kubernetes

Load balancer con Kubernetes

 
Prima di analizzare Kubernetes nel dettaglio, ricordiamo perché questa funzionalità rappresenta un vantaggio per la tua attività. Si tratta di un orchestratore di container leader di mercato, che permette di automatizzare l'implementazione delle applicazioni all'interno di un cluster, indipendentemente dal fatto che i server siano fisici o meno.
 
 
 
 
 
 
 
 
 

Grazie a Kubernetes, le aziende si possono concentrare sullo sviluppo dei propri software ed effettuare diverse operazioni in modo semplificato.

 

Icons/concept/Lines/Line Communicating Created with Sketch.

L’automatisation du cycle de vie des applications conteneurisées

Ces services ont besoin d’être mis à l’échelle, afin de suivre la demande et d’optimiser leur usage des ressources. Kubernetes permet donc d’automatiser cette étape. Cela assure un déploiement continu (CI/CD) de nouvelles versions et réduit drastiquement la maintenance.

Icons/concept/Container Created with Sketch.

Le déploiement d’applications multi-conteneurs (multi-containers)

Certains logiciels peuvent utiliser plusieurs conteneurs à la fois (bases de données, front end, back end, cache…). Cette situation nécessite parfois de posséder plusieurs instances. Kubernetes apporte alors de la synchronisation lors du déploiement, entre les différents conteneurs et composants liés.

Icons/concept/Component/Component Square Created with Sketch.

Le lancement depuis n’importe quel environnement

Cloud public, cloud privé, serveur physique ou virtuel : Kubernetes s’implémente facilement, même dans une architecture hybride. Il offre une plus grande liberté à vos projets, en fonction de leur environnement.

Cos'è un load balancer?

Il load balancer distribuisce il carico di lavoro tra diversi server o applicazioni. Può essere installato su un'infrastruttura sia fisica che virtuale. Un software di load balancing (o bilanciamento del carico) è un controller di distribuzione delle applicazioni (application delivery controller o ADC), che permette di far evolvere il carico automaticamente, in base alle previsioni di traffico.

L’ADC identifica in tempo reale quale server o applicazione è in grado di rispondere a una richiesta, in modo che il cluster mantenga un livello di performance stabile. In caso di malfunzionamenti, dovrà anche reindirizzare il traffico verso una risorsa in grado di gestirlo. Sono possibili diversi tipi di configurazioni.

A livello temporale, il load balancer interviene tra l'utente e il server: analizza la richiesta, determina quale macchina è disponibile per rispondervi e gliela trasmette. Può anche aggiungere server in caso di necessità.

La ripartizione del carico, come abbiamo visto, è solo una delle funzionalità possibili del load balancer. Questa soluzione può essere utilizzata anche per sbloccare un certificato SSL, aggiornare gruppi di applicazioni, o per il routing dei tuoi domini.

Esistono due tipi di load balancer:

  • I "load balancer L4" o "network load balancer"

Questi load balancer trattano i dati del layer 4 presenti a livello di rete e di trasporto (TCP/UDP). Non si concentrano sulle informazioni applicative, come il tipo di contenuto, i cookies, la localizzazione degli header, ecc.: reindirizzano il traffico basandosi esclusivamente sui dati del livello di rete.

  • I "load balancer L7" o "application load balancer"

A differenza degli L4, reindirizzano il traffico utilizzando i parametri del livello applicativo. Questi load balancer elaborano un volume di dati più elevato e si basano su maggiori quantità di informazioni, inclusi i protocolli HTTP, HTTPS e SSL.

Load Balancer OVHcloud

Come funziona il Load Balancer con Kubernetes?

Quando inizi a utilizzare Kubernetes per le tue applicazioni, un aspetto non trascurabile è quello del traffico esterno. Questo tema è trattato brevemente sul sito di Kubernetes, mentre ora entreremo nei dettagli.

Esistono diversi modi per instradare traffico esterno verso il tuo cluster:

  • utilizzare un proxy con il ClusterIP;
  • definire un servizio come NodePort;
  • dichiarare un servizio come load balancer ed esporlo al traffico esterno. Questo metodo è il più utilizzato.

Utilizza il ClusterIP tramite un proxy

Questo metodo è generalmente utilizzato per lo sviluppo e disponibile di default da Kubernetes. L'apertura di un proxy tra la tua fonte esterna e il ClusterIP ti permette di instradare il traffico. Per creare questo proxy, utilizza il comando "kubectl". Una volta operativo, sarai connesso direttamente all'IP del tuo cluster per questo servizio specifico.

Esporre un servizio come NodePort

In questo modo, puoi esporre gli indirizzi dei tuoi nodi individualmente sulle porte interessate (una porta fissa del servizio da 30000 a 32767) e accedere al servizio dall'esterno tramite la tua porta, su ogni nodo. Per effettuare questa operazione utilizza il comando <NodeIp>:<NodePort>

Benché possibile, questo metodo è relativamente difficile per i servizi in produzione. Dato che utilizzi porte "non standard", devi configurare spesso un ripartitore di carico esterno, che tratta le porte standard e reindirizza il traffico verso la richiesta "<NodeIp>:<NodePort".

Utilizzare un load balancer

Utilizzare un load balancer significa dichiarare un servizio come load balancer per il tuo cluster, esponendolo così al traffico esterno. Questo metodo richiede l'utilizzo della soluzione di load balancing di un provider Cloud, come il nostro Load Balancer. Questa soluzione eseguirà il provisioning del servizio per il tuo cluster, assegnandogli automaticamente il suo NodePort.

Se disponi di un ambiente di produzione, il load balancer è la soluzione adatta a te. Tuttavia, ricorda che:

  • ogni servizio definito e implementato come load balancer dispone del proprio indirizzo IP;
  • l'utilizzo del Load Balancer OVHcloud è riservato agli utenti del servizio Managed Kubernetes.

Agisce quindi come filtro tra il traffico esterno in entrata e il cluster Kubernetes. Puoi implementare fino a 16 load balancer per cluster, che puoi gestire direttamente dall'interfaccia K8s. Le nostre guide sono a tua disposizione per aiutarti nella configurazione del tuo load balancer.

Utilizza un Ingress con il tuo load balancer

L'Ingress è un oggetto Kubernetes che gestisce l'accesso ai servizi del tuo cluster dall'esterno (ad esempio un protocollo HTTP). Ma allora, qual è la differenza con un load balancer?

L’Ingress, unico punto di accesso al cluster, funziona come un reverse proxy. Reindirizza, secondo una configurazione di regole, le richieste che riceve ai diversi servizi ed è esposto al traffico esterno da ClusterIP, NodePort o un load balancer. L'Ingress più conosciuto è NGINX Ingress Controller.

Perché utilizzare un Ingress con il tuo load balancer? Semplicemente, per ridurre i costi. La fatturazione di un load balancer è stabilita in base al numero di servizi che orchestra, con capacità limitata. Grazie a un Ingress, puoi associare più servizi allo stesso load balancer e diminuire le spese.

Cosa ti consigliamo?

Per rispondere a questa domanda, devi valutare attentamente il tuo utilizzo di Kubernetes.

Il load balancer è adatto alla maggior parte delle esigenze. Puoi averne uno personalizzato per ciascuno dei tuoi servizi Kubernetes, senza doverti occupare, in seguito, della configurazione. Questo metodo, tuttavia, non è adatto a tutti i budget e può essere complesso: devi infatti gestire una grande quantità di indirizzi IP.

Un’opzione più semplice è utilizzare un load balancer e poi un Ingress. In questo modo, tutti i tuoi servizi vengono organizzati sotto lo stesso indirizzo IP e paghi un solo load balancer.

Tuttavia, devi assicurarti che esista un rapporto logico tra i servizi orchestrati da questo modello. In caso contrario, potrebbero verificarsi malfunzionamenti o guasti.

 

Una configurazione ottimale potrebbe essere un load balancer associato a un Ingress per ogni "famiglia di servizi” o di microservizi. L'organizzazione dipenderà dalla complessità delle tue architetture.