Маршрутизация для конкретного пользователя в Istio / Kuberentes

Мне интересно, является ли Istio хорошим инструментом для поддержки конкретной ситуации маршрутизации, а если нет (или даже если это так), какие другие подходы доступны.

  • У меня есть два микросервиса, X и Y, с некоторым количеством реплик для каждого.
  • X отправляет запросы Y.
  • X отправляет запросы как конкретный пользователь, скажем «bob».
  • Некоторое подмножество реплик Y (не все!) Может обрабатывать запросы пользователя «bob».
  • Подмножество Y, которое может обрабатывать запросы на «bob», не статично, но изменяется со временем в зависимости от некоторого состояния, хранящегося в реплике, которая является эфемерной.

Итак, когда X отправляет запросы, он должен определить для пользователя, который отправляет запрос («bob»), какому подмножеству Y может быть отправлен этот конкретный запрос?

В Istio есть примеры правил маршрутизации, которые связываются с пользователем, просматривая заголовки HTTP. Что касается стороны сервера, Y, мог бы я просто иметь код в Y, который вызывает API k8s для добавления и удаления меток для Pod реплик?

e.g.,

Service-Y.Pod-1.Labels = {
  "user-bob": "true",
  "user-jane": "true",
  ...
}

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


person David Terei    schedule 24.05.2018    source источник


Ответы (1)


У вас есть открытый API из K8s. Вы можете создать код, который добавит метку к модулям, а затем перенаправит этот трафик на ваши модули.

person Nick Rak    schedule 24.05.2018