【问题标题】:Istio envoy proxy issueIstio 特使代理问题
【发布时间】:2020-06-24 01:37:24
【问题描述】:

我们已经在 Kubernetes 集群 1.15.1 上配置了带有演示配置文件的 istio 1.4.0。它按预期工作,但在一段时间后遇到连接到后端服务器(如 mongo DB)的应用程序问题。应用程序 pod 进入 crashloopbackup,如果我禁用了 istio,它可以正常工作。

在检查 istio-proxy 日志后发现行说明 http/1.1 DPE 和 mongo DB IP 和端口号

下面是 Istio-proxy 日志(sidecar),

#
[2020-03-11T13:40:28.504Z] "- - HTTP/1.1" 0 DPE "-" "-" 0 0 0 - "-" "-" "-" "-" "-" - - <mongo IP>:27017 10.233.92.103:49412 - -
[2020-03-11T13:40:28.508Z] "- - HTTP/1.1" 0 DPE "-" "-" 0 0 0 - "-" "-" "-" "-" "-" - - <mongo IP>:27017 10.233.92.103:52062 - -
[2020-03-11T13:40:28.528Z] "- - HTTP/1.1" 0 DPE "-" "-" 0 0 0 - "-" "-" "-" "-" "-" - - <mongo IP>:27017 10.233.92.103:37182 - -
[2020-03-11T13:40:28.529Z] "- - HTTP/1.1" 0 DPE "-" "-" 0 0 0 - "-" "-" "-" "-" "-" - - <mongo IP>:27017 10.233.92.103:49428 - -
[2020-03-11T13:40:28.530Z] "- - HTTP/1.1" 0 DPE "-" "-" 0 0 0 - "-" "-" "-" "-" "-" - - 10.26.61.18:27017 10.233.92.103:52078 - -
[2020-03-11T13:40:28.569Z] "POST /intake/v2/events HTTP/1.1" 202 - "-" "-" 941 0 3 1 "-" "elasticapm-node/3.3.0 elastic-apm-http-client/9.3.0 node/10.12.0" "8954f0a1-709b-963c-a480-05b078955c89" "<apm>:8200" "10.26.61.45:8200" PassthroughCluster - <apm>:8200 10.233.92.103:49992 - -
[2020-03-11T13:40:28.486Z] "- - -" 0 - "-" "-" 47 3671 98 - "-" "-" "-" "-" "<redis>:6379" PassthroughCluster 10.233.92.103:37254 <redis>:6379 10.233.92.103:37252 - -
[2020-03-11T13:40:30.168Z] "- - -" 0 - "-" "-" 632 1212236 104 - "-" "-" "-" "-" "104.16.25.35:443" PassthroughCluster 10.233.92.103:60760 104.16.25.35:443 10.233.92.103:60758 - -```
#

和应用程序日志给出如下错误

{ err: 'socketHandler', trace: '', bin: undefined, parseState: { sizeOfMessage: 1347703880, bytesRead: undefined, stubBuffer: undefined } }

【问题讨论】:

  • 您能否将来自 pod、envoy-proxy、pilot 的 kubectl logs 的问题信息添加到您的问题中?您能否也添加您的 pod 的 kubectl describe。它是外部的MongoDB?你用mtls?
  • 在主要问题中添加了日志
  • 也许这就是问题所在?检查此github issue。和之前的评论一样,你能告诉我它是否是外部数据库吗?你启用了 mtls 吗?
  • @jt9 ...是的,它是一个外部数据库,默认情况下在许可模式下启用 mtls
  • 您是否按照here 的说明配置了ServiceEntry 和DestinationRule?您是否将mongodb 配置为使用 tls?您是否尝试指定here 中提到的端口?如果您使用 grcp,请检查此github issue。和外部mongodb 的类似问题。

标签: mongodb kubernetes istio


【解决方案1】:

问题已解决。

RCA :- 我手动创建了 MongoDB 的服务和端点,端口名称为 http

之后,当我通过 istioctl 命令检查代理配置中的侦听器时,我发现了一个地址为 0.0.0.0 和端口为 27017 的条目

地址端口类型 0.0.0.0 27017 TCP

在 json 输出中,我解释它进入 blackholecluster,即使我在 passthroughcluster 中设置了 allow_any。

istio-proxy 中的输出总是给我 DPE 错误。

了解问题后,我将名称从 http 更改为 http1,并且它工作正常。

现在需要了解为什么http这个名字会引起这么多问题

【讨论】:

    【解决方案2】:

    可能是这个问题:https://github.com/kubernetes/enhancements/issues/753

    基本上,关于容器的订购。在启动时,如果您的 应用程序容器 需要网络并且 sidecar 容器(envoy 代理) 未完全启动,则应用程序将引发网络错误。

    参考:https://discuss.istio.io/t/k8s-istio-sidecar-injection-with-other-init-containers/845

    【讨论】:

    • 如果应用程序无法连接到数据库,则可以通过终止进程来处理。在这种情况下,它会不断重启。
    猜你喜欢
    • 2020-05-11
    • 2019-07-21
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-28
    • 1970-01-01
    相关资源
    最近更新 更多