从istio网格内部的pod的所有出站HTTP调用中获取404

时间:2019-05-15 06:00:02

标签: kubernetes istio

我使用istio存储库中提供的Helm chart在Kubernetes v1.11上安装了istio v1.1.6,其中包括:

global:
  outboundTrafficPolicy:
    mode: ALLOW_ANY
pilot:
  env:
    PILOT_ENABLE_FALLTHROUGH_ROUTE: "1"
mixer:
  enabled: true
galley:
  enabled: true
security:
  enabled: false

问题是我无法从istio网格内部并已注入istio-proxy作为sidecar的Pod向运行在端口80(网格内部和外部)的服务发出任何简单的出站HTTP请求。响应始终为404:

user@pod-12345-12345$ curl -v http://httpbin.org/headers
* Hostname was NOT found in DNS cache
*   Trying 52.200.83.146...
* Connected to httpbin.org (52.200.83.146) port 80 (#0)
> GET /headers HTTP/1.1
> User-Agent: curl/7.38.0
> Host: httpbin.org
> Accept: */*
>
< HTTP/1.1 404 Not Found
< date: Wed, 15 May 2019 05:43:24 GMT
* Server envoy is not blacklisted
< server: envoy
< content-length: 0
<
* Connection #0 to host httpbin.org left intact

来自使者的istio-proxy日志中的response flag表示找不到正确的路由:

"GET / HTTP/1.1" 404 NR "-" 0 0 0 - "-" "curl/7.38.0" "238d0799-f83d-4e5e-94e7-79de4d14fa53" "httpbin.org" "-" - - 172.217.27.14:80 100.99.149.201:52892 -
  

NR:除了404响应代码外,没有为给定请求配置任何路由。

可能值得补充:

  • 到80以外的任何端口的其他出站呼叫都可以正常工作。
  • 选中proxy-status也不会显示任何内容:所有广告连播都已同步。
  • 已禁用mTLS
  • 上面的示例是对外部服务的调用,但对内部服务的调用(例如:curl another-service.svc.cluster.local/health)也存在相同的问题。
  • 我希望对内部网格服务的调用是开箱即用的,甚至我试图定义DestinationRouteServiceEntry时也没有用。
  • 我真的不希望根据文档将traffic.sidecar.istio.io/excludeOutboundIPRanges: "0.0.0.0/0"批注添加到部署中:
      

    这种方法完全绕过了sidecar,实际上禁用了指定IP的Istio所有功能

知道我还能在哪里看或缺少什么吗?

1 个答案:

答案 0 :(得分:0)

在我看来,您在istio-proxy边车中定义的连接超时很短,请检查here类似的Envoy项目的github问题。

顺便说一句。正如@Robert Panzer提到的,共享istio-proxy配置的整个转储将有助于调查您的特定案例。