我正在尝试使用 Istio 和 Envoy 使用 Kubernetes 为服务实现服务网格。我能够设置服务和 istio-proxy,但我无法控制容器和 istio-proxy 的启动顺序。
我的容器是第一次启动并尝试通过 TCP 访问外部资源,但当时 istio-proxy 尚未完全加载,外部资源的 ServiceEntry 也是如此
我尝试在我的服务中添加恐慌,并尝试在访问外部资源之前休眠 5 秒。
有没有办法可以控制这些顺序?
我正在尝试使用 Istio 和 Envoy 使用 Kubernetes 为服务实现服务网格。我能够设置服务和 istio-proxy,但我无法控制容器和 istio-proxy 的启动顺序。
我的容器是第一次启动并尝试通过 TCP 访问外部资源,但当时 istio-proxy 尚未完全加载,外部资源的 ServiceEntry 也是如此
我尝试在我的服务中添加恐慌,并尝试在访问外部资源之前休眠 5 秒。
有没有办法可以控制这些顺序?
除了在 pod 规范中按特定顺序列出容器外,我认为您无法控制顺序。因此,我建议您配置一个就绪探针,以便在您的服务可以向外部发送一些流量之前,您的 pod 还没有准备好。
在 istio 1.7.X 及更高版本上,您可以添加配置选项values.global.proxy.holdApplicationUntilProxyStarts
,这会导致 sidecar 注入器在 pod 的容器列表的开头注入 sidecar,并将其配置为阻止所有其他容器的启动,直到代理准备好。默认情况下禁用此选项。
根据https://istio.io/latest/news/releases/1.7.x/announcing-1.7/change-notes/
Github问题在这里:
我们目前建议开发人员通过在其应用程序容器上运行启动脚本来自行解决此问题,该脚本会延迟应用程序启动,直到 Envoy 收到其初始配置。但是,这有点小技巧,需要对开发人员的每个容器进行更改。