Rutas y dominios

Algunas aplicaciones son útiles sin ser accesibles fuera del clúster, pero la mayoría debe estar disponible fuera del clúster en uno o más extremos HTTP. En Kf, este es el trabajo de las rutas.

De forma predeterminada, otros procesos del clúster pueden acceder a cada aplicación mediante la dirección interna de la aplicación: app-name.space-name. Puedes usar esta dirección cuando implementas una o más apps en un clúster que necesitan comunicarse entre sí. Permiten que el tráfico vaya directamente de una aplicación a otra, en lugar de salir del clúster y volver. Esto hace que las comunicaciones sean más seguras y más rápidas, y que tengan la garantía de usar el servicio en el clúster local.

Si necesitas que tu aplicación sea accesible desde fuera del clúster, deberás crear rutas para ello.

El dominio interno del clúster

El dominio interno del clúster para cada app tiene algunas características especiales.

  • Su uso en tus apps permite el enrutamiento este-oeste (punto a punto).
  • El tráfico enviado a él cuenta con balanceo de cargas entre los pods de la aplicación en ejecución.
  • Puedes conectarte a extremos que no sean HTTP con el dominio interno.

Las rutas te permiten crear URL personalizadas además del dominio interno del clúster.

Balanceo de cargas de la app

Istio enruta el tráfico a instancias en buen estado de una aplicación mediante una política de round robin. Actualmente, no se puede cambiar esta política.

Capacidades de ruta

Las rutas le indican a la puerta de enlace de entrada del clúster dónde entregar el tráfico y qué hacer si no hay aplicaciones disponibles en la dirección determinada. De forma predeterminada, si no hay una app disponible en una ruta y esta recibe una solicitud, se muestra un código de estado HTTP 503.

Las rutas se componen de tres partes: host, dominio y ruta de acceso. Por ejemplo, en la URI payroll.mydatacenter.example.com/login:

  • El host es payroll.
  • El dominio es mydatacenter.example.com.
  • La ruta de acceso es /login

Las rutas deben contener un host y un dominio, pero la ruta es opcional. Varias rutas pueden compartir el mismo host y dominio si especifican diferentes rutas. Varias aplicaciones pueden compartir la misma ruta y el tráfico se dividirá entre ellas. Esto es útil si necesitas compatibilidad con implementaciones azul-verde heredadas. Si varias apps están vinculadas a diferentes rutas, la prioridad es de la más larga a la más corta.

Usar rutas

En las siguientes secciones, se describe cómo usar la CLI de kf para administrar rutas.

Enumerar rutas

Los desarrolladores pueden enumerar las rutas del espacio actual con el 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

Crear rutas

Los desarrolladores pueden crear rutas mediante el 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

Después de crear una ruta, si no hay ninguna aplicación vinculada a ella, se muestra un código de estado HTTP 503 en cualquier solicitud coincidente.

Asigna una ruta a tu app

Los desarrolladores pueden hacer que su app sea accesible en una ruta con el comando kf map-route.

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

Anula la asignación de una ruta

Los desarrolladores pueden quitar sus apps de una ruta mediante el comando kf unmap-route.

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

Borra una ruta

Los desarrolladores pueden borrar una ruta mediante el comando kf delete-route.

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

Borrar una ruta evitará que el tráfico se enrute a todas las aplicaciones que escuchan en la ruta.

Rutas declarativas en el manifiesto de tu app

Las rutas se pueden administrar de forma declarativa en el archivo de manifiesto de la app. Se crearán si aún no existen.

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

Puedes leer más sobre las propiedades de rutas admitidas en la documentación del manifiesto.

Temas avanzados

Enrutamiento de CRD

Hay cuatro tipos que son relevantes para el enrutamiento:

  • VirtualService
  • Ruta
  • Servicio
  • App

Cada aplicación tiene un servicio, que es un nombre abstracto dado a todas las instancias en ejecución de tu aplicación. El nombre del servicio es el mismo que el de la aplicación. Una ruta representa una sola URL externa. Las rutas buscan de manera constante los cambios en las apps. Cuando una app solicita que se la agregue a una ruta, Route actualiza su lista de apps y, luego, el VirtualService. Un VirtualService representa un solo dominio y combina una lista de todas las rutas en un espacio que pertenecen a ese dominio.

Istio lee la configuración en VirtualServices para determinar cómo enrutar el tráfico.