Eindringen vs Load Balancer
Ich bin ziemlich verwirrt über die Rollen von ein-und Lastenausgleich in Kubernetes.
Soweit ich das verstehe Eindringen verwendet wird zum zuordnen von eingehenden Datenverkehr aus dem internet der Dienste im cluster.
Die Rolle der load balancer ist zum weiterleiten von Datenverkehr auf einem host. In dieser Hinsicht wie funktioniert ingress unterscheiden sich von der load balancer? Auch, was ist das Konzept der Lastenausgleich innerhalb kubernetes im Vergleich zu Amazon ELB und ALB?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Load Balancer: Eine kubernetes LoadBalancer-Dienst ist ein Dienst, Punkte zu externen load-Balancer, die NICHT in Ihrem kubernetes-cluster, es gibt aber anderswo. Sie können gemeinsam mit Ihrem pods, vorausgesetzt, dass Ihre Hülsen werden extern routbaren. Google und AWS bieten diese Funktion nativ. In Bezug auf Amazon, diese Karten direkt mit ELB-und kubernetes bei der Ausführung in der AWS können die automatische Bereitstellung und Konfiguration einer ELB-Instanz für jede LoadBalancer service bereitgestellt.
Ingress: Ein eindringen ist wirklich nur ein Satz von Regeln zur übergabe an einen controller, der zuhört, für Sie. Sie können die Bereitstellung einer Reihe von ingress-Regeln, aber es passiert nichts, es sei denn, Sie haben eine Steuerung, die Sie verarbeiten kann. Ein LoadBalancer-Dienst konnte hören für ingress-Regeln, wenn es dazu konfiguriert.
Können Sie auch eine NodePort - service, die ein extern routbarer IP außerhalb des Clusters, aber Punkte, um eine Hülse, existiert innerhalb der cluster. Dies könnte ein Eindringen Controller.
Einen Ingress-Controller ist einfach eine pod, die konfiguriert ist, zu interpretieren ingress-Regeln. Eines der beliebtesten eindringen Controllern unterstützt von kubernetes ist nginx. In Bezug auf Amazon, ALB verwendet werden können als ingress-controller.
Für ein Beispiel, diese nginx-controller ist in der Lage, ingest ingress-Regeln, die Sie definiert haben, und übersetzt Sie in eine nginx.conf-Datei, die es lädt und startet in seinem pod.
Lassen Sie uns zum Beispiel sagen, dass Sie ein eindringen wie folgt:
Wenn du dann überprüfen Sie Ihre nginx-controller-pod sehen Sie die folgende Regel definiert in
/etc/nginx.conf
:Nginx hat nur eine Regel angelegt die route
http://kubernetes.foo.bar/app
auf den serviceappsvc
im cluster.Hier ist ein Beispiel der Umsetzung eines kubernetes-cluster mit nginx eindringen controller. Hoffe, das hilft!
Fand ich diesen sehr interessanten Artikel was erklärt die Unterschiede zwischen NodePort, LoadBalancer und Eintritt.
Vom Inhalt vorhanden in dem Artikel:
LoadBalancer:
Ingress:
TL:DR
Beginnen wir mit praktischen Anwendungsfall: Sie haben mehrere Apis unterstützt durch service-Implementierung Pakete (ASIP für clariy und Kürze) zum bereitstellen von unter einem einzigen Domainnamen. Als Sie eine cutting-edge-Entwickler, implementiert einen micro-services-Architektur erfordert separate Bereitstellungen für jedes ASIP, so dass Sie kann aktualisiert werden, oder einzeln skaliert. Natürlich,diese ASIPs sind gekapselt in einzelnen docker-container zur Verfügung und Kubernetes (K8s) von container-repository.
Lassen Sie uns jetzt sagen, dass Sie bereitstellen möchten und dieses auf Google GKE K8s. Zur Umsetzung nachhaltigen Verfügbarkeit, jedes ASIP-Instanz (Kopie) bereitgestellt wird, die auf verschiedenen Knoten (VM), wo jede VM hat eine eigene cloud-interne IP-Adresse. Jedes ASIP-Bereitstellung konfiguriert ist, in einem treffenden Namen "deployment.yaml" - Datei, wo Sie deklarativ angeben, unter anderem, die Anzahl der Replikate des gegebenen ASIP K8s bereitstellen sollten.
Der nächste Schritt ist, um die API um die ouside Welt und Trichter Anfragen an eine der bereitgestellten ASIP-Instanz. Da wir viele Replikate des gleichen ASIP ausgeführt, die auf verschiedenen Knoten, wir brauchen etwas, das verteilen der Anfrage unter den Repliken. Um dies zu beheben, können wir erstellen und anwenden " - service.yaml" - Datei, die die Konfiguration einer K8s-service (KServ), der nach außen exponierten und erreichbar über eine IP-Adresse. Diese KServ übernehmen die API-Anforderung die Verteilung konfiguriert ASIPs. Beachten Sie, dass eine KServ werden automatisch neu konfiguriert, indem die K8s-master, wenn ein ASIP Knoten fehlschlägt und erneut gestartet wird. Interne IP-Adresse sind noch nie wieder in eine solche Falle und den KServ muss darüber informiert werden, dass die neuen ASIP deployment Lage.
Aber wir haben andere Api-service-Pakete, die werden ausgestellt auf dem gleichen domain-Namen. Spinning eine neue KServ wird, erstellen Sie eine neue externe IP-Adresse, und wir werden nicht in der Lage, aufzudecken es auf der gleichen domain-Namen. Gut, das ist, wo das Eindringen kommt.
Eindringen sit die zwischen dem Internet und all die KServices setzen wir auf die Außenwelt. Ingress ist in der Lage, einen load balancing, SSL-Terminierung und name-based virtual hosting. Die letztere Fähigkeit ist in der Lage zu route eine eingehende Anfrage an den richtigen service-von der Analyse ist es, die URL. Natürlich, Eindringen muss konfiguriert und angewendet werden, die mit einem... "eindringen.yaml" Datei, geben Sie das schreibt und der Routen erforderlich, um eine Anfrage zu senden, um das Recht KServ.
Internet -> Eindringen -> K8s-Dienste -> Repliken
So, mit der rechten eindringen, KServices und ASIPs-Konfiguration, können wir sicher setzen viele API ' s mit der gleichen domain-Namen.
Eindringen: Eindringen Objekt + Ingress-Controller
Eindringen Objekt:
Nur wie ein Service Objekt, außer es nicht zu tun, alles auf seine eigene. Ein Eindringen Objekt genau beschreibt, einen Weg, um route-Layer-7-Datenverkehr in Ihrem cluster, indem Sie Dinge wie die request-path, request-Domäne und Ziel kubernetes-service, während ein service-Objekt erstellt Dienstleistungen
Eindringen Controller:
Service der:
Z.B. der Nginx Eindringen Controller, könnte ein Dienst auf port 80 und 443 und dann Lesen, neue Objekte Eindringen und zu analysieren, diese in neue server {} - Abschnitten, die es dynamisch Orte in nginx.conf
LoadBalancer: Externe Load-Balancer-Anbieter + Service-Typ
Externen Load-Balancer-Anbieter:
Externen Load-Balancer-Anbieter sind in der Regel konfiguriert, die in clouds wie AWS und GKE und bieten eine Möglichkeit zum zuweisen von externen IPs, durch die Schaffung von externen load-balancers. Diese Funktionalität kann genutzt werden, durch die Benennung einer service als Typ "LoadBalancer".
Service Typ:
Wenn der service-Typ load-Balancer, Kubernetes versucht, zu erstellen, und dann das Programm eine externe load-balancer mit Einträgen für die Kubernetes-Hülsen, damit Sie Sie externe IPs.
Den Kubernetes-Dienst-controller automatisiert die Erstellung der externen load-balancer -, Gesundheits-checks (falls erforderlich), firewall-Regeln (falls nötig) und ruft die externe IP, die neu erstellt oder konfiguriert, LoadBalancer, die zugewiesen wurde, indem die cloud-Anbieter und füllt es in das service-Objekt.
Beziehungen:
Eindringen Controller-Services sind oft bereitgestellt als LoadBalancer geben, so dass http-und https-Anfragen werden umgeleitet /weitergeleitet, auf bestimmte interne Dienste über eine externe ip.
Jedoch ein load-Balancer ist nicht zwingend erforderlich für diese. Da durch die Verwendung von hostNetwork oder hostPort können Sie technisch binden einen port auf dem host-Dienst (erlaubt, Sie zu besuchen, es über die hosts externe ip:port). Obwohl offiziell dies wird nicht empfohlen, da es verwendet die ports auf den aktuellen Knoten.
Referenzen:
https://kubernetes.io/docs/concepts/configuration/overview/#services
https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/
https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#external-load-balancer-providers
https://kubernetes.io/docs/concepts/services-networking/ingress/
In einfachen Worten, load-balancer verteilt die Anfragen auf mehrere backend-services (des gleichen Typs) in der Erwägung, dass das eindringen ist mehr wie ein API-gateway (reverse proxy), die Routen der Anfrage zu einem bestimmten back-End-Dienst, basierend auf, zum Beispiel, die URL.