Load-balancer met Kubernetes

Kubernetes

Load-balancer met Kubernetes

 
Voordat we deze functie nader bekijken, belichten we kort nog eens het belang van Kubernetes voor uw activiteit. Het is de vooraanstaande containerorkestrator op de markt. Hiermee kan de implementatie van applicaties binnen een cluster worden geautomatiseerd, of de servers nu fysiek zijn of niet.
 
 
 
 
 
 
 
 
 

Dankzij Kubernetes kunnen bedrijven zich richten op het ontwikkelen van software. Het maakt tevens meerdere taken eenvoudiger.

 

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.

Wat is een load-balancer?

Deze werklastverdeler moet de workload over verschillende servers of toepassingen verdelen. Het kan zowel op een fysieke, als op een virtuele infrastructuur worden geïnstalleerd. Software voor load balancing (of het verdelen van workloads) wordt dan tot een regelaar voor het leveren van toepassingen (“application delivery controller” of ADC). De gebruiker ervan kan de last automatisch laten veranderen, afhankelijk van de verwachte hoeveelheid dataverkeer.

De ADC bepaalt in realtime welke server of applicatie het beste het verzoek kan afhandelen, zodat het cluster stabiel blijft presteren. Bij een storing moet deze het dataverkeer ook omleiden naar een resource die het verwerken kan. Er zijn verschillende typen configuraties mogelijk.

Chronologisch gezien bevindt de load-balancer zich tussen de gebruiker en de server. Hij analyseert het verzoek, bepaalt welke machine beschikbaar is om het af te handelen en verstuurt het verzoek daarheen. Hij kan indien nodig ook servers toevoegen.

Load-balancing, zoals we net bespraken, is slechts een van de mogelijke toepassingen van de load-balancer. Hij komt ook van pas bij het ontlasten van een SSL-certificaat of om applicatiegroepen bij te werken. U kunt hem zelfs gebruiken om uw domeinnamen te routeren.

Er zijn twee soorten load-balancers:

  • L4-Loadbalancers of netwerk-loadbalancers

Ze verwerken gegevens van de vierde laag (of layer 4) op netwerk- en transportniveau (TCP/UDP). Deze load-balancers zijn niet gericht op applicatie-informatie, zoals het type content, cookies, de locatie van headers, enzovoorts. Ze zullen het verkeer dus alleen omleiden op basis van data in de netwerklaag.

  • L7-Loadbalancers of applicatie-loadbalancers

In tegenstelling tot L4 leiden ze het verkeer om op basis van de instellingen van de applicatielaag. Deze load-balancers verwerken meer gegevens en werken op basis van meer informatie. Hiertoe behoren bijvoorbeeld de HTTP-, HTTPS- en SSL-protocollen.

Load Balancer OVHcloud

Hoe werkt de load-balancer met Kubernetes?

Wanneer u Kubernetes voor uw applicaties gaat gebruiken, blijft de kwestie van het externe dataverkeer belangrijk. Dit onderwerp wordt kort besproken op de officiële website van Kubernetes, maar we zullen het in wat meer detail behandelen.

Er zijn een aantal manieren om extern dataverkeer naar uw cluster te leiden:

  • een proxy met ClusterIP gebruiken;
  • een dienst als NodePort definiëren;
  • een dienst als load-balancer declareren en deze daardoor openbaar tonen voor extern dataverkeer. Dit is de meest gebruikte methode.

ClusterIP via een proxy gebruiken

Deze methode wordt meestal gebruikt voor ontwikkeling en is standaard beschikbaar vanuit Kubernetes. Door een proxy te openen tussen uw externe bron en uw ClusterIP kunt u dataverkeer in goede banen leiden. U kunt het commando “kubectl” gebruiken om deze proxy te maken. Zodra deze operationeel is, bent u voor deze specifieke dienst rechtstreeks verbonden met het IP van uw cluster.

Een dienst presenteren als NodePort

Hierdoor kunt u de adressen van uw nodes individueel openbaar maken op bepaalde poorten (een vaste poort van de service vanaf 30000 tot 32767). Zo heeft u op elke node van buitenaf toegang tot uw dienst via de betreffende poort. Gebruik hiervoor de opdracht  <NodeIp>:<NodePort>

Deze methode is het overwegen waard, maar het blijft een relatief moeilijke methode voor services in een productieomgeving. Omdat u "niet-standaard" poorten gebruikt, moet u vaak een externe load-balancer configureren. Deze verwerkt de standaardpoorten en stuurt het dataverkeer door naar het verzoek « <NodeIp>:<NodePort> ».

Kiezen voor een load-balancer

Hierbij benoemt u een dienst tot load-balancer voor uw cluster. Zo wordt deze zichtbaar voor extern dataverkeer. Voor deze methode moet een load balancing-oplossing van een cloudprovider worden gebruikt, zoals onze Load Balancer. Deze regelt de service voor uw cluster en wijst er automatisch zijn NodePort aan toe.

Als u een productieomgeving heeft, raden wij u deze load-balancer aan. Er zijn echter twee belangrijke punten:

  • elke dienst die u definieert en implementeert als load-balancer, heeft een eigen IP-adres;
  • de OVHcloud Load Balancer is alleen beschikbaar voor gebruikers van de Managed Kubernetes Service.

Hij fungeert dan als een filter tussen inkomend extern dataverkeer en uw Kubernetes-cluster. U kunt maximaal 16 load-balancers per cluster inzetten, die u rechtstreeks vanaf uw K8s-interface kunt beheren. Onze handleidingen kunnen u verder helpen bij het configureren van uw load-balancer.

Een Ingress toevoegen aan uw load-balancer

Een Ingress is een Kubernetes-object dat de toegang van buitenaf tot de services van uw cluster regelt (zoals een HTTP-protocol). Maar wat is dan het verschil met een load-balancer?

Het vormt het enige ingangspunt tot uw cluster en werkt als een reverse proxy. Vervolgens stuurt Ingress op basis van een aantal geconfigureerde regels alle verzoeken door naar de verschillende diensten. Het wordt zichtbaar gemaakt voor extern dataverkeer via ClusterIP, NodePort of een load-balancer. De bekendste Ingress is NGINX Ingress Controller.

Waarom zou u een Ingress samen met uw load-balancer gebruiken? Gewoon om de kosten te verlagen. De facturatie van een load-balancer is gebaseerd op het aantal diensten dat hij orkestreert en dit heeft een beperkte capaciteit. Met een Ingress kunt u dus meer diensten aan dezelfde load-balancer koppelen en de kosten drukken.

Wat adviseert u mij?

Om deze vraag te beantwoorden moet u precies bepalen hoe u Kubernetes gebruikt.

De load-balancer is geschikt voor de meeste toepassingen. U kunt er een op maat maken voor elk van uw Kubernetes-services, waardoor later geen configuratie meer noodzakelijk is. Deze methode past echter niet binnen alle budgetten. Het leidt namelijk tot een complex beheer van een groot aantal IP-adressen.

Eenvoudiger: u kunt een load-balancer met erachter een Ingress gebruiken. Al uw diensten worden zo op hetzelfde IP-adres ondergebracht en u betaalt dan slechts één load-balancer.

U moet er echter voor zorgen dat de door dit model georkestreerde diensten een logische relatie met elkaar hebben. Anders kan het tot problemen of storingen leiden.

 

Een optimale configuratie kan een load-balancer zijn die aan een Ingress gekoppeld is voor elke "familie van diensten" of microservices. Hoe dit precies georganiseerd wordt, hangt af van de complexiteit van uw architecturen.