Полноканальное управление трафиком на основе полос движения сетки облачного сервиса Alibaba (1): полосы движения строгого режима.

Автор: Инь Ханг

Обзор

Выпуск в оттенках серого — это распространенный метод выпуска новых версий служб приложений. Его особенностью является то, что он может в любое время переключать трафик между стабильной версией и версией службы в оттенках серого, чтобы помочь нам обновлять службы более надежным способом. В процессе переключения доли трафика мы можем постепенно проверять функциональные возможности, надежность и другие характеристики новой версии сервиса.Если новая версия сервиса не соответствует потребностям, мы всегда можем переключить трафик обратно на старая версия.Поэтому выпуск в оттенках серого также является своего рода широко используемым решением для выпуска в области разработки программного обеспечения.

В настоящее время неинтрузивный выпуск сервисной сетки в оттенках серого уже является очень развитой функцией: мы можем одновременно развертывать несколько версий сервисов, использовать DestinationRule для формулирования определений версий рабочей нагрузки и использовать способность VirtualService разделять пропорции трафика. Трафик службы отправляется в разные версии рабочей нагрузки, пока весь трафик не будет отправлен непосредственно в новую версию службы.

Однако в условиях широкого распространения облачных нативных приложений приложения зачастую больше не существуют в виде отдельных сервисов, а разбиваются на ряд облачных нативных сервисов, развернутых в кластерах Kubernetes, с возможностью вызова ссылок и совместного предоставления внешних сервисов. .

При наличии каналов вызова между службами выпуск услуг в оттенках серого часто не ограничивается одной услугой, но требует изоляции от окружающей среды и контроля трафика всей ссылки запроса службы, то есть обеспечения того, чтобы трафик в оттенках серого отправлялся только на вызов. версию службы в оттенках серого в ссылке для создания изолированной среды, в которой вызывающие ссылки изолированы друг от друга. Требования к управлению трафиком для всего канала вызова создают новые проблемы для решения неинтрузивного управления трафиком сервисной сети:

  • Правила дорожного движения очень сложны

    Правила VirtualService и DestinationRule на базе сообщества Istio необходимо настраивать индивидуально для каждого сервиса.В сценарии полноканального управления трафиком возрастет вероятность ошибок конфигурации и стоимость обслуживания сервисного трафика.

  • Низкая гибкость в управлении трафиком

    Для различных потребностей в управлении полноканальным трафиком трудно достичь всех потребностей, просто корректируя правила трафика (например: для серой ссылки выпускайте только новые версии некоторых сервисов в ссылке).

ASM сервисной сетки поддерживает изоляцию соответствующих версий приложений (или других характеристик) в независимую рабочую среду (т. е. плавательную дорожку), а затем путем установки правил плавательной дорожки трафик запросов, удовлетворяющий правилам, направляется в приложение целевой версии ( или другие характеристики) превосходят. Проточные пути ASM имеют следующие характеристики:

  • Простая конфигурация

    Используя функцию полосы движения ASM, вам нужно всего лишь сформулировать небольшое количество правил управления для создания нескольких сред изоляции трафика от шлюза до всей внутренней службы, эффективно обеспечивая плавный и безопасный выпуск нескольких служб и параллельную разработку. нескольких версий услуг, что еще больше способствует быстрому развитию бизнеса.

  • Поддержка требований по управлению полноканальным трафиком в различных измерениях.

    Полосы движения ASM поддерживают строгий режим и расслабленный режим.Каждый из двух режимов имеет свои преимущества, ограничения и сценарии использования, адаптирующиеся к более разнообразным потребностям управления дорожным движением.

Строгий режим и свободный режим дорожного движения

1. Полосы строгого режима движения.

В строгом режиме каждая полоса трафика содержит все услуги вызывающего канала. Этот режим не предъявляет никаких требований к вашему приложению, кроме настройки полос движения. Как показано ниже:

2. Полосы движения в спокойном режиме

В расслабленном режиме вам просто нужно создать одну дорожку, содержащую все службы в цепочке вызовов: базовую дорожку. Другие плавательные дорожки могут не включать все услуги по линии вызова. Когда службы на плавательной дорожке звонят друг другу, и если целевая служба не существует на текущей плавательной дорожке, запрос будет перенаправлен той же службе на базовой плавательной дорожке, а затем запрос будет перенаправлен обратно на текущую дорожку. полоса для плавания, если целевая служба существует в текущей дорожке для плавания. При использовании полос движения в расслабленном режиме ваше приложение должно включать заголовок запроса, который может быть прозрачно передан во всей ссылке вызова (прозрачный заголовок запроса на соединение), а также дополнительно использовать заголовок запроса на перенаправление для перенаправления трафика на основе содержимого заголовка запроса. разъехались по разным полосам движения. Как показано ниже:

В следующей статье в основном демонстрируется применение плавательных дорожек строгого режима в сервисной сети ASM.

Демонстрация: использование полос движения со строгим режимом для полнофункционального управления оттенками серого.

В примерном сценарии этой статьи три сервиса — «mocka», «mockb» и «mockc», показанные на рисунке выше, — будут использоваться для создания трех дорожек для плавания, представляющих три версии цепочки вызовов службы: s1, s2 и s3.

1. Предварительные условия

  • Создан экземпляр ASM Enterprise или Ultimate версии 1.18.2.111 и выше. Подробные операции см. в разделе Создание экземпляра ASM [ 1] .
  • Добавлен кластер ACK в экземпляр ASM. Конкретные операции см. в разделе Добавление кластера к экземпляру ASM [ 2] .
  • Был создан шлюз ASM с именем ingressgateway. Конкретные операции см. в разделе Создание службы входного шлюза [ 3] .
  • Было создано правило шлюза с именем ingressgateway и пространством имен istio-system. Конкретные операции см. в разделе «Управление правилами шлюза» [ 4] .

<!---->

apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
 name: ingressgateway
  namespace: istio-system
spec:
  selector:
    istio: ingressgateway
  servers:
    - port:
        number: 80
        name: http
        protocol: HTTP
      hosts:
        - '*'

2. Развертывание примера службы

Сначала разверните службу приложения в примере в кластере ACK, чтобы реализовать полноканальный сценарий в оттенках серого. Включите автоматическое внедрение прокси-сервера сетки Sidecar для пространства имен по умолчанию (конкретные операции см. в разделе Включение автоматического внедрения[ 5] ), затем выполните следующую команду в кластере ACK, чтобы развернуть образец службы.

kubectl apply -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/asm-labs/swimlane/v1/mock-v1.yaml
kubectl apply -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/asm-labs/swimlane/v2/mock-v2.yaml
kubectl apply -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/asm-labs/swimlane/v3/mock-v3.yaml

3. Создайте группы полос и соответствующие полосы.

В этом примере мы разделяем версии v1, v2 и v3 ссылки вызова службы «mocka->mockb->mockc» на три дорожки: s1, s2 и s3. Набор из трех полос называется группой полос. В сервисной сетке ASM создание групп дорожек для плавания и дорожек для плавания можно выполнить посредством простой настройки.

  • Войдите в консоль ASM[ 6] , выберите «Сетка служб» на левой панели навигации. > Управление сеткой.
  • На странице управления сеткой щелкните имя целевого экземпляра, а затем выберите «Центр управления трафиком» > «Дорожка для движения» на левой панели навигации.
  • На странице «Полосы движения» нажмите «Создать группу полос», настройте соответствующую информацию на панели «Создать группу полос», а затем нажмите «ОК».
Элементы конфигурации иллюстрировать
название группы полос Этот пример настроен как тестовый.
Входной шлюз Выберите входной шлюз.
режим плавательной дорожки Выберите строгий режим
полоса обслуживания Выберите целевой кластер Kubernetes и пространство имен по умолчанию, выберите службы «mocka», «mockb» и «mockc» в списке ниже, щелкните значок и добавьте целевой сервис в выбранную область.

Затем создайте дорожки для плавания s1, s2 и s3 в группе дорожек для плавания, соответствующие версиям v1, v2 и v3 ссылки на вызов службы соответственно.

  • В области определения правил дорожного движения на странице «Дорожная полоса» нажмите «Создать полосу для плавания».
  • В диалоговом окне «Создать дорожку для плавания» настройте соответствующую информацию и нажмите «ОК».

После создания трех дорожек для плавания примерный эффект будет следующим:

Каждый раз, когда создается полоса для плавания, полоса движения автоматически создает DestinationRule, соответствующий полосе для плавания. Например, после создания всех дорожек для плавания для сервиса макета будет автоматически создано следующее правило назначения DestinationRule.

kubectl apply -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/asm-labs/swimlane/v1/mock-v1.yaml
kubectl apply -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/asm-labs/swimlane/v2/mock-v2.yaml
kubectl apply -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/asm-labs/swimlane/v3/mock-v3.yaml

После создания трех дорожек для плавания для каждой службы в группе дорожек для плавания будет создан виртуальный сервис VirtualService, соответствующий правилам дорожек для плавания. Например, для службы макета автоматически создается следующая виртуальная служба VirtualService.

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
 labels:
    asm-system: 'true'
    provider: asm
    swimlane-group: test
  name: trafficlabel-vs-test-default-mocka
  namespace: istio-system
spec:
  hosts:
    - mocka.default.svc.cluster.local
  http:
    - match:
        - sourceLabels:
            ASM_TRAFFIC_TAG: v1
      route:
        - destination:
            host: mocka.default.svc.cluster.local
            subset: s1
    - match:
        - sourceLabels:
            ASM_TRAFFIC_TAG: v2
      route:
        - destination:
            host: mocka.default.svc.cluster.local
            subset: s2
    - match:
        - sourceLabels:
            ASM_TRAFFIC_TAG: v3
      route:
        - destination:
            host: mocka.default.svc.cluster.local
            subset: s3

Наконец, создайте правила отклонения трафика, соответствующие каждой полосе для плавания. Благодаря различным правилам перенаправления трафика шлюз ASM может направлять запросы с различными характеристиками в разные среды изоляции плавательных дорожек, чтобы обеспечить полную изоляцию между каналами сервисного вызова на плавательной полосе. Ниже приведен пример создания правила перенаправления трафика для полосы s1. Выполните следующие действия, чтобы создать правило перенаправления трафика для полос s2 и s3.

  • В области определения правила дорожного движения на странице полосы движения щелкните правило перенаправления трафика под столбцом действия с правой стороны целевой полосы движения.
  • В диалоговом окне «Добавить правило перенаправления трафика» настройте соответствующую информацию и нажмите «ОК». В этой статье в качестве примера используется API входа, соответствующий службе плавательных дорожек /mock, и настраиваются одни и те же правила перенаправления трафика для каждой плавательной полосы.
Элементы конфигурации иллюстрировать
Входная служба Выберите «mocka.default.svc.cluster.local».
Правила дренажа Имя конфигурации — r1, а имя домена — *.
Сопоставьте запрошенный URI Настройте режим сопоставления на «точный», а соответствующее содержимое — на «/mock».
Добавить правила сопоставления заголовков Нажмите «Добавить правило сопоставления заголовков». В добавленном правиле сопоставления заголовков введите имя как x-asm-prefer-tag, режим соответствия как точный и соответствующее содержимое как s1.

После успешного создания правил перенаправления трафика для трех полос примерный эффект выглядит следующим образом:

После успешного создания будут автоматически сгенерированы правила перенаправления трафика для каждой плавательной полосы, то есть виртуальный сервис VirtualService. Например, для дорожки для плавания s1 будет создан следующий виртуальный сервис VirtualService:


apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
 labels:
    asm-system: 'true'
    provider: asm
    swimlane-group: test
  name: swimlane-ingress-vs-test-s1
  namespace: istio-system
spec:
  gateways:
    - istio-system/ingressgateway
  hosts:
    - '*'
  http:
    - match:
        - headers:
            x-asm-prefer-tag:
              exact: s1
          uri:
            exact: /mock
      name: r1
      route:
        - destination:
            host: mocka.default.svc.cluster.local
            subset: s1

4. Проверьте, эффективна ли полнофункциональная функция оттенков серого.

Благодаря вышеуказанной настройке правил полосы движения ASM автоматически создают правила трафика для поддержания взаимной изоляции между различными вызывающими каналами. Вы можете проверить, эффективна ли полнофункциональная градация серого, реализованная через полосы движения, с помощью простого доступа.

1) Получите IP-адрес шлюза ASM (см. Получение адреса шлюза ASM[ 7] ) .

2) Выполните следующую команду, чтобы установить переменные среды. xxx.xxx.xxx.xxx — это IP-адрес, полученный на предыдущем шаге.

export ASM_GATEWAY_IP=xxx.xxx.xxx.xxx

3) Убедитесь, что функция полной связи в оттенках серого эффективна.

  • Выполните следующую команду, чтобы просмотреть эффект доступа к плавательной дорожке s1. Значение s1, соответствующее x-asm-prefer-tag, — это имя полосы, настроенное при создании полосы s1 на шаге 2.

<!---->

for i in {1..100}; do curl   -H 'x-asm-prefer-tag: s1' http://${ASM_GATEWAY_IP}/mock ;  echo ''; sleep 1; done;

Ожидаемый результат:

-> mocka(version: v1, ip: 172.17.0.54)-> mockb(version: v1, ip: 172.17.0.129)-> mockc(version: v1, ip: 172.17.0.130)

Судя по ожидаемому результату, трафик, объявленный путем установки HTTP-заголовка x-asm-prefer-tag: s1, направляется в соответствующую службу под дорожкой для плавания s1, как и ожидалось.

  • Выполните следующую команду, чтобы просмотреть эффект доступа к плавательной дорожке s2. Значение s2, соответствующее x-asm-prefer-tag, — это имя полосы, настроенное при создании полосы s2 на шаге 2.

<!---->

for i in {1..100}; do curl   -H 'x-asm-prefer-tag: s2' http://${ASM_GATEWAY_IP}/mock ;  echo ''; sleep 1; done;

Ожидаемый результат:

-> mocka(version: v2, ip: 172.17.0.9)-> mockb(version: v2, ip: 172.17.0.126)-> mockc(version: v2, ip: 172.17.0.128)

Судя по ожидаемому результату, трафик, объявленный путем установки HTTP-заголовка x-asm-prefer-tag: s2, направляется в соответствующую службу под полосой плавания s2, как и ожидалось.

  • Выполните следующую команду, чтобы проверить эффект доступа к плавательной дорожке s3. Значение s3, соответствующее x-asm-prefer-tag, — это имя полосы, настроенное при создании полосы s3 на шаге 2.

<!---->

for i in {1..100}; do curl   -H 'x-asm-prefer-tag: s3' http://${ASM_GATEWAY_IP}/mock ;  echo ''; sleep 1; done;

Ожидаемый результат:

-> mocka(version: v3, ip: 172.17.0.132)-> mockb(version: v3, ip: 172.17.0.127)-> mockc(version: v3, ip: 172.17.0.69)

Судя по ожидаемому результату, трафик, объявленный путем установки HTTP-заголовка x-asm-prefer-tag: s3, как и ожидалось, направляется в соответствующую службу под полосой плавания s3.

Подведем итог

В этой статье кратко обсуждаются проблемы и ограничения в сценарии управления полноканальным трафиком при использовании сервисных сеток для управления трафиком собственных облачных приложений, а также представлены возможности полос трафика в сервисной сетке ASM при полноканальном управлении трафиком сервисных сеток. и особенности. Далее демонстрируется и подробно разъясняется строгий режим полос движения АСМ. Далее мы более подробно познакомим вас с полосами движения ASM в спокойном режиме.

Ссылки по теме:

[1] Создать экземпляр ASM https://help.aliyun.com/document_detail/147793.html#task-2370657

[2] Добавить кластер в экземпляр ASM https://help.aliyun.com/document_detail/148231.html#task-2372122

[3] Создать службу входного шлюза https://help.aliyun.com/document_detail/150510.html#task-2372970

[4] Правила шлюза управления https://help.aliyun.com/document_detail/150504.html

[5] Включить автоматическое внедрение Sidecar https://help.aliyun.com/document_detail/186136.html#task-1962690

[6] ASM 控制台 https://servicemesh.console.aliyun.com/

[7] Получите адрес шлюза ASM https://help.aliyun.com/document_detail/444079.html#section-ida-zt6-md7

Нажмитездесь, чтобы узнать больше о продуктах Service Mesh ASM

Тан Сяоу, основатель SenseTime, скончался в возрасте 55 лет. В 2023 году PHP застопорится. Wi-Fi 7 будет полностью доступен. в начале 2024 г. Дебют, в 5 раз быстрее, чем Wi-Fi 6. Система Hongmeng вот-вот станет независимой, и во многих университетах созданы «классы Hongmeng». Zhihui Стартап-компания Цзюня рефинансирует сумму, превышающую 600 миллионов юаней, а предварительная оценка составляет 3,5 миллиарда юаней. Версия Quark Browser для ПК начинает внутреннее тестирование AI code Assistant популярен, и рейтинги языков программирования высоки. Ничего не поделаешь Модем 5G и радиочастотная технология Mate 60 Pro далеко впереди MariaDB разделяет SkySQL и устанавливается как независимая компания Xiaomi отвечает на заявление Юй Чэндуна о плагиате со стороны Huawei
{{o.name}}
{{м.имя}}

рекомендация

отmy.oschina.net/u/3874284/blog/10319240
рекомендация