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.