Istio Pilot正在创建应为HTTP的TCP侦听器

时间:2019-02-05 16:08:40

标签: kubernetes istio

设置为Kubernetes v1.13和Istio 1.0.5

我遇到一个问题,其中Istio服务发现正在创建与TCP侦听器而不是HTTP侦听器匹配的Envoy配置。

通信在服务网格中进行,但是我需要Envoy充当第7层代理,而不是第4层直通。我没有收到通过Envoy发送HTTP请求所需的日志。

这是我在sidecar 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

当我在边车中检查Envoy配置时-这是该日志消息的相应配置。

      "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提供HTTP服务的TCP配置?

1 个答案:

答案 0 :(得分:2)

我遇到了这个问题,在我的情况下,我的服务的端口名不是http-xyz的形式。

Istio / Envoy假定流量是TCP,除非它从端口名得到暗示它是其他协议的消息。

按照https://istio.io/help/faq/traffic-management/#naming-port-convention

  

命名端口:必须命名服务端口。

     

为了使用Istio的路由功能,端口名称的格式必须为协议后缀,使用http,http2,grpc,mongo或redis作为协议。

     

例如,名称:http2-foo或名称:http是有效的端口名称,但名称:http2foo不是。如果端口名称不以可识别的前缀开头或未命名,则该端口上的流量将被视为纯TCP流量(除非该端口明确使用Protocol:UDP表示UDP端口)。