Перемикання трафіку
Це завдання показує, як перенести трафік з одної версії мікросервісу на іншу.
Звичайний випадок використання – це поступове перенесення трафіку зі старої версії мікросервісу на нову. В Istio ви досягаєте цієї мети, конфігуруючи послідовність правил маршрутизації, які перенаправляють відсоток трафіку з одного призначення на інше.
У цьому завданні ви направите 50% трафіку до reviews:v1
і 50% до reviews:v3
. Потім ви завершите міграцію, направивши 100% трафіку до reviews:v3
.
Перш ніж почати
Налаштуйте Istio, дотримуючись інструкцій у керівництві з встановлення.
Розгорніть демонстраційний застосунок Bookinfo
Ознайомтеся з документацією Управління трафіком.
Застосування маршрутизації на основі коефіцієнтів
- Щоб почати, виконайте цю команду, щоб направити весь трафік до версії
v1
:
$ kubectl apply -f @samples/bookinfo/networking/virtual-service-all-v1.yaml@
$ kubectl apply -f @samples/bookinfo/gateway-api/route-reviews-v1.yaml@
Відкрийте сайт Bookinfo у вашому оглядачі. URL-адреса:
http://$GATEWAY_URL/productpage
, де$GATEWAY_URL
— це зовнішня IP-адреса ingress, як пояснено в документації Bookinfo.Зверніть увагу, що частина сторінки з відгуками показується без зірок рейтингу, незалежно від того, скільки разів ви оновлюєте сторінку. Це відбувається тому, що ви налаштували Istio для маршрутизації всього трафіку для сервісу відгуків до версії
reviews:v1
, і ця версія сервісу не використовує сервіс оцінок з зірками.Перенаправте 50% трафіку з
reviews:v1
наreviews:v3
за допомогою такої команди:
$ kubectl apply -f @samples/bookinfo/networking/virtual-service-reviews-50-v3.yaml@
$ kubectl apply -f @samples/bookinfo/gateway-api/route-reviews-50-v3.yaml@
- Зачекайте кілька секунд, поки нові правила поширяться, а потім підтвердіть заміну правила:
$ 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
...
Оновіть сторінку
/productpage
у вашому оглядачі, і тепер ви будете бачити червоні зірки рейтингів приблизно 50% часу. Це відбувається тому, що версіяv3
сервісуreviews
використовує сервіс рейтингів з зірками, а версіяv1
— ні.Якщо ви вирішите, що мікросервіс
reviews:v3
стабільний, ви можете направити 100% трафіку доreviews:v3
, застосувавши цей віртуальний сервіс:
$ kubectl apply -f @samples/bookinfo/networking/virtual-service-reviews-v3.yaml@
$ kubectl apply -f @samples/bookinfo/gateway-api/route-reviews-v3.yaml@
- Оновіть сторінку
/productpage
кілька разів. Тепер ви завжди будете бачити рецензії на книги з червоними зірками для кожної рецензії.
Розуміння того, що відбулося
У цьому завданні ви мігрували трафік зі старої версії на нову версію сервісу reviews
, використовуючи функцію маршрутизації за коефіцієнтами в Istio. Зверніть увагу, що це дуже відрізняється від міграції версій за допомогою функцій розгортання платформ оркестрування контейнерів, які використовують масштабування екземплярів для управління трафіком.
За допомогою Istio ви можете дозволити двом версіям сервісу reviews
масштабуватися вгору та вниз незалежно одна від одної, не впливаючи на розподіл трафіку між ними.
Для отримання додаткової інформації про маршрутизацію версій з автомасштабуванням, ознайомтеся зі статтею в блозі Canary Deployment з використанням Istio.
Очищення
- Видаліть правила маршрутизації застосунку:
$ kubectl delete -f @samples/bookinfo/networking/virtual-service-all-v1.yaml@
$ kubectl delete httproute reviews
- Якщо ви не плануєте виконувати подальші завдання, зверніться до інструкції вилучення Bookinfo, щоб завершити роботу застосунку.