Desplazamiento de Tráfico
Esta tarea te muestra cómo desplazar tráfico de una versión de un microservicio a otra.
Un caso de uso común es migrar tráfico gradualmente de una versión antigua de un microservicio a una nueva. En Istio, logras este objetivo configurando una secuencia de reglas de enrutamiento que redirigen un porcentaje de tráfico de un destino a otro.
En esta tarea, enviarás 50% del tráfico a reviews:v1 y 50% a reviews:v3. Luego,
completarás la migración enviando 100% del tráfico a reviews:v3.
Antes de comenzar
Configura Istio siguiendo las instrucciones en la Guía de instalación.
Despliega la aplicación de ejemplo Bookinfo.
Revisa el documento de conceptos de Gestión de Tráfico.
Aplicar enrutamiento basado en peso
- Para comenzar, ejecuta este comando para enrutar todo el tráfico a la versión
v1:
$ kubectl apply -f @samples/bookinfo/networking/virtual-service-all-v1.yaml@$ kubectl apply -f @samples/bookinfo/gateway-api/route-reviews-v1.yaml@Abre el sitio Bookinfo en tu navegador. La URL es
http://$GATEWAY_URL/productpage, donde$GATEWAY_URLes la dirección IP externa del ingress, como se explica en el documento Bookinfo.Nota que la parte de reseñas de la página se muestra sin estrellas, independientemente de cuántas veces la refresques. Esto es porque configuraste Istio para enrutar todo el tráfico para el servicio de reseñas a la versión
reviews:v1y esta versión del servicio no accede al servicio de valoraciones.Transfiere el 50% del tráfico de
reviews:v1areviews:v3con el siguiente comando:
$ kubectl apply -f @samples/bookinfo/networking/virtual-service-reviews-50-v3.yaml@$ kubectl apply -f @samples/bookinfo/gateway-api/route-reviews-50-v3.yaml@- Espera unos segundos para que las nuevas reglas se propaguen y luego confirma que la regla se reemplazó:
$ kubectl get virtualservice reviews -o yaml
apiVersion: networking.istio.io/v1
kind: VirtualService
...
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v1
weight: 50
- destination:
host: reviews
subset: v3
weight: 50$ kubectl get httproute reviews -o yaml
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
...
spec:
parentRefs:
- group: ""
kind: Service
name: reviews
port: 9080
rules:
- backendRefs:
- group: ""
kind: Service
name: reviews-v1
port: 9080
weight: 50
- group: ""
kind: Service
name: reviews-v3
port: 9080
weight: 50
matches:
- path:
type: PathPrefix
value: /
status:
parents:
- conditions:
- lastTransitionTime: "2022-11-10T18:13:43Z"
message: Route was valid
observedGeneration: 14
reason: Accepted
status: "True"
type: Accepted
...Refresca la
/productpageen tu navegador y ahora verás rojas las estrellas de valoración aproximadamente el 50% del tiempo. Esto es porque la versiónv3dereviewsaccede al servicio de valoraciones, pero la versiónv1no.Suponiendo que decides que el microservicio
reviews:v3es estable, puedes enrutar el 100% del tráfico areviews:v3aplicando este servicio virtual:
$ kubectl apply -f @samples/bookinfo/networking/virtual-service-reviews-v3.yaml@$ kubectl apply -f @samples/bookinfo/gateway-api/route-reviews-v3.yaml@- Refresca la
/productpagevarias veces. Ahora siempre verás reseñas de libros con rojas las estrellas de valoración para cada reseña.
Entendiendo lo que sucedió
En esta tarea migras tráfico de una versión antigua a una nueva versión del servicio reviews usando la característica de enrutamiento ponderado de Istio. Ten en cuenta que esto es muy diferente a hacer la migración de versiones usando las características de escalado de instancias de orquestación de contenedores, que usan el escalado de instancias para gestionar el tráfico.
Con Istio, puedes permitir que las dos versiones del servicio reviews escalen independientemente, sin afectar la distribución del tráfico entre ellas.
Para más información sobre el enrutamiento de versiones con autoscaling, consulta el artículo del blog Desplazamientos de canario usando Istio.
Limpieza
- Elimina las reglas de enrutamiento de la aplicación:
$ kubectl delete -f @samples/bookinfo/networking/virtual-service-all-v1.yaml@$ kubectl delete httproute reviews- Si no planeas explorar ninguna tarea posterior, consulta las instrucciones de limpieza del Bookinfo para apagar la aplicación.