El enrutamiento de tráfico basado en versiones permite dividir el tráfico entre distintas versiones de un servicio según los pesos especificados. Esta técnica es ideal para despliegues canary y pruebas A/B. Este tema demuestra cómo utilizar recursos de Istio para este propósito.
Requisitos previos
Paso 1: Crear un Gateway
Un Gateway define un load balancer en el borde de la malla de servicios para conexiones HTTP/TCP entrantes o salientes. Este paso muestra cómo crear un Gateway y vincularlo al gateway de entrada.
Inicie sesión en la consola de ASM. En el panel de navegación izquierdo, seleccione .
En la página Mesh Management, haga clic en el nombre de la instancia de ASM. En el panel de navegación izquierdo, seleccione . En la página que aparece, haga clic en Create.
-
En la página Create, configure los siguientes parámetros y haga clic en Create.
Para obtener más información sobre los parámetros, consulte Gateway.
Parámetro
Descripción
Basic Information
Establezca Namespaces en default y Name en bookinfo-gateway.
Gateway Pod Selector
Establezca Key en istio y Value en ingressgateway.
Exposed Service
Establezca Name en http, Port en 80, Protocol en HTTP y Hosts en *.
La configuración YAML del Gateway es la siguiente.
El siguiente archivo YAML muestra el Gateway correspondiente a las configuraciones anteriores.
Paso 2: Crear un VirtualService
El VirtualService enruta las solicitudes a la aplicación Bookinfo a través de las siguientes rutas: /productpage, /static, /login, /logout y /api/v1/products.
Inicie sesión en la consola de ASM. En el panel de navegación izquierdo, seleccione .
En la página Mesh Management, haga clic en el nombre de la instancia de ASM. En el panel de navegación izquierdo, seleccione . En la página que aparece, haga clic en Create.
-
En la página Create, configure los siguientes parámetros y haga clic en Create.
Para obtener más información sobre los parámetros, consulte Virtual Service.
Parámetro
Descripción
Basic Information
Namespaces
En este ejemplo, seleccione default.
Name
Introduzca un nombre personalizado para el VirtualService.
Gateways
-
Habilite Apply To specific Gateways y luego haga clic en Select the name of the Gateway.
-
En el cuadro de diálogo Select the name of the Gateway, seleccione bookinfo-gateway, haga clic en el icono
y luego haga clic en OK. -
Deshabilite Apply To All Sidecars.
Hosts
Haga clic en Select the gateway domain name which VirtualService belongs to. En el cuadro de diálogo Select the gateway domain name which VirtualService belongs to, seleccione *, haga clic en el icono
y luego haga clic en OK.HTTP Route
Name
Haga clic en HTTP Route, haga clic en Add Route y luego introduzca un Name personalizado.
Request matching rules
Haga clic repetidamente en Add Request Matching Rule para configurar las siguientes cinco reglas:
-
Habilite Matching request URI, establezca Method en Exact y establezca Content en /productpage.
-
Habilite Matching request URI, establezca Method en Prefix y establezca Content en /static.
-
Habilite Matching request URI, establezca Method en Exact y establezca Content en /login.
-
Habilite Matching request URI, establezca Method en Exact y establezca Content en /logout.
-
Habilite Matching request URI, establezca Method en Prefix y establezca Content en /api/v1/products.
Route destination
Haga clic en Add Route Destination, establezca Host en productpage y establezca Port en 9080.
El siguiente archivo YAML muestra el VirtualService correspondiente a las configuraciones anteriores.
-
Paso 3: Acceder a la aplicación Bookinfo
-
Obtenga la dirección de servicio del gateway de entrada.
Consola de ASM
Inicie sesión en la consola de ASM. En el panel de navegación izquierdo, seleccione .
En la página Mesh Management, haga clic en el nombre de la instancia de ASM. En el panel de navegación izquierdo, seleccione .
En la página Ingress Gateway, busque la Service address.
Consola de ACK
Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en .
En la parte superior de la página Hosts, seleccione Namespaces en la lista desplegable Namespace. En la columna External IP, busque la dirección IP asociada al puerto 80 para el servicio istio-ingressgateway.
-
En la barra de direcciones de su navegador, introduzca http://{dirección IP del gateway de entrada}/productpage y actualice la página varias veces para observar el enrutamiento round-robin predeterminado.
Cada vez que actualiza la página, accede a una de las versiones v1, v2 o v3 del servicio reviews. Notará que el tráfico hacia las tres versiones del servicio reviews se distribuye en una proporción aproximada de 1:1:1.
La página reviews-v1 solo muestra reseñas de texto sin calificaciones de estrellas, la página reviews-v2 muestra calificaciones de estrellas negras y la página reviews-v3 muestra calificaciones de estrellas rojas.
Paso 4: Crear reglas de enrutamiento basadas en versiones
-
Cree un DestinationRule para definir subconjuntos basados en versiones (v1, v2 y v3) para el servicio reviews.
Inicie sesión en la consola de ASM. En el panel de navegación izquierdo, seleccione .
En la página Mesh Management, haga clic en el nombre de la instancia de ASM. En el panel de navegación izquierdo, seleccione . En la página que aparece, haga clic en Create.
-
En la página Create, configure los siguientes parámetros y haga clic en Create.
Para obtener más información sobre los parámetros, consulte Destination Rule.
Parámetro
Descripción
Basic Information
Establezca Namespaces en default, introduzca un Name personalizado para el DestinationRule y establezca Host en reviews.
Service Version (Subset)
Haga clic en Service Version (Subset). Haga clic repetidamente en Add Service Version (Subset) para configurar los siguientes tres subconjuntos.
-
Subconjunto 1: Establezca Name en v1. Haga clic en Add Label, establezca Key en version y establezca Value en v1.
-
Subconjunto 2: Establezca Name en v2. Haga clic en Add Label, establezca Key en version y establezca Value en v2.
-
Subconjunto 3: Establezca Name en v3. Haga clic en Add Label, establezca Key en version y establezca Value en v3.
El siguiente archivo YAML muestra el DestinationRule correspondiente a las configuraciones anteriores.
-
-
Cree un VirtualService para enrutar el tráfico al servicio reviews según los siguientes pesos: 10 % a v1, 40 % a v2 y 50 % a v3.
Inicie sesión en la consola de ASM. En el panel de navegación izquierdo, seleccione .
En la página Mesh Management, haga clic en el nombre de la instancia de ASM. En el panel de navegación izquierdo, seleccione . En la página que aparece, haga clic en Create.
-
En la página Create, configure los siguientes parámetros y haga clic en Create.
Parámetro
Descripción
Basic Information
Namespaces
En este ejemplo, seleccione default.
Name
Introduzca un nombre personalizado para el VirtualService.
Gateways
Habilite Apply To All Sidecars.
Hosts
Haga clic en Add Host. En el cuadro de diálogo Add Host, establezca Namespaces en default. En la sección Add Host, seleccione el servicio reviews, haga clic en el icono
y luego haga clic en OK.HTTP Route
Name
Haga clic en HTTP Route, haga clic en Add Route y luego introduzca un Name personalizado.
Route destination
Haga clic repetidamente en Add Route Destination para configurar los siguientes tres destinos de ruta.
-
Establezca Host en reviews, la versión en v1 y el peso en 10.
-
Establezca Host en reviews, Subset en v2 y Weight en 40.
-
Establezca Host en reviews, Subset en v3 y Weight en 50.
El siguiente archivo YAML muestra el VirtualService correspondiente a las configuraciones anteriores.
El YAML del VirtualService es el siguiente.
-
Paso 5: Verificar el enrutamiento basado en versiones
En la barra de direcciones de su navegador, introduzca http://{dirección IP del gateway de entrada}/productpage y actualice la página unas 10 veces.
Si el tráfico se distribuye a las versiones de servicio v1, v2 y v3 en una proporción aproximada de 1:4:5, las reglas de enrutamiento ponderado funcionan correctamente.