Мне интересно, является ли 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",
...
}
Неясно, насколько хорошо метки справляются с этим, и следует ли перенести этот вид маршрутизации на уровень приложения, а не пытаться кодировать его в в значительной степени прозрачном уровне сетки служб.