Отключить стратегию повторных попыток Istio по умолчанию (по крайней мере, для запросов POST)
У меня есть приложение (на основе микросервисов), работающее в кубернетах с Istio 1.7.4
У микросервисов есть собственные механизмы компенсации транзакций при сбоях интеграции.
Но Istio повторяет запросы, когда у некоторых интеграций есть ответы с кодом состояния 503. Мне нужно отключить его (по крайней мере, в POST, который не идентифицируется).
И пусть об этом позаботится приложение.
Но я пробовал много способов безуспешно. Кто-нибудь может мне помочь?
1 ответ
Документация
- Из документации Istio Retries : По умолчанию
retry
жестко запрограммирован и его значение равно 2.
Интервал между повторными попытками (25 мс +) является переменным и определяется Istio автоматически, что предотвращает перегрузку вызываемой службы запросами. Поведение по умолчанию для HTTP-запросов - это повторная попытка дважды перед возвратом ошибки.
Кстати, изначально это было 10, но уменьшилось до 2 в Включить повторные попытки для определенных кодов состояния и уменьшить количество повторных попыток до 2 фиксации.
- обходной путь - использовать виртуальные сервисы
вы можете настроить параметры повторных попыток для каждой службы в виртуальных службах, не касаясь кода службы. Вы также можете дополнительно уточнить свое поведение при повторных попытках, добавив таймауты для каждой повторной попытки, указав время, в течение которого вы хотите ждать каждой повторной попытки для успешного подключения к службе.
Примеры
- В следующем примере настраивается максимум 3 попытки подключения к этому подмножеству службы после сбоя первоначального вызова, каждая с 2-секундным таймаутом.
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: ratings
spec:
hosts:
- ratings
http:
- route:
- destination:
host: ratings
subset: v1
retries:
attempts: 3
perTryTimeout: 2s
- Ваш случай. Отключение повторных попыток. Взято из Отключить глобально политика повтора по умолчанию :
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: no-retries-for-one-service
spec:
hosts:
- one-service.default.svc.cluster.local
http:
- retries:
attempts: 0
route:
- destination:
host: one-service.default.svc.cluster.local