Istio Pilot создает прослушиватели TCP, которые должны быть HTTP - PullRequest
0 голосов
/ 05 февраля 2019

Настройка - Kubernetes v1.13 и Istio 1.0.5

Я столкнулся с проблемой, когда обнаружение службы Istio создает конфигурации Envoy, которые соответствуют прослушивателям TCP вместо прослушивателей HTTP.

Связь работает в сервисной сетке, но мне нужно, чтобы Envoy служил прокси уровня 7, а не проходил через уровень 4.Я не получаю журналы, которые мне нужны для HTTP-запросов, поступающих через Envoy.

Вот что я вижу в журнале istio-proxy для коляски:

[2019-02-05T15: 40: 59.403Z] - 5739 7911 149929 "127.0.0.1:80" inbound |80 || api-endpoint.default.svc.cluster.local 127.0.0.1:44560 10.244.3.100:80 10.244.3.105:35204

Что, когда я проверяю конфигурацию посланника в коляске - это соответствующийКонфигурация для этого сообщения журнала.

      "name": "envoy.tcp_proxy",
      "config": {
       "cluster": "inbound|80||api-endpoint.default.svc.cluster.local",
       "access_log": [
        {
         "name": "envoy.file_access_log",
         "config": {
          "path": "/dev/stdout",
          "format": "[%START_TIME%] %RESPONSE_FLAGS% %BYTES_RECEIVED% %BYTES_SENT% %DURATION% \"%UPSTREAM_HOST%\" %UPSTREAM_CLUSTER% %UPSTREAM_LOCAL_ADDRESS% %DOWNSTREAM_LOCAL_ADDRESS% %DOWNSTREAM_REMOTE_ADDRESS%\n"
         }
        }
       ],
       "stat_prefix": "inbound|80||api-endpoint.default.svc.cluster.local"
      }

Итак, мой вопрос: Почему Pilot предоставляет Envoy конфигурацию TCP для службы HTTP?

1 Ответ

0 голосов
/ 05 февраля 2019

Я сталкивался с этим, в моем случае имя порта для моей службы было не в форме http-xyz.

Istio / Envoy предполагает, что трафик является TCP, если он не получает подсказку от имени порта, что это какой-то другой протокол.

Согласно https://istio.io/help/faq/traffic-management/#naming-port-convention

Именованные порты: служебные порты должны иметь имена.

Имена портов должны иметь форму протокола-суффикса с http, http2, grpc, mongo или redis в качестве протокола, чтобы использовать преимущества возможностей маршрутизации Istio..

Например, имя: http2-foo или имя: http являются допустимыми именами портов, а имя: http2foo - нет.Если имя порта не начинается с распознанного префикса или порт не назван, трафик на порту будет рассматриваться как обычный трафик TCP (если порт явно не использует Protocol: UDP для обозначения порта UDP).

...