Istio egress выдает ошибку восходящего подключения или отключение / сброс перед ошибками заголовков из микросервиса 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 подключается из микросервиса.


person rayhan    schedule 22.12.2018    source источник
comment
Вы внедрили istio-proxy в свое приложение?   -  person nurgasemetey    schedule 22.12.2018
comment
@nurgasemetey да, я сделал укол.   -  person rayhan    schedule 22.12.2018
comment
Что дает команда kubectl -n namespace_name logs pod_name -c istio-proxy?   -  person nurgasemetey    schedule 22.12.2018
comment
Вы уверены, что это протокол HTTP, а не HTTPS? Можете ли вы получить доступ к обоим внешним API с помощью curl из модуля внутри служебной сетки?   -  person Vadim Eisenberg    schedule 23.12.2018
comment
@VadimEisenberg Да, протокол http, и я могу получить доступ к обоим API с помощью curl из модуля.   -  person rayhan    schedule 23.12.2018
comment
Можете ли вы опубликовать свои ServiceEntry конфигурации? А какую версию Istio вы используете?   -  person Vadim Eisenberg    schedule 23.12.2018
comment
Вы используете конфигурацию istio взаимного TLS?   -  person VASャ    schedule 24.12.2018
comment
Да, я использую конфигурацию взаимного TLS istio. Думаю, я нашел проблему. Это вызвано запросом HTTP / 1.0, сделанным парсером python xml.sax. Итак, это проблема устаревшего приложения, поскольку Envoy не поддерживает HTTP / 1.0.   -  person rayhan    schedule 29.12.2018


Ответы (1)


Я нашел причину, по которой это не работает. Моя служба Python использует библиотеку парсера xml.sax для синтаксического анализа xml из Интернета, который использует устаревший пакет urllib, который инициирует запрос http / 1.0.

Envoy не поддерживает версию протокола http / 1.0. Следовательно, это не работает. Я сделал обходной путь, установив global.proxy.includeIPRanges = "10.x.0.1 / 16" для Istio с использованием helm. Это фактически обходит весь прокси-сервер envoy для всех исходящих соединений за пределами заданных диапазонов IP.

Но я бы предпочел не глобально обходить Istio.

person rayhan    schedule 29.12.2018