Kubernetes

Kubernetes Ingress

Kubernetes Ingress
Kubernetes heeft veel bewegende delen. Dit is te verwachten van elk model dat bedoeld is voor gedistribueerd computergebruik. Laten we eerst een paar relevante details over een typisch Kubernetes-cluster samenvatten om te ontdekken wat Kubernetes Ingress ons helpt te bereiken:

  1. Een toepassing die is geïmplementeerd op een Kubernetes-cluster, wordt uitgevoerd als verzamelingspods.
  2. De pods zijn in wezen containers die zijn gepland over meerdere knooppunten.
  3. Nodes kunnen fysieke servers of VM's zijn die worden aangeboden door uw hostingprovider. Uiteraard kun je Kubernetes ook op een on-premise server zetten, als je dat wilt.
  4. Elke Pod heeft een uniek IP-adres.
  5. Uw toepassing is opgesplitst in vele subcomponenten, vaak microservices genoemd.
  6. Heeft voor elke microservice van uw applicatie een bijbehorende Service in Kubernetes.
  7. In de context van Kubernetes, a Onderhoud stelt een verzameling pods bloot aan de rest van het cluster als een enkele abstractie. Een enkele virtuele IP.
  8. Dit helpt de ene service van uw applicatie te communiceren met een andere service. Het is een abstractie waarmee u een verzameling pods kunt adresseren, in plaats van het IP-adres van een pod op te geven, telkens wanneer u ermee wilt praten.
  9. Een Kubernetes-service fungeert ook als load balancer voor alle pods die hij vertegenwoordigt. Het verkeer wordt gelijkmatig verdeeld over alle knooppunten.

Tot nu toe zo goed. Elke service kan met een andere service praten. Deze communicatie is mogelijk over het hele Kubernetes-cluster

Blootstellingsdiensten

Als een boom valt in een bos en er is niemand in de buurt om het te horen, maakt het dan geluid??

Evenzo, als uw toepassing geen doel dient buiten het Kubernetes-cluster, maakt het dan echt uit of uw cluster goed is gebouwd of niet?? Waarschijnlijk niet.

Om u een concreet voorbeeld te geven, laten we zeggen dat we een klassieke web-app hebben die bestaat uit een frontend geschreven in Nodejs en een backend geschreven in Python die gebruikmaakt van een MySQL-database. U implementeert twee bijbehorende services op uw Kubernetes-cluster.

U maakt een Dockerfile waarin u aangeeft hoe u de frontend-software in een container moet verpakken, en op dezelfde manier verpakt u uw backend. Vervolgens implementeert u in uw Kubernetes-cluster twee services met elk een set pods erachter. De webservice kan praten met het databasecluster en vice versa.

Kubernetes stelt echter geen van deze services (die een essentieel HTTP-eindpunt zijn) bloot aan de rest van de wereld. Zoals vermeld in de officiële documenten:

Er wordt aangenomen dat services alleen virtuele IP's hebben die kunnen worden gerouteerd binnen het clusternetwerk

Dit is volkomen redelijk vanuit beveiligingsoogpunt, uw services kunnen met elkaar praten, maar het cluster staat externe entiteiten niet toe om rechtstreeks met de services te praten. Alleen uw webfrontend kan bijvoorbeeld met de databaseservice praten en niemand anders kan zelfs verzoeken naar de databaseservice sturen.

Het probleem doet zich voor als we kijken naar de use case van een frontend-service. Het moet worden blootgesteld aan de rest van het publiek, zodat eindgebruikers uw toepassing kunnen gebruiken. We stellen dergelijke Services bloot met Kubernetes Ingress.

Kubernetes Ingress

Ingress stelt HTTP- en HTTPS-routes van buiten het cluster bloot aan services binnen het cluster. U kunt de routeringsregels beheren door de Kubernetes Ingress-resource te definiëren. Maar het doet veel meer dan dat. Het blootleggen van een enkele service kan worden bereikt met behulp van verschillende andere alternatieven zoals NodePort of Load Balancers, maar deze faciliteiten hebben geen functies die geavanceerd genoeg zijn voor een moderne web-app.

Functies zoals het blootstellen van meerdere apps op één IP, het definiëren van routes, enz.

Laten we deze functies dus begrijpen voor de rest van het artikel:

Toegang tot één service

Dit is de eenvoudigste versie van het blootleggen van een enkele service, zoals een webfrontend met een IP (of een domeinnaam) en standaard HTTP- en HTTPS-poorten (i.e, 80 en 443).

Enkele fanout

Dit is een ingangsconfiguratie waarmee u inkomend verkeer naar een enkel IP-adres kunt toelaten en het naar meerdere services kunt routeren.

Het bestaat uit:

Single fanout is het geval waarbij een enkel IP-adres wordt gebruikt voor meerdere services. De services kunnen zich op verschillende paden in de URI bevinden, zoals foo.bar.com/admin kan een service zijn voor beheerders en foo.bar.com/home kan de service zijn die de startpagina van elke gebruiker genereert.

De ingangspoort zal altijd 80 of 443 zijn, maar de poort waar de services worden uitgevoerd (binnen het cluster) kan nogal verschillen.

Dit soort binnendringen helpt ons het aantal load balancers in het cluster te minimaliseren, omdat het in wezen als één werkt.

Op naam gebaseerde virtuele hosting

Openbare IP-adressen zijn eindig. Ze zijn ook vrij duur. Het idee van op naam gebaseerde virtuele hosting is ouder dan Kubernetes. De essentie is dat je de DNS-records voor verschillende websites zoals ww1.voorbeeld.com en ww2.voorbeeld.com naar hetzelfde IP-adres. De server die op dat IP-adres draait, zal het inkomende verzoek zien, en als de hostnaam die in het verzoek wordt genoemd voor ww1 . is.voorbeeld.com dan dient het die website voor u, en als ww2.voorbeeld.com wordt gevraagd, dan wordt dat geserveerd.

In de context van Kubernetes kunnen we twee services uitvoeren die bijvoorbeeld op poort 80 draaien en beide op een enkel IP-adres blootleggen met behulp van een ingang van poort 80. Op het ingangspunt het verkeer van ww1.voorbeeld.com wordt gescheiden van het verkeer voor ww2.voorbeeld.com. Vandaar de term op naam gebaseerde virtuele hosting.

Conclusie

Ingress in Kubernetes is behoorlijk geavanceerd om in één bericht te worden behandeld. Er zijn verschillende gebruiksscenario's voor en een verscheidenheid aan Ingress-controllers die de Ingress-functionaliteit aan uw cluster toevoegen. Ik zou aanraden om te beginnen met Nginx Ingress Controller.

Voor meer details en specificaties kunt u ook de officiële documentatie volgen.

OpenTTD versus Simutrans
Je eigen transportsimulatie maken kan leuk, ontspannend en buitengewoon aanlokkelijk zijn. Daarom moet je ervoor zorgen dat je zoveel mogelijk spellen...
OpenTTD-zelfstudie
OpenTTD is een van de meest populaire simulatiegames voor bedrijven die er zijn. In dit spel moet je een geweldig transportbedrijf creëren. U begint e...
SuperTuxKart voor Linux
SuperTuxKart is een geweldige titel die is ontworpen om je de Mario Kart-ervaring gratis te bieden op je Linux-systeem. Het is behoorlijk uitdagend en...