Istio 服务网格启动顺序

记录一下istio服务网格的问题

前言

如果启用了istio 服务网格,那么会自动的注入 istio-proxy sidecar

这里的proxy容器与我们的业务容器启动顺序是不确定的,如果在istio-proxy未正确启动之前,在业务容器中就尝试对外进行网络通信,这个时候就会出现问题。 例如:数据库连接 redis连接初始化问题

所以需要注意在业务代码中做好重试,当然现在大多数框架都自带重连机制。

但在实际业务场景下,一旦开启了日志告警,每次服务重启就会导致一堆告警,会很麻烦,这个时候就还是需要控制一下istio 服务网格容器的启动。

解决方法

高版本使用istio自带配置

自Istio 1.7 版本开始,增加了holdApplicationUntilProxyStarts配置项,解决上述问题

参考官网的changelog

低版本使用手动控制

istio-proxy 有一个健康检查的接口,我们可以通过主动探测的方式来确认istio-proxy启动完成,最后再启动自己的服务

1
while [[ "$(curl -s -o /dev/null -w ''%{http_code}'' localhost:15020/healthz/ready)" != '200' ]]; do echo Waiting for Sidecar;sleep 1; done; echo Sidecar available; ./http

注意以上脚本 最后的./http 请替换成自己的业务运行脚本

如果运行参数过多,可以自行编写start.sh 启动脚本,或者使用supervision

参考: https://zhuanlan.zhihu.com/p/369301902

Licensed under CC BY-NC-SA 4.0
Built with Hugo
主题 StackJimmy 设计