Istio 报错503,upstream connect error or disconnect/reset before headers. reset reason: connect
最新推荐文章于 2024-07-19 16:49:24 发布
最新推荐文章于 2024-07-19 16:49:24 发布 阅读量 3w

错误描述:
每一次在升级微服务时(更新微服务版本),会有一段时间访问报 503 。并在 istio-proxy 日志中有记录:”upstream connect error or disconnect/reset before headers. reset reason: connection failure“

原因:
Kubernetes 检测 Pod 准备好(Running 状态)是 Pod 中的一个容器准备好就可以了。但是部署了 Istio 后,Pod 最先准备好的是 istio-proxy 容器。此时真正的微服务容器还没有被启动,流量就进入了 Pod, istio-proxy 接受到流量,并发现 upstream 微服务没有启动,所以 istio-proxy 会返回 503 。

解决办法:
知道原因后,思路就很简单了,只要在 Pod 中所有容器都启动完成后,再告知 Kubernetes Pod 准备好了就可以了。对 Pod 中其他容器加上 readinessProbe(就绪探针)就可以让 Kubernetes 确认容器准备就绪后再进行流量转发。如在 Pod 模板中添加

livenessProbe:
      httpGet:
        path: /healthz
        port: 80
        httpHeaders:
      initialDelaySeconds: 10
      periodSeconds: 3

readinessProbe 参考:https://k8smeetup.github.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/

2020/06/09 08:50:16 [error] 6608#0: *1 connect() to unix:/tmp/php-cgi-73.sock failed (111: Connection refused) while connecting to upstream, client: 192.168.8.133, server: 192.168.8.145, request: “GET / HTTP/1.1”, upstream: “fastcgi://unix:/tmp/php-cgi-73. 这个问题的原因是 SSL 证书验证失败,可能是证书过期、证书不受信任、证书链不完整等原因导致的。确认是否所有的证书都已正确设置,包括根证书、中间证书和服务器证书。如果还是无法解决问题,可以联系证书颁发机构或服务器管理员寻求帮助。命令查看详细的 TLS 握手过程,以确定具体的错误原因。如果以上步骤都没有解决问题,可以尝试使用。确认证书是否被信任,可以使用。确认证书链是否完整,可以使用。确认证书是否过期,可以使用。命令查看证书的过期日期。 upstream connect error or disconnect/reset before headers. reset reason: connection termination错误 最后删除相关pod重启才成功 upstream connect error or disconnect/reset before headers. reset reason: connection failure 通过istio访问容器内服务: https://test-practice.xiaohoucode.com/api/practice/platform/project/X1 upstream connect error or disconnect/reset before headers. reset reason: 错误(虚拟机重启后常见问题): upstream connect error or disconnect/reset before headers. reset reason: connection failure, transport failure reason: TLS error: 268436501:SSL routines:OPENSSL_internal:SSLV3_ALERT_CERTIFICATE_EXPIRED 解决办法: istio-system 下的pod出问题了,需要kubectl 不要单单看envoy的日志,其实感觉看envoy的日志,对于这种问题,感觉没啥卵用,直接去查一下,相关的envoy节点所关联的consul节点日志。其实这个问题是因为consul connect 我采用的是vault,刚好昨天vault服务所在的服务器重启了,vault又没有配置自启,为啥又到了今天才报异常?consul和envoy在国内的文档除了非常简单的,稍微深入一点的都没有,vault比它们更偏门,Google都不好使。立刻把vault删了,把ca的配置改成用consul的,重启consul,完事。 - upstream connect error or disconnect/reset before headers. reset reason: connection termination - grpc-status 14 - http 503 按照官方文档跑 bookinfo 例子,访问 productpage 的时候提示: upstream connect error or disconnect/reset before header 通过命令查看 productpage 的 istio proxy 的日志,日志都是 info 级别,通过调整 level 可以查看到更多 Envoy 的详细日志,打开方式可以通过 port-forwar...