Выход Istio дает сообщение об ошибке "ошибка восходящего соединения или отключение / сброс перед заголовками" из микросервиса python
Когда я запускаю микросервис Python в контейнере dockerized или kubernetes, он работает просто отлично. Но с сервисной сеткой Istio она не работает.
Я добавил ServiceEntry для двух моих исходящих внешних http apis. Кажется, я могу получить доступ к форме содержимого url внутри контейнера с помощью команды curl, которая находится внутри сервисной сетки. Итак, я думаю, что сервисные записи в порядке и работают.
Но когда я пытаюсь из микросервиса, который использует парсер xml.sax в Python, он дает мне upstream connect error or disconnect/reset before headers
хотя то же приложение прекрасно работает без Istio.
Я думаю, что это что-то, связанное с Istio, Envoy или Python.
Обновление: я сделал инъекцию Istio-proxy. Я также добавил ServiceEntry для внешней базы данных MySQL, и MySQL подключен из микро-службы.
1 ответ
Я нашел причину этого не работает. Мой сервис Python использует библиотеку синтаксического анализатора xml.sax для анализа xml из Интернета, который использует устаревший пакет urllib, который инициирует запрос http/1.0.
Envoy не поддерживает версию протокола http/1.0. Следовательно, это не работает. Я сделал обходной путь, установив global.proxy.includeIPRanges="10.x.0.1/16" для Istio, используя helm. Это фактически обходит весь прокси-сервер-посланник для всех исходящих соединений за пределами указанных диапазонов IP-адресов.
Но я бы предпочел не обходить Istio глобально.