Я нахожусь в пути тестирования Istio, и сейчас я собираюсь протестировать "канареечные" возможности маршрутизации трафика.
Для своего теста я создал небольшую сервисную сетку, состоящую из 5 микросервисов (serviceA, serviceB, serviceC, serviceD, serviceE). Каждый может звонить другим. Я просто прохожу такой путь, как A, E, C, B, B, D, и запрос следует по этому пути. Для вызова моей servicemesh извне кластера у меня есть Nginx Ingress Controller с правилом Ingress, указывающим на модуль serviceA.
Это нормально работает.
Проблема, с которой я столкнулся, касается переключения трафика с использованием настраиваемого сопоставления заголовков, например:
kind: VirtualService
metadata:
name: ServiceA
namespace: demo
labels:
app: demo
spec:
hosts:
- service-a
http:
- route:
- destination:
host: service-a
subset: v1
- match:
- headers:
x-internal-request:
exact: true
route:
- destination:
host: service-a
subset: v2
Итак, здесь я хочу попытаться направить трафик на версию ServiceA v2, когда для настраиваемого заголовка x-internal-request установлено значение true.
Вопросы:
Чтобы использовать эту функцию, должны ли мои службы знать о x-internal-header и должны ли они передавать его следующей службе в запросе? Или им не нужно заниматься этим, потому что Istio делает всю работу за них?
Чтобы использовать эту функцию, нужно ли мне использовать контроллер входа Istio (со шлюзом Istio) вместо контроллера входа Nginx?
Сегодня я использую Nginx Ingress Controller для предоставления доступа к некоторым из моих сервисов. Мы выбрали Nginx, потому что у него есть такая функция, как «внешняя авторизация», которая экономит нам много работы, и если нам нужно вместо этого использовать контроллер Istio Ingress, я не уверен, что он предлагает те же функции, что и Nginx.
Возможно, я не вижу среднего пути
Спасибо за помощь