Mustern bedeutet

Wenn Ihre Anwendung nur einen Einstiegspunkt benötigt, damit Ihre Clients sie verwenden können, können Sie mit einem Dienst vom Typ Load Balancer ganz gut gehen. Viele Anwendungen machen heute jedoch mehr als einen Endpunkt verfügbar. Zum Beispiel haben wir vielleicht www.example.com, welche Features unser Unternehmen tut, einige Testimonials oder aktuelle Angebote usw. Aber wir können auch api.example.com für Leute haben, die programmatische Nonden zu unseren Diensten benötigen, app.example.com für die GUI-Version der App, blog.example.com für ein Community-Portal und so weiter. Innerhalb des Kubernetes-Clusters verfügen alle www,API, App und Blogs über einen separaten Dienst mit einer Reihe von Pods. Wenn Sie nun einen Dienst verfügbar machen müssen, können Sie den Load Balancer-Diensttyp verwenden. Das bedeutet, dass wir uns vier Load Balancer kosten werden. Eine bessere Lösung besteht darin, ein Hauptgateway für alle Anwendungsdienste zu haben, das weiß, welche URL-Anforderung an welchen Back-End-Dienst weitergeleitet werden soll. Wir brauchen eine Ingress-Ressource. Das einzige unterstützte Platzhalterzeichen für das Pfadfeld eines Eingangs ist das *-Zeichen. Das *-Zeichen muss einem Schrägstrich (/) folgen und das letzte Zeichen im Muster sein. Beispielsweise sind /*, /foo/* und /foo/bar/* gültige Muster, aber *, /foo/bar* und /foo/*/bar nicht. Sie müssen weiterhin Dienste für Ihre Pods einrichten, wie zuvor gezeigt, aber Sie müssen kein Typfeld darauf festlegen, da Routing und Lastenausgleich von der Ingress-Ebene behandelt werden.

Die Rolle des Dienstes wird auf seine Fähigkeit reduziert, Pods unter einem gemeinsamen Namen zu gruppieren. Letztendlich werden die beiden Pfade /foo und /bar durch eine gemeinsame IP-Adresse und einen gemeinsamen Domänennamen wie example.com/foo und example.com/bar bedient. Dies ist im Wesentlichen das API Gateway-Muster. In einem API-Gateway leitet eine einzelne Adresse Anforderungen an mehrere Back-End-Anwendungen weiter. Dies bedeutet, dass standardmäßig jeder Ingress-Controller alle Eingangsereignisse aus allen Namespaces abhört und entsprechende Direktiven und Regeln in die Nginx-Konfigurationsdatei einfügt. Der Nachteil ist, dass der Wert des Ports zwischen 30000 und 32767 liegen muss, eine Reichweite, die von bekannten Ports sicher aus dem Weg geht, aber auch auffallend unstandard ist im Vergleich zu den bekannten Ports 80 für HTTP und 443 für HTTPS. Die Zufälligkeit selbst ist auch eine Hürde, da es bedeutet, dass Sie nicht wissen, was der Wert vorher sein wird, was die Konfiguration von NAT, Firewall-Regeln usw. nur ein bisschen schwieriger macht – vor allem, wenn für jeden Dienst ein anderer, zufälliger Port festgelegt wird. Während der Controller einen Dienst erstellt, dessen Typ auf NodePort festgelegt ist, was bedeutet, dass ein zufälliger Port mit hoher Anzahl zugewiesen wird, müssen Sie jetzt nur noch wenige solcher Ports verwalten – die, die mit dem Ingress-Controller verbunden sind, und nicht für jeden Dienst.

Sie können ihn auch so konfigurieren, dass ein LoadBalancer-Typ verwendet wird, solange Sie in der Cloud arbeiten.