Route e domini

Alcune app sono utili senza essere accessibili dall'esterno del cluster, ma la maggior parte deve essere disponibile all'esterno del cluster su uno o più endpoint HTTP. In Kf, questo è il compito di Routes.

Per impostazione predefinita, ogni app è accessibile ad altri processi nel cluster utilizzando l'indirizzo app interno del cluster: app-name.space-name. Puoi utilizzare questo indirizzo quando esegui il deployment di una o più app in un cluster che devono comunicare tra loro perché consentono al traffico di passare direttamente da un'app all'altra anziché uscire e tornare al cluster. Ciò rende le comunicazioni più sicure, veloci e garantite per l'utilizzo del servizio nel cluster locale.

Se la tua app deve essere accessibile dall'esterno del cluster, devi creare route per l'app.

Il dominio interno del cluster

Il dominio interno del cluster per ogni app ha alcune caratteristiche speciali.

  • L'utilizzo nelle app consente il percorso Est-Ovest (punto a punto).
  • Il traffico che gli viene inviato viene bilanciato del carico tra i pod dell'app in esecuzione.
  • Puoi connetterti a endpoint non HTTP utilizzando il dominio interno.

Le route consentono di creare vanity URL sul dominio interno del cluster.

Bilanciamento del carico delle app

Il traffico viene instradato da Istio a istanze integre di un'app utilizzando un criterio round robin. Al momento non è possibile modificare questo criterio.

Funzionalità di route

Le route indicano al gateway in entrata del cluster dove consegnare il traffico e cosa fare se non sono disponibili app all'indirizzo specificato. Per impostazione predefinita, se nessuna app è disponibile su una route e quest'ultima riceve una richiesta, restituisce un codice di stato HTTP 503.

Le route sono composte da tre parti: host, dominio e percorso. Ad esempio, nell'URI payroll.mydatacenter.example.com/login:

  • L'organizzatore è payroll
  • Il dominio è mydatacenter.example.com
  • Il percorso è /login

Le route devono contenere un host e un dominio, ma il percorso è facoltativo. Più route possono condividere lo stesso host e dominio se specificano percorsi diversi. Più app possono condividere lo stesso percorso e il traffico verrà suddiviso tra di loro. Ciò è utile se devi supportare i deployment blu/verde legacy. Se più app sono associate a percorsi diversi, la priorità va dalla più lunga a quella più breve.

Utilizzo delle route

Le seguenti sezioni descrivono come utilizzare l'interfaccia a riga di comando kf per gestire le route.

Elenco route

Gli sviluppatori possono elencare le route per lo spazio attuale utilizzando il comando kf routes.

$ 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

Creazione route

Gli sviluppatori possono creare route utilizzando il comando kf create-route.

# 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

Dopo la creazione di una route, se non è associata alcuna app, viene restituito un codice di stato HTTP 503 per tutte le richieste corrispondenti.

Mappa un percorso alla tua app

Gli sviluppatori possono rendere la propria app accessibile su una route utilizzando il comando kf map-route.

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

Annulla la mappatura di una route

Gli sviluppatori possono impedire l'accesso alla propria app su una route utilizzando il comando kf unmap-route.

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

Elimina una route

Gli sviluppatori possono eliminare una route utilizzando il comando kf delete-route.

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

Se elimini una route, il traffico non verrà instradato a tutte le app in ascolto sulla route.

Route dichiarative nel manifest dell'app

Le route possono essere gestite in modo dichiarativo nel file manifest dell'app. Verranno creati se non esistono ancora.

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

Puoi trovare ulteriori informazioni sulle proprietà del percorso supportate nella documentazione del file manifest.

Argomenti avanzati

Routing dei CRD

Esistono quattro tipi di percorsi pertinenti:

  • VirtualService
  • Route
  • Servizio
  • App

Ogni app ha un servizio, ovvero un nome astratto assegnato a tutte le istanze dell'app in esecuzione. Il nome del servizio è uguale a quello dell'app. Una route rappresenta un singolo URL esterno. I percorsi controllano costantemente le modifiche alle app; quando un'app richiede di essere aggiunta a un percorso, il percorso aggiorna il proprio elenco di app e quindi il servizio VirtualService. Un servizio VirtualService rappresenta un singolo dominio e unisce un elenco di tutte le route in uno spazio che appartengono a quel dominio.

Istio legge la configurazione su VirtualServices per determinare come instradare il traffico.