Routen und Domains

Einige Apps sind nützlich, ohne von außerhalb des Clusters zugänglich zu sein, die meisten müssen jedoch außerhalb des Clusters auf einem oder mehreren HTTP-Endpunkten verfügbar sein. In Kf ist dies der Job von Routes.

Standardmäßig ist jede Anwendung mithilfe der internen Clusteradresse der Anwendung für andere Prozesse im Cluster zugänglich. app-name.space-name. Sie können diese Adresse verwenden, wenn Sie eine oder mehrere Anwendungen in einem Cluster bereitstellen, die miteinander kommunizieren müssen. Damit können Traffic direkt von einer Anwendung zu einer anderen geleitet werden, nicht aus dem Cluster und wieder zurück. Dies macht die Kommunikation sicherer, schneller und garantiert die Verwendung des Dienstes im lokalen Cluster.

Wenn Ihre Anwendung von außerhalb des Clusters zugänglich sein muss, müssen Sie Routen dafür erstellen.

Die clusterinterne Domain

Die clusterinterne Domain für jede Anwendung weist einige besondere Merkmale auf.

  • Die Verwendung in Ihren Apps ermöglicht Ost-West -Routing (Punkt-zu-Punkt).
  • An den Traffic gesendeter Traffic wird zwischen den ausgeführten App-Pods per Load-Balancing verteilt.
  • Sie können über die interne Domain eine Verbindung zu Nicht-HTTP-Endpunkten herstellen.

Mit Routen können Sie Vanity-URLs zusätzlich zur clusterinternen Domain erstellen.

App-Lastenausgleich

Der Traffic wird von Istio mithilfe einer Round-Robin-Richtlinie an fehlerfreie Instanzen einer Anwendung weitergeleitet. Derzeit kann diese Richtlinie nicht geändert werden.

Routenfunktionen

Routen steuern das Ingress-Gateway des Clusters, wo Traffic bereitgestellt werden soll und was geschieht, wenn unter der angegebenen Adresse keine Anwendungen verfügbar sind. Wenn auf einer Route keine App verfügbar ist und die Route eine Anfrage erhält, wird standardmäßig ein HTTP 503-Statuscode zurückgegeben.

Routen bestehen aus drei Teilen: Host, Domain und Pfad. Beispiel für den URI payroll.mydatacenter.example.com/login:

  • Der Host ist payroll.
  • Die Domain ist mydatacenter.example.com.
  • Der Pfad ist /login

Routen müssen einen Host und eine Domain enthalten, der Pfad ist jedoch optional. Mehrere Routen können denselben Host und dieselbe Domain verwenden, wenn sie unterschiedliche Pfade angeben. Mehrere Apps können dieselbe Route nutzen und der Traffic wird zwischen ihnen aufgeteilt. Dies ist nützlich, wenn Sie alte Blau/Grün-Bereitstellungen unterstützen müssen. Wenn mehrere Apps an verschiedene Pfade gebunden sind, ist die Priorität vom längsten zum kürzesten Pfad.

Routen verwenden

In den folgenden Abschnitten wird beschrieben, wie die kf-Befehlszeile zum Verwalten von Routen verwendet wird.

Routen auflisten

Entwickler können Routen für den aktuellen Raum mit dem Befehl kf routes auflisten.

$ kf routes
Getting Routes in Space: my-space
Found 2 Routes in Space my-space

HOST    DOMAIN       PATH    APPS
echo    example.com  /       echo
*       example.com  /login  uaa

Route erstellen

Entwickler können Routen mit dem Befehl kf create-route erstellen.

# Create a Route in the targeted Space to match traffic for myapp.example.com/*
$ kf create-route example.com --hostname myapp

# Create a Route in the Space myspace to match traffic for myapp.example.com/*
$ kf create-route -n myspace example.com --hostname myapp

# Create a Route in the targeted Space to match traffic for myapp.example.com/mypath*
$ kf create-route example.com --hostname myapp --path /mypath

# You can also supply the Space name as the first parameter if you have
# scripts that rely on the old cf style API.
$ kf create-route myspace example.com --hostname myapp # myapp.example.com

Wenn nach der Erstellung einer Route keine Apps daran gebunden sind, wird für alle übereinstimmenden Anfragen ein HTTP 503-Statuscode zurückgegeben.

Ordnen Sie Ihrer App eine Route zu

Entwickler können ihre Anwendung mit dem Befehl kf map-route über eine Route zugänglich machen.

$ kf map-route MYAPP mycluster.example.com --host myapp --path mypath

Heben Sie die Zuordnung einer Route auf

Entwickler können ihre App mithilfe des Befehls kf unmap-route aus der Route entfernen.

$ kf unmap-route MYAPP mycluster.example.com --host myapp --path mypath

Route löschen

Entwickler können eine Route mit dem Befehl kf delete-route löschen.

$ kf delete-route mycluster.example.com --host myapp --path mypath

Wenn Sie eine Route löschen, wird der Traffic nicht mehr an alle Anwendungen weitergeleitet, die die Route überwachen.

Deklarative Routen in Ihrem App-Manifest

Routen können deklarativ in Ihrer App-Manifestdatei verwaltet werden. Sie werden erstellt, wenn sie noch nicht vorhanden sind.

---
applications:
- name: my-app
  # ...
  routes:
  - route: example.com
  - route: www.example.com/path

Weitere Informationen zu den unterstützten Routenattributen finden Sie in der Manifestdokumentation.

Themen für Fortgeschrittene

Routing-CRDs

Es gibt vier Typen, die für das Routing relevant sind:

  • VirtualService
  • Route
  • Dienst
  • App

Jede App hat einen Dienst, bei dem es sich um einen abstrakten Namen handelt, der allen ausgeführten Instanzen Ihrer App zugewiesen wird. Der Name des Dienstes ist mit dem Namen der App identisch. Eine Route stellt eine einzelne externe URL dar. Routen überwachen kontinuierlich Änderungen an Anwendungen. Wenn eine Anwendung angefordert wird, dass sie einer Route hinzugefügt wird, aktualisiert die Route die Liste der Apps und dann den VirtualService. Ein VirtualService stellt eine einzelne Domain dar und führt eine Liste aller Routen in einem Space zusammen, die zu dieser Domain gehören.

Istio liest die Konfiguration in VirtualServices, um zu bestimmen, wie der Traffic weitergeleitet wird.