Rutas y dominios

Algunas aplicaciones son útiles sin ser accesibles fuera del clúster, pero la mayoría deben estar disponibles fuera del clúster en uno o varios endpoints HTTP. En Kf, esta es la función de las rutas.

De forma predeterminada, se puede acceder a cada aplicación desde otros procesos del clúster mediante la dirección interna de la aplicación del clúster: app-name.space-name. Puedes usar esta dirección cuando implementes una o varias aplicaciones en un clúster que necesiten 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. De esta forma, las comunicaciones son más seguras, rápidas y se garantiza que se usará el servicio en el clúster local.

Si tu aplicación necesita ser accesible desde fuera del clúster, tendrás que crear rutas para ella.

El dominio interno del clúster

El dominio interno del clúster de cada aplicación tiene algunas características especiales.

  • Si lo usas en tus aplicaciones, podrás disfrutar de la función de ruta de este a oeste (de punto a punto).
  • El tráfico que se le envía se equilibra entre los pods de aplicaciones en ejecución.
  • Puedes conectarte a endpoints que no sean HTTP mediante el dominio interno.

Las rutas te permiten crear URLs personalizadas sobre el dominio interno del clúster.

Balanceo de carga de aplicaciones

Istio dirige el tráfico a las instancias en buen estado de una aplicación mediante una política de asignación cíclica. Actualmente, esta política no se puede cambiar.

Funciones de ruta

Las rutas indican a la pasarela de entrada del clúster dónde debe enviar el tráfico y qué debe hacer si no hay aplicaciones disponibles en la dirección indicada. De forma predeterminada, si no hay ninguna aplicación disponible en una ruta y la ruta recibe una solicitud, devuelve un código de estado HTTP 503.

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

  • El anfitrión es payroll
  • El dominio es mydatacenter.example.com
  • La ruta 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 rutas diferentes. Varias aplicaciones pueden compartir la misma ruta y el tráfico se dividirá entre ellas. Esto resulta útil si necesitas admitir implementaciones antiguas de azul/verde. Si hay varias aplicaciones vinculadas a diferentes rutas, la prioridad se asigna de la ruta más larga a la más corta.

Utilizar rutas

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

Mostrar rutas

Los desarrolladores pueden consultar las rutas del espacio actual mediante 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 ruta

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

Una vez creada una ruta, si no hay aplicaciones vinculadas a ella, se devuelve un código de estado HTTP 503 para las solicitudes coincidentes.

Asignar una ruta a tu aplicación

Los desarrolladores pueden hacer que su aplicación sea accesible en una ruta mediante el comando kf map-route.

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

Desasignar una ruta

Los desarrolladores pueden impedir que se pueda acceder a su aplicación en una ruta mediante el comando kf unmap-route.

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

Eliminar una ruta

Los desarrolladores pueden eliminar una ruta con el comando kf delete-route.

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

Si eliminas una ruta, se dejará de dirigir el tráfico a todas las aplicaciones que estén escuchando en la ruta.

Rutas declarativas en el manifiesto de tu aplicación

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

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

Puede consultar más información sobre las propiedades de ruta admitidas en la documentación del archivo de manifiesto.

Temas avanzados

CRDs de enrutamiento

Hay cuatro tipos que son relevantes para el enrutamiento:

  • VirtualService
  • Ruta
  • Servicio
  • Aplicación

Cada aplicación tiene un servicio, que es un nombre abstracto que se asigna 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 monitorizan constantemente los cambios en las aplicaciones. Cuando una aplicación solicita que se añada a una ruta, la ruta actualiza su lista de aplicaciones y, a continuación, el VirtualService. Un VirtualService representa un único dominio y combina una lista de todas las rutas de un espacio que pertenecen a ese dominio.

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