Перемикання трафіку TCP

Це завдання показує, як перенести TCP-трафік з одної версії мікросервісу на іншу.

Поширений випадок використання — це поступове перенесення TCP трафіку зі старої версії мікросервісу на нову. В Istio ви досягаєте цієї мети, конфігуруючи послідовність правил маршрутизації, які перенаправляють відсоток TCP трафіку з одного призначення на інше.

У цьому завданні ви направите 100% TCP трафіку до tcp-echo:v1. Потім ви направите 20% TCP трафіку до tcp-echo:v2, використовуючи функцію маршрутизації за коефіцієнтами в Istio.

Перш ніж почати

Налаштування тестового середовища

  1. Щоб почати, створіть простір імен для тестування перемикання TCP трафіку.

    $ kubectl create namespace istio-io-tcp-traffic-shifting
  2. Розгорніть демонстраційний застосунок curl, який буде використовуватися як джерело тестових запитів.

    Zip
    $ kubectl apply -f @samples/curl/curl.yaml@ -n istio-io-tcp-traffic-shifting
  3. Розгорніть версії v1 і v2 мікросервісу tcp-echo.

    Zip
    $ kubectl apply -f @samples/tcp-echo/tcp-echo-services.yaml@ -n istio-io-tcp-traffic-shifting

Застосування маршрутизації TCP на основі коефіцієнтів

  1. Направте весь TCP трафік до версії v1 мікросервісу tcp-echo.
Zip
$ kubectl apply -f @samples/tcp-echo/tcp-echo-all-v1.yaml@ -n istio-io-tcp-traffic-shifting
  1. Визначте ingress IP та port:
Дотримуйтесь інструкцій Визначення ingress IP та портів, щоб встановити змінні оточення TCP_INGRESS_PORT та INGRESS_HOST.
  1. Переконайтеся, що служба tcp-echo працює, надіславши до неї деякий TCP-трафік.

    $ export CURL=$(kubectl get pod -l app=curl -n istio-io-tcp-traffic-shifting -o jsonpath={.items..metadata.name})
    $ for i in {1..20}; do \
    kubectl exec "$CURL" -c curl -n istio-io-tcp-traffic-shifting -- sh -c "(date; curl 1) | nc $INGRESS_HOST $TCP_INGRESS_PORT"; \
    done
    one Mon Nov 12 23:24:57 UTC 2022
    one Mon Nov 12 23:25:00 UTC 2022
    one Mon Nov 12 23:25:02 UTC 2022
    one Mon Nov 12 23:25:05 UTC 2022
    one Mon Nov 12 23:25:07 UTC 2022
    one Mon Nov 12 23:25:10 UTC 2022
    one Mon Nov 12 23:25:12 UTC 2022
    one Mon Nov 12 23:25:15 UTC 2022
    one Mon Nov 12 23:25:17 UTC 2022
    one Mon Nov 12 23:25:19 UTC 2022
    ...

    Зверніть увагу, що всі мітки часу мають префікс one, що означає, що весь трафік було перенаправлено на v1 версію сервісу tcp-echo.

  2. Передайте 20% трафіку з tcp-echo:v1 на tcp-echo:v2 за допомогою наступної команди:

Zip
$ kubectl apply -f @samples/tcp-echo/tcp-echo-20-v2.yaml@ -n istio-io-tcp-traffic-shifting
  1. Зачекайте кілька секунд, поки нові правила поширяться, а потім підтвердіть, що правило було замінено:
$ kubectl get virtualservice tcp-echo -o yaml -n istio-io-tcp-traffic-shifting
apiVersion: networking.istio.io/v1
kind: VirtualService
  ...
spec:
  ...
  tcp:
  - match:
    - port: 31400
    route:
    - destination:
        host: tcp-echo
        port:
          number: 9000
        subset: v1
      weight: 80
    - destination:
        host: tcp-echo
        port:
          number: 9000
        subset: v2
      weight: 20
  1. Надішліть ще трохи TCP-трафіку до мікросервісу tcp-echo.

    $ export CURL=$(kubectl get pod -l app=curl -n istio-io-tcp-traffic-shifting -o jsonpath={.items..metadata.name})
    $ for i in {1..20}; do \
    kubectl exec "$CURL" -c curl -n istio-io-tcp-traffic-shifting -- sh -c "(date; curl 1) | nc $INGRESS_HOST $TCP_INGRESS_PORT"; \
    done
    one Mon Nov 12 23:38:45 UTC 2022
    two Mon Nov 12 23:38:47 UTC 2022
    one Mon Nov 12 23:38:50 UTC 2022
    one Mon Nov 12 23:38:52 UTC 2022
    one Mon Nov 12 23:38:55 UTC 2022
    two Mon Nov 12 23:38:57 UTC 2022
    one Mon Nov 12 23:39:00 UTC 2022
    one Mon Nov 12 23:39:02 UTC 2022
    one Mon Nov 12 23:39:05 UTC 2022
    one Mon Nov 12 23:39:07 UTC 2022
    ...

    Тепер ви повинні помітити, що близько 20% міток часу мають префікс two, що означає, що 80% TCP-трафіку було перенаправлено на v1 версію служби tcp-echo, а 20% — на v2.

Розуміння того, що відбулося

У цьому завданні ви частково мігрували TCP трафік зі старої версії на нову версію сервісу tcp-echo, використовуючи функцію маршрутизації за коефіцієнтами Istio. Зверніть увагу, що це дуже відрізняється від міграції версій за допомогою функцій розгортання платформ оркестрування контейнерів, які використовують масштабування екземплярів для управління трафіком.

За допомогою Istio ви можете дозволити двом версіям сервісу tcp-echo масштабуватися вгору і вниз незалежно одна від одної, не впливаючи на розподіл трафіку між ними.

Для отримання додаткової інформації про маршрутизацію версій з автомасштабуванням, ознайомтеся зі статтею в блозі Canary Deployment з використанням Istio.

Очищення

  1. Видаліть правила маршрутизації:
Zip
$ kubectl delete -f @samples/tcp-echo/tcp-echo-all-v1.yaml@ -n istio-io-tcp-traffic-shifting
  1. Видаліть демонстраційний застосунок curl, застосунок tcp-echo і тестовий простір імен:

    ZipZip
    $ kubectl delete -f @samples/curl/curl.yaml@ -n istio-io-tcp-traffic-shifting
    $ kubectl delete -f @samples/tcp-echo/tcp-echo-services.yaml@ -n istio-io-tcp-traffic-shifting
    $ kubectl delete namespace istio-io-tcp-traffic-shifting
Чи була ця інформація корисною?
Чи є у вас пропозиції щодо покращення?

Дякуємо за ваш відгук!